macOS Big Sur(11.7.5)编译Android 12.0源码过程总结

Android 11系统映像可直接将 ARM 指令转换成 x86 指令,因此以前很多需要真机测试的情况,现在只需要模拟器就可以进行操作了。

不过,根据官方博客 Run ARM apps on the Android Emulator 尾部的一段注意事项:

Note that the ARM to x86 translation technology enables the execution of intellectual property owned by Arm Limited. It will only be available on Google APIs and Play Store system images, and can only be used for application development and debug purposes on x86 desktop, laptop, customer on-premises servers, and customer-procured cloud-based environments. The technology should not be used in the provision of commercial hosted services.

这段事项说明,自己编译的镜像是没办法用上这个功能的,必须是Google编译好的镜像。

前置条件


  • macOS Big Sur(11.7.5)
  • Homebrew (1.1.9 或更高版本)
  • Xcode (13.2.1或更高版本)
  • Android Studio Electric Eel | 2022.1.1 Patch 2

注意:根据Google官方文档,2021年6月22日之后的Android系统版本不支持在macOS系统上构建,我们只能构建之前的版本,或者之后发布的以前版本的补丁修复。目前测试最高只能编译到Android 12.0,  Android  12.1编译不通过。

Important: Platform development on MacOS isn't supported as of June 22, 2021.

准备环境


创建大小写敏感分区

如果文件系统不是大小写敏感的磁盘分区,则需要创建大小写敏感分区用于Android系统编译。

针对文件系统不是 AppleFS 的磁盘,建议创建大小写敏感的文件镜像并挂载。参考如下命令:

针对AppleFS文件系统的磁盘,建议创建大小写敏感的APFS卷宗,相对于文件镜像,性能更好,尤其是针对TimeMachine更加友好。参考如下命令:

代码拉取&构建

运行镜像

选择system-qemu.img和vendor-qemu.img,这两个镜像是专门为qemu运行制作的,如果选择system.img 和vendor.img,则avd运行失败。

上面运行起来的镜像是从 /Volumes/aosp/AndSrc/out/target/product/generic_x86_64/hardware-qemu.ini即可读取配置信息的,但是这个文件直接修改无效,我们如果需要修改参数,只能从启动参数中设置。
比如我们如果需要增大内存,开启GPU的支持,则执行如下命令:

解决报错

解决方案

可以去 github 下载支持的SDK版本,然后解压缩到以下目录:

例如日志中支持的最新SDK版本是11.1,恰好Xcode 13.2.1支持的最低版本正好是这个版本,于是下载该版本并直接解压缩到上面的目录(也可本站下载),然后继续编译:

如果出现如下报错信息:

解决方法:

根据Google官方文档,2021年6月22日之后的Android系统版本不支持在macOS系统上构建,我们只能构建之前的版本,或者之后发布的以前版本的补丁修复。目前测试最高只能编译到Android 12.0,Android 12.1编译不通过。

Important: Platform development on MacOS isn't supported as of June 22, 2021.

使用Android Studio阅读源码

如无特殊说明,以下命令执行都在所下载源码的根目录下。

1、生成工程信息文件

依次执行以下命令,生成IDE工程信息文件 android.iprandroid.iml

2、修改Android Studio配置

加大VM内存:

修改文件大小限制,打开区分大小写选项

3、重启

重启Android Studio使配置生效,然后用Android Studio打开第一步中生成的 android.ipr 文件,由于工程很大,需要较长的时间建立索引(我这台机器花了将近2个小时),请耐心等待。

4、创建JDK 1.8 (No Libraries)

此时当我们打开文件的时候,IDE会有以下提示

所以我们需要创建JDK 1.8 (No Libraries),点击 Configure...,然后选择Add JDK

直接选择jdk1.8.0_181.jdk/Contents/Homeopen之后JDK 1.8 (No Libraries)就创建好了

然后我们需要在项目的SDK 配置中删掉刚才创建的JDK 1.8 (No Libraries)中Classpath里面所有的jar,以保证跳转到AOSP的源码而不是系统安装的JDK中:

5、删除Modules中的dependencies

6、添加生成的资源文件ID目录

完成以上步骤然后同步一下,就可以愉快的在Android Studio中阅读Android源码了,相比于使用sublime等纯文本工具阅读代码,这种方式的优势在于在跟进方法调用时很方便,可以直接control+鼠标左键 进行代码跳转,而这种便捷的代价就是可能需要花上数天完成 环境配置 + 代码下载 + 源码整编。

参考链接


发布者