1. 程式人生 > >Android7.0程式碼編譯環境(多JDK安裝&jack常見報錯)

Android7.0程式碼編譯環境(多JDK安裝&jack常見報錯)

AndroidN升級之後,對Ubuntu的環境要求至少是Ubuntu14.04,為此要重新裝系統(狗血。。),對JDK的要求也升級到openjdk-8,但還是需要保留原有的openjdk-7,Android6.0的JDK版本要求還是7。

先說多JDK的版本安裝,一臺機器上同時安裝了多個JDK版本需要做如下配置,以便方便切換:
1、我本機的JDK的安裝路徑:/usr/lib/jvm/, ls可以看到有6、7、8三個版本的JDK;
這裡寫圖片描述
2、配置環境變數: sudo vim /etc/profile
在末尾增加三行:

export JAVA_HOME=/usr/bin/java
export PATH=PA
TH:
{JAVA_HOME}/BIN:${JAVA_HOME}/jre/bin
export CLASSPATH=CLASSPATH:.:JAVA_HOME/lib:$JAVA_HOME/jre/lib

這裡寫圖片描述

這裡注意:JAVA_HOME我們並沒有具體指向到某一個版本的JDK,而是指向到usr/bin/java,是為了方便下面的切換

3、配置update-alternatives命令:
先把三個版本的JDK安裝指向到/usr/bin/java, 末尾的0、1數字代表優先順序,我們把最常用的JDK8的優先順序調到最高

sudo update-alternatives –install /usr/bin/java java /usr/lib/jvm/java-8-openjdk-amd64/bin/java 1
sudo update-alternatives –install /usr/bin/java java /usr/lib/jvm/java-7-openjdk-amd64/bin/java 0
sudo update-alternatives –install /usr/bin/java java /usr/lib/jvm/java-6-sun/bin/java 0

以同樣的方式配置好javac、javah

sudo update-alternatives –install /usr/bin/javac javac /usr/lib/jvm/java-8-openjdk-amd64/bin/javac 1
sudo update-alternatives –install /usr/bin/javac javac /usr/lib/jvm/java-7-openjdk-amd64/bin/javac 0
sudo update-alternatives –install /usr/bin/javac javac /usr/lib/jvm/java-6-sun/bin/javac 0
sudo update-alternatives –install /usr/bin/javah javah /usr/lib/jvm/java-8-openjdk-amd64/bin/javah 1
sudo update-alternatives –install /usr/bin/javah javah /usr/lib/jvm/java-7-openjdk-amd64/bin/javah 0
sudo update-alternatives –install /usr/bin/javah javah /usr/lib/jvm/java-6-sun/bin/javah 0

如果配置錯誤的話,可以通過remove命令刪除
update-alternatives –remove name path

*在編譯最新的7.0程式碼時, 還被要求了jar 和 javadoc, 需要用以上配置方法配置jar和javadoc, 或也可以手動寫死jar和javadoc的引用路徑指向到openjdk8的bin目錄(編譯6.0程式碼時並不需要這兩個命令), 方法如下:

cd /usr/bin/
ln -s -f /usr/lib/jvm/java-8-openjdk-amd64/bin/jar
ln -s -f /usr/lib/jvm/java-8-openjdk-amd64/bin/javadoc

現在就可以通過config命令來切換java版本了,sudo update-alternatives –config java
這裡寫圖片描述

切換完,可以通過java -version來確認一下是否切換成功
這裡寫圖片描述

至此,JDK環境已經配置完成,可以開始編譯Android7.0程式碼了,AndroidN上的程式碼編譯使用了jack服務,對系統記憶體有很高的要求,在編譯過程中,往往會因為請求不到可用記憶體而失敗,常見的錯誤及解決方案:

這裡寫圖片描述
解決方案:
程式碼根目錄下執行
export JACK_SERVER_VM_ARGUMENTS=”-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g”
./prebuilts/sdk/tools/jack-admin kill-server
./prebuilts/sdk/tools/jack-admin start-server
如果不能重新啟動start-server,可以檢視一下當前系統的記憶體使用情況 free -m
對於記憶體佔用量居高不下的情況可具體檢視是哪些程序佔用了記憶體,或者重啟機器來釋放記憶體。