1. 程式人生 > >ANDROID 編譯原始碼6.0 問題記錄

ANDROID 編譯原始碼6.0 問題記錄

1、Ubuntu 系統Ubuntu 14.04 LTS,
2、android原始碼來自於清華TUNA映象源
    http://aosp.tuna.tsinghua.edu.cn/android/
3、下載完android原始碼後,進行原始碼編譯。根目錄make
4、make發現錯誤,無法編譯。報如下錯誤:
You asked for an OpenJDK 7 build but your version is
You are attempting to build with the incorrect version
等。有關SDK版本問題的。
      需要你安裝openJDK...................注意是openJDK   不是甲骨文公司的jdk
      如果是ubuntu,進行sudo apt-get installopenjdk-7-jre
      sudo apt-get installopenjdk-7-jdk
Fedora, OracleLinux, Red Hat Enterprise Linux, etc.
     su -c "yum installjava-1.7.0-openjdk"
    摘抄自:http://www.planetjdk.org/install/index.html
5、然後檢查下java version
java version "1.7.0_101"
OpenJDK Runtime Environment (IcedTea 2.6.6) (7u101-2.6.6-0ubuntu0.14.04.1)
OpenJDK 64-Bit Server VM (build 24.95-b01, mixed mode)


注意這裡OpenJDK 
如果安裝了但是版本沒變:
那麼你可以檢查下環境變數:
sudo gedit /etc/profileexport 


JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64


export JRE_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64/jre


export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib


export PATH={JAVA_HOME}/bin:$PATH


下面命令可以配置java命令的軟連結
sudo update-alternatives  --install  /usr/bin/java java /home/wuekzhu/download/jdk1.6.0_23/bin/java   1888
(將java的連結指向/home/wuekzhu/download/jdk1.6.0_23/bin/java)
下面命令可以選擇java版本
sudo update-alternatives --config java


有 2 個候選項可用於替換 java (提供 /usr/bin/java)。


  選擇       路徑                                          優先順序  狀態
------------------------------------------------------------
  0            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      自動模式
* 1            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1071      手動模式
  2            /usr/lib/jvm/jdk1.8.0_65/bin/java                300       手動模式


要維持當前值[*]請按回車鍵,或者鍵入選擇的編號:


6、然後進行編譯
source build/envsetup.sh
生成各種命令
lauch XXXX 可以選擇編譯
make -j2  (2核編譯-----)
7、編譯錯誤
[1/2] choosing next stage
Choosing primary.ninja.in for next stage
[2/2] bootstrap out/soong/.bootstrap/build.ninja.in
[1/2] choosing next stage
Choosing main.ninja.in for next stage
[2/2] bootstrap out/soong/.bootstrap/build.ninja.in
ninja: no work to do.
Running kati to generate build-aosp_arm.ninja...
No need to regenerate ninja file
Starting build with ninja
ninja: Entering directory `.'
ninja: error: 'prebuilts/clang/host/linux-x86/clang-3016494/bin/clang++', needed by 'out/soong/.intermediates/external/libcxx/libc++/linux_x86_64_shared/libc++.so', missing and no known rule to make it
make: *** [ninja_wrapper] 錯誤 1






問題大概講述:找不到包,進prebuilts/clang/host/linux-x86/目錄發現沒有clang-3016494目錄
解決辦法:進入根目錄下面build/core/clang/versions.mk第二行改為:LLVM_PREBUILTS_VERSION ?= clang-2812033然後又遇到下面的問題:


out/soong/make_vars-aosp_arm.mk:31: LLVM_PREBUILTS_VERSION does not match between Make and Soong:
out/soong/make_vars-aosp_arm.mk:31: Make : clang-2812033
out/soong/make_vars-aosp_arm.mk:31: Soong: clang-3016494
out/soong/make_vars-aosp_arm.mk:37: LLVM_PREBUILTS_PATH does not match between Make and Soong:
out/soong/make_vars-aosp_arm.mk:37: Make : prebuilts/clang/host/linux-x86/clang-2812033/bin
out/soong/make_vars-aosp_arm.mk:37: Soong: prebuilts/clang/host/linux-x86/clang-3016494/bin
out/soong/make_vars-aosp_arm.mk:383: *** Soong variable check failed.
make: *** [out/build-aosp_arm.ninja] 錯誤 1


#### make failed to build some targets (01:22 (mm:ss)) ####
最後發現是原始碼沒有下齊全, 
repo forall -c 'git reset --hard; git clean -f -d -x'




git reset --hard 是將當前HEAD 重置,不會留下之前的痕跡。git clean 清除未追蹤的檔案。d是目錄,f是檔案。






然後編譯又遇到錯誤:
發現openSDK1.7不夠用啊!!!
那麼好吧!還是先安裝下opensdk1.8




sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update 
sudo apt-get install openjdk-8-jdk




先清理下編譯產生的檔案:
make clobber 清理生成的檔案和目錄


然後編譯又報錯:找不到包!! 於是補足包:
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 dpkg-dev libsdl-dev libesd0-dev


然後繼續編譯::::漫長等待

最後成功了。

然後想編譯Android  linux核心,暫時沒有VPN,留待以後研究。