导入Android Studio
Android Studio是阅读Android源码最合适的工具,并且还可以调试,AOSP的idegen模块就提供了对Android Studio最好的支持。按照以下步骤,就可以将源码导入了:
编译idegen模块
mmm development/tools/idegen/
生成android.ipr
development/tools/idegen/idegen.sh
运行完成后会在根目录生成android.ipr和android.iml文件,这里android.ipr就是可以打开的项目,而android.iml可以用来配置加载哪部分文件,因为源码体积过于庞大,加载会很慢,而有很多部分是现在不需要研究的,可以仅关注Framework和Packages部分,在此文件中加入以下几句:
<excludeFolder url="file://$MODULE_DIR$/.repo" />
<excludeFolder url="file://$MODULE_DIR$/abi" />
<excludeFolder url="file://$MODULE_DIR$/art" />
<excludeFolder url="file://$MODULE_DIR$/bionic" />
<excludeFolder url="file://$MODULE_DIR$/bootable" />
<excludeFolder url="file://$MODULE_DIR$/build" />
<excludeFolder url="file://$MODULE_DIR$/cts" />
<excludeFolder url="file://$MODULE_DIR$/dalvik" />
<excludeFolder url="file://$MODULE_DIR$/developers" />
<excludeFolder url="file://$MODULE_DIR$/development" />
<excludeFolder url="file://$MODULE_DIR$/device" />
<excludeFolder url="file://$MODULE_DIR$/docs" />
<excludeFolder url="file://$MODULE_DIR$/external" />
<excludeFolder url="file://$MODULE_DIR$/hardware" />
<excludeFolder url="file://$MODULE_DIR$/libcore" />
<excludeFolder url="file://$MODULE_DIR$/libnativehelper" />
<excludeFolder url="file://$MODULE_DIR$/ndk" />
<excludeFolder url="file://$MODULE_DIR$/out" />
<excludeFolder url="file://$MODULE_DIR$/pdk" />
<excludeFolder url="file://$MODULE_DIR$/prebuilt" />
<excludeFolder url="file://$MODULE_DIR$/prebuilts" />
<excludeFolder url="file://$MODULE_DIR$/sdk" />
<excludeFolder url="file://$MODULE_DIR$/system" />
<excludeFolder url="file://$MODULE_DIR$/tools" />
接下来就可以通过Android Studio打开了。
导入后出现的问题
The current inotify(7) watch limit is too low.
解决方法:
sudo vim fs.inotify.max_user_watches = 524288
sudo sysctl -p --system
然后重启Android Studio。
代码跳转到Jar
导入完成后,当我们进行代码的跳转时,跳转到的是从jar包反编译的*.class类,而不是源码中的类。
解决方法如下:
打开Project Structure,选择Project选项,将SDK设置为和源码版本一致,Android 7.0.0对应的SDK版本号是24,如下所示:
然后选择Modules选项,选择android->Dependencies,再点击右侧的+按钮,选择Jars or directories,将frameworks和external目录添加进来,如下所示:
然后选中所有的*.jar文件,然后点击右侧的向下箭头,点多次,直到它们位于最下方,如下所示:
这样调整完毕之后,就可以跳转到正确的代码了。
调试Java代码
要调试代码,首先要打开模拟器,注意不是Android Studio自带的模拟器,而是通过编译后的代码启动的模拟器,否则可能出现代码不对应的问题。
直接运行emulator
命令是无法启动的,执行方法如下:
source build/envsteup.sh
lunch 6 //和编译时对应
emulator
然后通过Run->Attach debugger to Android process,或者点击工具栏上的图标:
就会出现刚刚启动的模拟器了,在弹出的对话框中勾选Show all processes,就可以看到运行的全部进程:
然后选择system_process,就可以进行调试了。
调试Native代码
因为目前研究重点在Java部分,这部分知识之后再补充~