android R preview 3 编译问题修复
android 11 的x86 模拟器支持运行arm 应用了,但是官方提供的模拟器不能root,于是想要自己编译userdebug 版本。
没那么顺利,开始编译后立刻报错了。
不关心过程的直接看最后总结
错题提示
错误关键输出
error: external/seccomp-tests/Android.bp:20:13: unrecognized property "arch.mips"
error: external/seccomp-tests/Android.bp:23:15: unrecognized property "arch.mips64"
error: external/linux-kselftest/Android.bp:53:13: unrecognized property "arch.mips"
error: external/linux-kselftest/Android.bp:56:15: unrecognized property "arch.mips64"
截图
如果你单纯的去这两支文件里屏蔽掉相关代码段还会报其他错误。
寻找解决方案
期间看到这问朋友的博客:Android R preview编译失败,看到 build/soong/android 目录下可能有点东西。
那我们去build 目录下找找线索,有个叫Elliott 的老哥貌似有在做相关修改。
我们去aosp gerrit 上搜他。
这老哥好像最近专门在搞这个,可以看到已经在master 分支上做了修改。那么我们本地preview 3 的分支是什么情况呢?
查看git log,本地preview 3 分支上这两个目录的上次提交还是在一年前,遂checkout master 分支,把对应的修改拉下来。
(上图和下图的时间对不上,那是因为commit 的时间和push 的时间不一样,change id 是一样的)
build….
更新编译进度
fixing…
把这个提交cherry-pick 下来
building…
更新编译进度
这里是返回一个布尔值,暴力点的话可以直接强制return true 解决。
正规方法的话,上aosp 上扒提交,简单说就是两个timezone 的更换与更新。但是提交不止这两个。所以我强制改返回值了。
building…
成了!
解法总结
- external/linux-kselftest 仓库切换到master 分支,如果master 太新有其他问题就只cherry-pick mips 那条提交;
- externl/seccomp-tests 仓库切换到master 分支,如果master 太新有其他问题就只cherry-pick mips 那条提交;
- libcore 仓库从master 分支cherr-pick 一个提交修复错误,”Replace jniStrError with strerror_r”;
- 强制修改 frameworks/base/core/java/android/timezone/CountryTimeZones.java 中的matchesCpuntryCode 那行 renturn true;
- 换个高配电脑,否则可能因内存不足编译终止。