老版本aosp常见编译问题

最近看0ctf2016的那道题,需要用到指定版本的oatdump工具,但各个API的oat magic是不一样的,导致oatdump无法使用,于是编译了从古至今所有的oatdump,方便自己和后人使用,记录一下遇到的坑,以及自己的一些常用alias。

android-19, android-4.4.4_r2

这个版本主要问题是缺少JDK-1.6,安装正确、配置正确即可,而oracle已经不提供JDK-1.6了,只能找一些前人保留下来的JDK。这里推荐这个网站http://mirrors.linuxeye.com/jdk

下载后运行jdk-6u45-linux-x64.bin文件,会释放一个文件夹。将其移动到/usr/lib/jvm里,按照其他几个文件一样命名即可,并且创建软链接。比如像这样

放到这里只是为了方便将来寻找,在”source build/envsetup.sh”前,设置环境变量。

这几个值是与source build/envsetup.sh有关的,提前设置即可修改编译时使用的JDK版本。

我一般写在.zshrc里,比如

使用java -v, javac -v查看一下就可以了。

另一个问题是cmake的版本,默认的是4.1,需要使用老版本的cmake。而cmake本身只要一个二进制文件即可,不需要额外的依赖,所以到网上下载deb包。

解压后找到里面的可执行文件,移动到~/.bin/make,之后

安装老版本的gcc,默认的是5.0,需要使用老版本的gcc,还好apt里有。

gcc本身是一个软链接,是指向gcc-5的,同样可以创建一个软链接,~/.bin/gcc -> /usr/bin/gcc-4.7,将PATH中~/.bin的优先级提高即可。

之后进行正常的编译,即可成功编译android-4.4.2_r2。

android-21, android-5.0.1_r1

这个主要遇到的问题是拉不到源码,切换了N个分支终于找到一个能够正确同步的,在编译过程中出现过莫名其妙的问题,可能是缺少apt install的依赖,不知道哪个有用,一次性全都给它安装了,就编译过了。具体是这些东西:

 

同样,需要将~/.bin添加到$PATH里,使用老版本的make和gcc,编译过程会提醒的。

android-22以上

5.1.1以上基本已经比较新了,修改一下JDK即可,其他的一些通用的问题就是很常见的”unsupported reloc 42/43″,我一般修改3个地方。

分别是art/build/Android.common_build.mk,build/core/clang/HOST_x86_common.mk,cp /usr/bin/ld.gold prebuilts/gcc/linux-x86/host/x86_64_linux-glibc2.11-4.x/x86_64-linux/bin/ld。

大概率就不会出问题了,其他小问题都会在 m 的时候给提醒。

android-24/25

android7使用jack进行编译,会在本地占用2个端口分别是jack-client和jack-admin,如果有2个用户同时在编译aosp,或者一个用户很久之前编译完成但是没有关掉jack-server,就会导致另一个用户没有权限重启jack-server,报错为ninja-wrapper出问题,可以简单粗暴地sudo把jack给kill掉。

同样,就算单用户操作,也可能遇到说 “Jack server failed to (re)start”和”No Jack server running”。

解决方法,修改~/.jack-server/config.properties和~/.jack-settings,每个用户都不相同即可。

 

常用的alias

 

最后,分享一下各个版本的oatdump工具,过几天补上链接。

https://github.com/LeadroyaL/AOSP-Host-Bundle


=============================================================
随着访客的增多,LeadroyaL在本站流量的开支越来越多了,曾经1元能用1个月,现在1元只能用3天。如果觉得本文帮到了你,希望能够为服务器的流量稍微打赏一点,谢谢!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*

code