实验室有工作需要修改安卓系统,然后在上面跑从安卓市场爬下来的大批量应用。
编译的安卓系统不支持 ARM
现在存在的问题是,从安卓市场里爬下来的应用都是 ARM 架构的,在编译好的安卓系统里安装时会报错 使用的安卓源码版本是android-9.0.0_r36 编译命令为
export OUT_DIR_COMMON_BASE=/out source ./build/envsetup.sh lunch sdk_phone_x86-userdebug make -j20 # 编译完成后运行模拟器 emulator 之后用 adb 安装某新闻应用com.ss.android.article.news_8.3.3.apk会报错
Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113] 推测是 apk 用到了 arm 架构的二进制文件,没办法在 x86 架构上跑。在网上搜索了一下,发现 x86 好像也是能运行 arm 模拟器的,但是运行效率会很低。于是换了一个目标文件夹自己尝试了一下编译了一个新版本 ( lunch 使用第一个默认选项 aosp_arm-eng )
make clobber export OUT_DIR_COMMON_BASE=~/out-arm source ./build/envsetup.sh lunch aosp_arm-eng make -j20 # 编译完成后运行模拟器 emulator 但是此时模拟器长时间黑屏,无法启动。不清楚是什么原因
Android Studio 中的系统映像支持 ARM
之后搜索了一下,发现在 Android 文档中提到了运行 ARM 的方法
Android 9 和 11 系统映像对 ARM 二进制文件的支持
如果您之前因为应用依赖 ARM 二进制文件而无法使用 Android 模拟器,那么现在您可以使用 Android 9 x86 系统映像或任何 Android 11 系统映像来运行应用,而无需再下载特定的系统映像来运行 ARM 二进制文件。这些 Android 9 和 Android 11 系统映像默认支持 ARM,而且与采用完全 ARM 模拟的系统映像相比,它们提供显著提升的性能。
做了以下尝试:
- 从 Android Studio 里获取的 Android9 和 Android11 系统映像都能进行
com.ss.android.article.news_8.3.3.apk的安装。(说明从 AS 获取的系统映像支持 ARM 架构的 apk ) - 同时也试了一下 Android Studio 中 ARM 的模拟器( Pixel2 XL,android7.1.1 armv7 ),能运行起来,但是确实非常卡顿。这时使用 adb 安装
com.ss.android.article.news_8.3.3.apk无法得到响应(输入命令后长时间内命令行无反馈)。对于低版本的 x86 模拟器的模拟器( Pixel2 XL,android7.1.1 x86 ),则会报错Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113](架构错误会报错,但架构正确也不一定能安装)
现在我的主要问题是以下两个:
- 是否一定能确认安装失败的原因是架构问题?
- 应该用什么配置编译安卓,使得 x86 的系统映像支持 arm ?或者是我缺失了什么文件吗?
谢谢各位
