android 6.0编译问题总结

来源:互联网 发布:java菜单树 编辑:程序博客网 时间:2024/04/29 19:41

硬件平台:rk3128

android版本:android 6.0

编译环境:ubuntu 16.04


由于我的环境是android 7.0的编译环境,今天编译android 6.0时遇到一些问题,故记录在此。


1、JDK切换

android 7.0 需要的jdk版本为1.8,而android 6.0需要jdk 1.7,所以首先需要安装jdk1.7,然后就可以在1.7跟1.8之间切换,但是ubuntu 16.04的源已经将jdk1.7移除了,网上百度了一些方法比如点击打开链接 http://www.cnblogs.com/bluestorm/p/5677625.html,需要手动添加仓库,试了一下没有成功,依然无法安装,索性换个思路,换源试一下,于是网上找了阿里的源。

然后:

备份源:sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

替换:sudo vim /etc/apt/sources.list 替换成阿里云的源

替换完成后,运行:

sudo apt-get update

sudo apt-get install openjdk-7-jdk

这时又碰到一个问题,会卡在waiting for headers,继续网上找方法:

根据http://blog.csdn.net/zc123456zzc/article/details/47153913的方法:

rm /var/lib/apt/lists/* 

rm /var/lib/apt/lists/partial/* 

安装完成。


然后可以用

sudo update-alternatives --config java

sudo update-alternatives --config javac

来切换java版本,用java -version来查看是否切换成功:

wintec@wintec:~/work$ java -version

java version "1.7.0_95"

OpenJDK Runtime Environment (IcedTea 2.6.4) (7u95-2.6.4-3)

OpenJDK 64-Bit Server VM (build 24.95-b01, mixed mode)


2、编译

编到五十分钟的时候报很多以下错误:

error unsupported reloc 42


继续网上查,http://www.cnblogs.com/blowing-in-the-wind/p/6518076.html,这里说了三种方法,前两种方法既然这位博主都没有成功,我也就不用试了,直接上第三种:

cp /usr/bin/ld.gold prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.6/x86_64-linux/bin/ld

但是我的版本有些不同,在prebuilts/gcc/linux-x86/host/目录下有两个类似文件夹

x86_64-linux-glibc2.11-4.8/ 

x86_64-linux-glibc2.15-4.8/

一个一个试吧,先

cp /usr/bin/ld.gold   prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8/x86_64-linux/bin/ld

编译,依然报错,然后

cp /usr/bin/ld.gold   prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8/x86_64-linux/bin/ld

编译通过。



20171124更新:

昨天下午把6.0的工程clean掉重新编译,没想到竟然编译不过,没clean之前直接make是能通过的,真是太神奇了,报如下错误:

make: *** No rule to make target 'out/target/common/obj/JAVA_LIBRARIES/sap-api-java-static_intermediates/classes.jack', needed by 'out/target/common/obj/APPS/Bluetooth_intermediates/with-local/classes.dex'.  Stop.
make: *** Waiting for unfinished jobs....


刚好又改过BLUETOOTH相关的宏,难道是改出问题了?查了半天一无所获,今天早上来继续查,首先看到packages\apps\Bluetooth\Android.mk中有这么一条:

LOCAL_STATIC_JAVA_LIBRARIES := com.android.vcard  bluetooth.mapsapi sap-api-java-static android-support-v4


可是找了半天也没找到sap-api-java-static这个库在哪里,幸好百度到了这么一条编译log:

Protoc: out/target/common/obj/JAVA_LIBRARIES/sap-api-java-static_intermediates/src/proto/Proto.stamp <= hardware/ril/librilutils/proto/sap-api.proto


到这才真相大白,原来这个库是在ril中编译的,之前调试3G模块时替换了ril库,没有clean,导致了这个问题,关键是已经很久了,真是不好查啊。

没想到bluetooth用到的库竟然在ril中生成,也是非常无语。

解决办法:

把ril库替换回系统默认。


总结:其实这个问题远没有如此麻烦,只要随便搜索一下之前new的编译log,就能很快找到原因,主要是一开始没想到,

又刚改过bluetooth,方向就错了,故记录在此,以此为戒。

原创粉丝点击