源码下载见前文:WSL Ubuntu 20.04下Android源码下载
idegen 模块编译
在development/tools/idegen/README
下可以看到关于 idegen 工具的相关说明。
在编译之前请先apt-get
一下make
工具。
初始化编译环境
先cd
进源码的根目录,随后初始化环境变量。
source build/envsetup.sh
生成 idegen.jar
参考教程:android studio 调试 framework 层代码
如果之前没有进行过编译建议使用make
命令,android 是基于 Android.mk(类似 makefile) 进行构建编译的,这个命令会遍历所有的模块找到 idegen 的 Android.mk,,然后计算所有的依赖的库,如果依赖库没有编译会先编译所有的依赖库,所以 make 编译时较慢。
make idegen -j6 # 六核编译 idegen 模块
如果之前已经对整个系统进行过编译,此处使用mmm
命令,用于生成idegen.jar
。
mmm development/tools/idegen/
m:编译所有的模块
mm:编译当前目录下的模块,当前目录下要有Android.mk文件
mmm:编译指定路径下的模块,指定路径下要有Android.mk文件
注意:
请务必将源码下载到 wsl 的文件系统中编译,不然会报操作不支持的错误:
Failed to listen for path logs: listen unix out/.path_interposer_log: bind: operation not supported
请务必使用 wsl2,不然会报更加让人摸不着头脑的错:
Failed to listen for path logs: listen unix out/.path_interposer_log: bind: invalid argument
Mac 系统请务必开启区分大小写,否则会报区分大小写的错(Mac 系统也不用 wsl 了吧(挠头)):
************************************************************You are building on a case-insensitive filesystem.Please move your source tree to a case-sensitive filesystem.************************************************************Case-insensitive filesystems not supported
最后成功编译输出:
生成源码根目录生成文件 android.ipr (工程相关设置)和 android.iml (模块相关配置)
source development/tools/idegen/idegen.sh
在根目录下生成了android.ipr
、android.iml
和android.iws
三个文件。
导入 AS
修改 android.iml
直接导入的话 indexing 时长感人,电脑性能不行的话还会把 Android Studio 卡爆,需要在android.iml
文件中把不需要的目录给排除掉。
为了后续方便修改文件,先给文件提权:
chmod 777 -R <安卓源码根目录路径>
在 VS code 中远程连接 wsl(具体方法见本文文首链接的上篇末尾),搜索excludeFolder
,该标签的url
属性指示了不需要引入的目录,可以根据自己的需求进行更改,例如我就把这段替换成
<excludeFolder url="file://$MODULE_DIR$/./external/emma"/><excludeFolder url="file://$MODULE_DIR$/./external/jdiff"/><excludeFolder url="file://$MODULE_DIR$/frameworks/base/docs"/><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$/kernel" /><excludeFolder url="file://$MODULE_DIR$/libcore" /><excludeFolder url="file://$MODULE_DIR$/libnativehelper" /><excludeFolder url="file://$MODULE_DIR$/out" /><excludeFolder url="file://$MODULE_DIR$/pdk" /><excludeFolder url="file://$MODULE_DIR$/platform_testing" /><excludeFolder url="file://$MODULE_DIR$/prebuilts" /><excludeFolder url="file://$MODULE_DIR$/sdk" /><excludeFolder url="file://$MODULE_DIR$/system" /><excludeFolder url="file://$MODULE_DIR$/test" /><excludeFolder url="file://$MODULE_DIR$/toolchain" /><excludeFolder url="file://$MODULE_DIR$/tools" /><excludeFolder url="file://$MODULE_DIR$/.repo" />
在 AS 中打开 android.ipr
在 AS 中打开android.ipr
导入源码,需要一段时间。
如果提示Unable to save settings: Failed to save settings. Please restart Android Studio
等权限相关的警告,请用前述方法进行提权。
切换成package
视图可以根据包路径查看源码。
如果想要查看被排除目录下的源码,可以通过“File—Project Structure—Project Settings”,右键所需的目录,取消勾选“Excluded”,将其添加进来。