1. 程式人生 > >Docker編譯Android6.0原始碼

Docker編譯Android6.0原始碼

## docker環境配置 1. 更正時區時間 ```sh # 檢視當前時間 $ date # 修改當前時間 $ cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime echo 'Asia/Shanghai' > /etc/timezone ``` 2. 更換軟體源至aliyun ```sh cp /etc/apt/sources.list /etc/apt/sources.list.bak echo " # Ubuntu14.0 aliyun source: deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse " >
/etc/apt/sources.list apt update ``` 3. 新增架構支援 ```sh dpkg --add-architecture i386 dpkg --add-architecture amd64 ``` 4. 新增依賴 ```sh apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 ``` 5. 新增安卓原始碼依賴 ```sh # 編譯工具、構建套件 apt-get install gcc-multilib g++-multilib build-essential # 必要軟體 apt-get install git-core gnupg bison flex gperf pngcrush bc zip curl lzop apt-get install schedtool libxml2 libxml2-utils xsltproc squashfs-tools # 庫 apt-get install libesd0-dev libsdl1.2-dev libwxgtk2.8-dev libswitch-perl apt-get install libssl1.0.0 libssl-dev lib32readline-gplv2-dev libncurses5-dev ``` 說明: - bc 命令列計算器 - lzop 快速壓縮工具 - flex 詞法分析器生成器 - curl 基於URL的檔案傳輸工具 - gperf 雜湊函式生成器 - bison 語法分析器生成器 - xsltproc 快速XSLT引擎,可以通過XSL檔案把XML轉為HTML,XHTML,PDF... - schedtool 查詢或設定CPU狀態 - squashfs-tools linux核心壓縮工具,只讀式壓縮檔案系統Image - pngcrush 批量壓縮PNG圖片 - libxml2 libxml2-utils 操作XML文件工具 6. 新增jdk1.7和python 安裝的預設的jdk和python版本 ```sh apt-get install openjdk-7-jdk python ``` 7. 額外新增自己常用工具 - htop - tree - vim `apt-get install -y htop tree vim` ## 編譯報錯 ### 1. fatal internal error, exec of /usr/bin/m4 failed ```sh flex-2.5.39: fatal internal error, exec of /usr/bin/m4 failed frameworks/base/tools/aidl/aidl_language_l.l:55: warning, rule cannot be matched prebuilts/misc/linux-x86/bison/bison: m4 subprocess failed make: *** [out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_l.cpp] Error 1 make: *** Deleting file `out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_l.cpp' make: *** Waiting for unfinished jobs.... make: *** [out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl_language_y.cpp] Error 1 ``` 缺少m4工具,m4 - macro processor,巨集處理器,安裝它 ```sh apt-get install m4 ``` ### 2. java.lang.NoClassDefFoundError ```sh Exception in thread "main" java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2625) at java.lang.Class.getMethod0(Class.java:2866) at java.lang.Class.getMethod(Class.java:1676) at sun.launcher.LauncherHelper.getMainMethod(LauncherHelper.java:494) at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:486) Caused by: java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.BouncyCastleProvider at java.net.URLClassLoader$1.run(URLClassLoader.java:360) at java.net.URLClassLoader$1.run(URLClassLoader.java:349) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:348) at java.lang.ClassLoader.loadClass(ClassLoader.java:430) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:323) at java.lang.ClassLoader.loadClass(ClassLoader.java:363) ... 6 more ``` 因為加入了jdk的第三方安全庫,故需要進行額外配置: #### 2.1 下載 bcprov-jdk-xxx.jar包 下載地址:http://www.bouncycastle.org/latest_releases.html 找到對應自己jdk版本的 bcprov-jdk****.jar 包下載,我這是ubuntu14.04下載的預設jdk版本,1.7.0_201 故下載了 JDK 1.5 - JDK 1.11: bcprov-jdk15on-165.jar #### 2.2 將其放入 JAVA_HOME/jre/lib/ext 下 JAVA_HOME 可以`echo $JAVA_HOME`獲得或看 java.conf 或 自己 `which java` 等手段查詢當前 java 對應的目錄 我這是 /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/ext,將上面的 jar 包放入 #### 2.3 修改 java.security 檔案 修改 JAVA_HOME/jre/lib/security/java.security 檔案,在下面加上 ```sh security.provider.x=org.bouncycastle.jce.provider.BouncyCastleProvider ``` >
注意:如果放入了和自己jdk版本不對應的jar包,後面編譯可能還會報`java.lang.VerifyError`錯誤 ### 3. USER: unbound variable 老問題, 由於docker沒有設定USER環境變數導致 我這將 export USER=$(whoami) 匯入 /etc/bash.bashrc 中,以供docker環境重複使用 也可以設定自己需要的名字 `ENV US