源码下载见前文: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”,将其添加进来。


本文详细介绍了在WSL环境下Ubuntu 20.04下如何下载并编译Android源码中的idegen模块,包括环境初始化、make/mmm命令的使用,以及如何通过排除部分目录加快AS导入速度。重点讲解了如何配置Android Studio以排除不必要的文件夹,确保高效开发环境。

1075

被折叠的 条评论
为什么被折叠?



