android 6.0編譯問題總結

硬件平臺: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,方向就錯了,故記錄在此,以此爲戒。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章