Android 11系统映像可直接将 ARM 指令转换成 x86 指令,因此以前很多需要真机测试的情况,现在只需要模拟器就可以进行操作了。
不过,根据官方博客 Run ARM apps on the Android Emulator 尾部的一段注意事项:
这段事项说明,自己编译的镜像是没办法用上这个功能的,必须是Google编译好的镜像。
由于众所周知的原因,我们是没办法正常下载Android
的源代码的,因此只能使用国内的镜像来操作了。
1.安装repo
工具以及依赖
2.在需要存储代码的地方创建文件夹
3.使用镜像下载Android
源代码
清华大学的镜像
4.Android 模拟器编译(可选)
编译完成之后,产生的模拟器可执行文件及库文件都位于external/qemu/objs/android
目录下:
后面就可以像执行 SDK 中的模拟器那样,执行我们编译的模拟器了:
5.列出android-12全部分支
6.编译Android 12系统镜像
7.引入编译环境变量
8.设置编译目标,此处我们指定编译x86_64
下的完整调试版本(镜像无法安装ARM应用)
9.如果需要跟踪调试代码,建议编译为调试类型
10.编译
注意此处如果发生编译失败,原因基本上是编译顺序导致的引用出错,也就是某些模块还没有编译完成,其他模块已经开始尝试链接,导致依赖错误,此时只要把多线程并发编译修改成单线程编译即可,即直接执行
如果由于内存不足导致的编译失败,可以增加物理内存。但是如果内存无法增加的话,那么适当增加交换分区/交换文件的大小(建议配置16GB以上的交换分区)可以解决此问题,只是编译速度会下降。
运行镜像
选择system-qemu.img和vendor-qemu.img,这两个镜像是专门为qemu运行制作的,如果选择system.img 和vendor.img,则avd运行失败。
上面运行起来的镜像是从~/AndSrc/aosp/out/debug/target/product/generic/hardware-qemu.ini
即可读取配置信息的,但是这个文件直接修改无效,我们如果需要修改参数,只能从启动参数中设置。
比如我们如果需要增大内存,开启GPU
的支持,则执行如下命令:
编译支持ARM应用的镜像
尽管根据
我们自己编译的镜像是没办法直接从源代码编译支持安装运行 ARM 应用的。
但是有两个变通方案:
- 从Google官方的 Android 12 镜像中提取需要的文件塞到我们自己编译的镜像里,参考方案: Adding ARM native bridge to the AOSP11 x86 emulator、android_vendor_google_emu-x86
- 使用 Intel Houdini 实现支持,参考方案:Include Intel Houdini in Android-x86
参考链接
- Android 模拟器下载、编译及调试
- Ubuntu 16.04下载Android源代码
- Android 模拟器支持运行 ARM 应用,Android 11 系统映像可直接将 ARM 指令转换成 x86 指令
- Android 镜像使用帮助
- 解决:Cannot get http://gerrit.googlesource.com/git-repo/clone.bundle
- Android 开源项目简介
- AOSP(Android) 镜像使用帮助
- macOS Sierra (10.12.3)上编译ARM版本Android 5.1.1_r38 (Lollipop)源代码
- 手动修改android模拟器的system.img
- AOSP编译好的rom,烧录入Android Studio里的avd emulator
- snap version gets "Permission denied
- Why is the “repo” package unavailable in Ubuntu 20.04? How can I install it?
- 解决ubuntu编译aosp报错问题:error while loading shared libraries: libncurses.so.5
- SyntaxError: invalid syntax to repo init in the AOSP code
- repo init 错误SyntaxError:invalid syntax
- ubuntu 20.04编译Android 11源代码&模拟器
- Android11源码编译教程与排错指南
- Building Android 11 for x86 with ARM compatibility
- Run ARM apps on the Android Emulator
- The Android Cuttlefish emulator
- How to create a custom sdk for x86 and arm for Android 11
- Support x86+arm multilib build.
- ARM binary code translator
- Adding ARM native bridge to the AOSP11 x86 emulator
- Include Intel Houdini in Android-x86
- Android x86 Arm NativeBridge (libhoudini)
- android_vendor_google_emu-x86
- Integrate Houdini to emulator
- Building QEMU Instances for Scaled Dynamic Android App Analysis
- 解决Ubuntu 22.04频繁杀死应用的问题:关闭systemd-oomd守护进程