实际项目开发中,FWK需要阅读全部的源码,如果直接用AS打开所有源码会很卡,大多数情况下会直接卡死(公司电脑配置如此),体验感极差;如果使用VS Code阅读,有一个缺点就是无法实现AS里的方法跳转,只能搜索,相对会麻烦一些。
所以介绍AS导入Android.ipr的方式阅读Android源码。
一、生成Android.ipr
1、进入项目根目录,执行:
source build/envsetup.sh
lunch 项目版本号
make idegen -j8
编译完成后有idegen.jar生成(编译成功会有 jar包输出路径)
2、再执行
development/tools/idegen/idegen.sh
// 如果直接执行没有权限,需要sudo + 以上命令
会生成android.ipr 和android.iml文件
注:如果在该步骤中出现以下报错,是本地JDK版本较低的原因:
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError:
Main has been compiled by a more recent version of the Java Runtime
(class file version 53.0),
this version of the Java Runtime only recognizes class file versions up to 52.0
Ubuntu下JDK安装
#更新库
apt update
#查看jdk版本
apt search openjdk
#安装jdk
apt install openjdk-11-jdk
Ubuntu多版本JDK管理
#查看已存在安装版本的jdk
update-alternatives --list java
#选择要使用的版本
update-alternatives --config java
编译器同上,
#查看java编译器版本
update-alternatives --list javac
#更改java编译器版本
update-alternatives --config javac
查看当前Java版本
java -version
二、导入Android.ipr
导入整个源码时需要根据自己的需求来定,打开android.iml文件,把自己不需要导入工程的目录添加进去,将以下内容复制到<content>标签内
<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$/docs" />
<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$/tools" />
打开Android Studio,File -> Open...,选择对应的android.ipr文件
三、关联项目源码
因为AS默认会关联SDK里面的源码,为方便查看项目的源码,需要把SDK源码关联解除,这样我们点击查看某个class时就会打开项目源码的 .java文件,而不是SDK的 .class文件
1、File->Projects Structure->SDKs,新建JDK并任取一个名字,然后清空Classpath、Sourcepath、Annotations、Documentation Paths,也就是新建一个空的JDK路径
2、选择Android API xx Platform(版本不要太低),然后在Java SDK栏选择刚刚新建的JDK,并清空Classpath,Sourcepath,Annotations,Documentation Paths
3、点击Project,SDK栏选择Android API xx Platform
4、点击Modules,点击android,在Dependencies栏删除 <Module source>和 Android API xx Platform以外的所有 jar
最后Apply -> OK即可。