在Apple Mac M1上编译AOSP ARM Android模拟器
简介
旨在让你能在Mac上运行可自行定制的模拟器和Android系统.
分两个部分,分别编译模拟器emulator和AOSP模拟器镜像, 其中以Android 14为例.
准备
DepotTools
1 | git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git |
显然你必须将/path/to/depot_tools正确替换为实际路径
其中,export命令最好加到.bashrc中,让你的所有终端都能生效
拉取qemu源码并编译
用于将编译得到的镜像运行起来
注意:这一步可以跳过,因为AOSP源码自带一个emulator.如果你想研究emulator的实现才需要自行编译
1 | mkdir emu |
如果repo init有问题,可以改用git.可以切到一个稳定的分支,如aosp-emu-30-release
1 | git clone https://android.googlesource.com/platform/external/qemu |
其中,emu的源码在这,感兴趣可以研究
1 | https://android.googlesource.com/platform/external/qemu/+/refs/heads/emu-master-dev |
- 最后一个python命令会进行大量target的初始化.当你看到终端输出表明编译已经开始了,那么终止这个编译,直接用如下这个命令能让你编译更快
1 | ninja -C objs install/strip |
编译产物:
1 | /path/to/external/qemu/objs/distribution/emulator |
签名:
1 | ./sign-objs-binaries.sh |
这一步将编译得到的emulator及其相关产物进行签名
编译Android
编译Android比较麻烦.因为Mac的文件系统并不区分大小写…并不兼容AOSP.
因此,请在Linux下编译AOSP
1 | mkdir aosp14 |
把这个patch打到build/make/target/board/emulator_arm64/BoardConfig.mk
,移除32位支持: https://android-review.googlesource.com/c/platform/build/+/1518218
启动编译:
1 | source build/envsetup.sh |
其中,lunch的target有平板:sdk_tablet_x86_64, GooglePhone: sdk_gphone_arm64; 当然,它们都可以添加’-userdebug’
打包镜像
把产物打包到zip,放到Mac下面/Applications/Android\ Emulator.app/Contents/MacOS/aosp-master-arm64-v8a/
其中,产物打包脚本如下
1 | echo $ANDROID_PRODUCT_OUT |
启动
直接打开Mac中emulator应用的图标,或者敲命令:
1 | /Applications/Android Emulator.app/Contents/MacOS/emulator/emulator -avd foo |
其中-avd是设备名称