編譯呀(通過Docker搭建編譯環(huán)境)2019-09-17

  • 獲取基礎(chǔ)鏡像
sudo docker pull ubuntu:14.04
  • 創(chuàng)建容器
    創(chuàng)建容器時(shí),掛載當(dāng)前用戶的share路徑到容器的/home/share上,方便后面拷貝文件
docker run -it -v ~/share:/home/share 2c5e00d77a67 /bin/bash   //2c5e00d77a67 ubuntu image id
  • 更正時(shí)區(qū)
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
echo 'Asia/Shanghai' >/etc/timezone
  • 更換系統(tǒng)源
cp /etc/apt/sources.list /etc/apt/sources.list.bak
echo "xxx" > /etc/apt/sources.list  // 使用源替換 xxx
apt-get update
exit

阿里云的源

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
  • 啟動(dòng)容器
docker ps -a //查看剛剛運(yùn)行的容器的id
docker start f5df2d39fca4 //啟動(dòng)容器
docker exec -it f5df2d39fca4 //進(jìn)入容器終端
  • 添加64位系統(tǒng)對(duì)32位的支持
    • 檢查是否已經(jīng)支持
      dpkg --print-architecture     # 若支持,輸出 amd64
      dpkg --print-foreign-architectures    # 若支持,輸出 i386
    
    • 手動(dòng)開啟支持
     sudo dpkg --add-architecture i386
     sudo 
    
    • 安裝支持庫
    # 只安裝支持庫(原來需要安裝 ia32-libs,目前被以下三個(gè)庫取代)
    apt-get dist-upgrade
    # 只安裝支持庫(原來需要安裝 ia32-libs,目前被以下三個(gè)庫取代)
    apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
    
  • 添加編譯Android源碼需要的依賴
    • 安裝編譯工具以及構(gòu)建套件:
      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
       apt-get install pngquant
       apt-get install imagemagick
    

命令說明
bc 命令行計(jì)算器
lzop 快速壓縮工具
flex 詞法分析器生成器
curl 基于URL的文件傳輸工具
gperf 哈希函數(shù)生成器
bison 語法分析器生成器
xsltproc 快速XSLT引擎,可以通過XSL文件把XML轉(zhuǎn)為HTML,XHTML,PDF...
schedtool 查詢或設(shè)置CPU狀態(tài)
squashfs-tools linux內(nèi)核壓縮工具,只讀式壓縮文件系統(tǒng)Image
pngcrush 批量壓縮PNG圖片
libxml2 libxml2-utils 操作XML文檔工具

  • 安裝JDK
    編譯Android 5.1需要安裝Java開發(fā)環(huán)境,我們使用Jdk-7的版本。這里我們使用oracle jdk 1.7,我們使用手動(dòng)安裝的方式,可以從官網(wǎng)下載對(duì)應(yīng)版本的安裝包(http://www.oracle.com/technetwork/java/javase/archive-139210.html)。
    我們下載的是 jdk-7u79-linux-x64.tar.gz 的版本,把下載下來的安裝包拷貝到~/share目錄下,由于之前做了目錄掛載,我們可以在容器的 /home/share 目錄下找到此安裝包,接下來進(jìn)行安裝:
# 解壓到當(dāng)前目錄下
tar -xvf ./jdk-7u79-linux-x64.tar.gz 
# 創(chuàng)建目標(biāo)目錄
sudo mkdir -p /usr/lib/jvm/jdk1.7.0/ 
# 移動(dòng)文件到目標(biāo)目錄
sudo mv jdk1.7.0_79/* /usr/lib/jvm/jdk1.7.0/
# 添加環(huán)境變量
修改 /etc/profile 文件,添加如下內(nèi)容:
------------------------------------------------
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0
export JAVA_BIN=$JAVA_HOME/bin
export JAVA_LIB=$JAVA_HOME/lib
export CLASSPATH=.:$JAVA_LIB/tools.jar:$JAVA_LIB/dt.jar
export PATH=$JAVA_BIN:$PATH
------------------------------------------------
# 配置完成后,執(zhí)行如下命令使其立即生效:
source /etc/profile

# 另外一種方法
apt-get install software-properties-common
add-apt-repository ppa:openjdk-r/ppa
apt-get update
apt-get install openjdk-8-jdk

# 檢查下是否安裝成功
java --version
  • 提交容器保存為鏡像
docker commit -m "xxx" <CONTAINER ID> <TEPO:TAG>

如:sudo docker commit -m "android-build" 1a61adfb1953 local:v1.0

  • 使用鏡像編譯Android系統(tǒng)源碼
    • 準(zhǔn)備系統(tǒng)源碼
      在宿主機(jī)上,創(chuàng)建源碼目錄,如 /home/android 目錄,并放入Android系統(tǒng)源碼。

    • 掛載源碼目錄到docker容器中

        docker run -it -v /home/android:/home/android 49df00985bd1 /bin/bash
      
    • 開始編譯源碼

      export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx8192m"
      out/host/linux-x86/bin/jack-admin kill-server
      out/host/linux-x86/bin/jack-admin start-server
      cd /home/android
      ./build.sh
       make -j8
    

error

ninja: build stopped: subcommand failed.

編譯android7.0出現(xiàn)的錯(cuò)誤:

ninja: build stopped: subcommand failed.

解決方法:

vi prebuilts/sdk/tools/jack-admin 1.找到如下語句: JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=TMPDIR JACK_SERVER_VM_ARGUMENTS -cpLAUNCHER_JAR LAUNCHER_NAME" 2.將上述語句修改為: JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=TMPDIR JACK_SERVER_VM_ARGUMENTS -Xmx4096m -cpLAUNCHER_JAR $LAUNCHER_NAME"

主要是添加了-Xmx4096m參數(shù),接下來在源碼目錄下執(zhí)行如下命令重啟jack-admin服務(wù):

./prebuilts/sdk/tools/jack-admin stop-server ./prebuilts/sdk/tools/jack-admin start-server

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容