Android源码分析:JNI与init方法

需积分: 11 10 下载量 168 浏览量 更新于2024-08-13 收藏 1.18MB PPT 举报
"这篇资源主要介绍了在Android源码分析中常用的两种方法——静态法和动态法,以及JNI(Java Native Interface)的相关重难点。作者强调了如何通过JNI调用C/C++函数,并操作Java层的对象。以下是详细内容的概述: 一、JNI重难点分析 JNI是Java和本地代码(C/C++)交互的接口,它允许Java代码调用本地方法,同时也允许本地代码操作Java对象和调用Java方法。 1.1 注册方法的选择 在Java中声明的native方法需要在本地代码中找到对应的方法实现。有两种注册方法: 1. 静态法:根据特定的函数命名规则,例如`native_init`在本地库中会被映射到`Java_android_media_MediaScanner_native_1init`。实现这个过程的步骤包括: - 编写Java代码,编译成`.class`文件。 - 使用`javah`工具,例如`javah -o output packagename.classname`,生成JNI头文件`output.h`,该文件包含了Java native方法对应的本地函数声明。 2. 动态法:与静态法不同,动态法在运行时动态查找和注册native方法,更灵活但实现相对复杂。 二、init重难点分析 这部分可能涉及初始化过程中的关键点,如`keywords.h`的有趣用法,以及如何利用`DllMain`函数实现客户端Property读取。 三、Android常用类重难点分析 这部分涵盖了如`RefBase`、`sp`和`wp`等Android框架中基础类的使用和理解,以及一些深入的话题,如无所不用其极的编程技巧。 四、Binder重难点分析 Binder是Android系统的进程间通信机制,讲解了Binder与线程的关系,以及可能涉及的时空穿越魔术(可能指的是跨进程通信的技术)。 五、Audio系统重难点分析 这部分深入解析了AudioTrack、AudioFlinger中的对象、AudioPolicyService的实例,以及`audio_control_block_t`等音频系统核心组件,并提供了DesktopCheck的学习实践。 六、Surface系统重难点分析 讲解了如何建立Activity与SurfaceFlinger的联系,SurfaceFlinger的工作流程,Transaction分析,以及CameraService中的严重bug和PageFlip过程。 这篇资源提供了Android系统源码分析的深度见解,特别是JNI的使用和Android系统关键组件的理解,对于想要深入研究Android内核的开发者非常有价值。"