Docker搭建安卓工程編譯環(huán)境

一妓湘、前言

作為開發(fā)者查蓉,除了日常可以輕松通過Android Studio編譯我們的安卓源碼項目外榜贴,有時候我們也需要額外搭建一個編譯環(huán)境豌研,比如一個一鍵編譯平臺,提供給除了開發(fā)人員以外的人員使用唬党。

  • 為什么要使用Docker鹃共?
    因為Docker可以輕松虛擬出一臺Linux(Ubuntu、CentOS等)且不用擔(dān)心損壞驶拱;創(chuàng)建和備份數(shù)據(jù)都相對容易霜浴,失敗了也可以很輕松的重來,可以說是一個非常完美的學(xué)習(xí)軟件屯烦。

二坷随、需要具備哪些知識

  • Docker相關(guān)知識房铭,需要能夠?qū)崿F(xiàn)基本操作驻龟;
  • Linux 命令行相關(guān)知識,比如cp缸匪、mv翁狐、vim等;
  • Git相關(guān)知識凌蔬,熟悉基礎(chǔ)操作露懒;
  • 安卓編譯-出現(xiàn)問題-解決問題相關(guān)經(jīng)驗闯冷,這就靠平時的積累了,因為什么情況都可能遇見懈词;

三蛇耀、準(zhǔn)備工作

1、在你的設(shè)備上安裝Docker坎弯,比如在我的Windows 10專業(yè)版本上纺涤,MAC也可,Linux更佳抠忘;
2撩炊、一個在git平臺托管的且可以正常編譯的安卓工程;確保在你的設(shè)備上能夠正常拉取代碼崎脉,并且找到你的SSH key(Windows在C:\Users\Administrator.ssh目錄下的3個文件)


sshkey.png

四拧咳、開始搭建

1、拉取鏡像&運行虛擬機(本地計算機操作)

開啟命令行終端執(zhí)行如下docker命令:

//拉取鏡像,可能需要花費較長時間
docker pull mobiledevops/android-sdk-image:30.0.3
//啟動目標(biāo)鏡像
docker run -it -u root -v C:\Users\Administrator\.ssh:/gitkey --name="appbuilder" mobiledevops/android-sdk-image /bin/bash
//docker exec -it -u root appbuilder bash
  • 這邊拉取的是包含SDK編譯版本(30.0.3) 的鏡像囚灼,具體版本號需要根據(jù)你的需求和Docker hub能夠提供的版本確定(版本號見: Github--MobileDevOps/android-sdk-image/tags)
  • -u root 使用root賬戶登錄Linux系統(tǒng)虛擬機
  • -v C:\Users\Administrator\.ssh:/gitkey 是將我的電腦的sshkey目錄掛載到虛擬機/gitkey目錄下, 后面git拉取代碼需要用到骆膝,也可以不加,取決于你的git代碼拉取校驗規(guī)則灶体。
2谭网、git準(zhǔn)備&拉取代碼(虛擬機上操作)
  • 生成本地的秘鑰(執(zhí)行命令后回車3次)
ssh-keygen -t rsa -b 4096
  • 覆蓋我的私人秘鑰(為了拉取git代碼--非強制)
cp /gitkey/* /root/.ssh

此部分是為了跟我電腦上的秘鑰一致(/gitkey/目錄是掛著我電腦的秘鑰目錄), 以便能夠成功通過git服務(wù)器校驗拉取代碼, 具體需要根據(jù)實際情況變更。

  • 拉取代碼
git clone -b dev_3.0 git@gitlab.***.com:xxx-android/aicamera.git
cd aicamera
git fetch origin dev_3.0

如下兩個參數(shù)需要根據(jù)你實際情況替換:
dev_3.0是代碼的分支
git@gitlab.***.com:xxx-android/aicamera.git是代碼拉取路徑

代碼拉取成功后繼續(xù)>>>>

3赃春、檢查java版本(虛擬機上操作)

按需安裝特定版本愉择,比如我需要jdk11,所以需要卸載默認(rèn)的jdk17织中,不然編譯報錯锥涕。

//輸出java版本,默認(rèn)是jdk17的
java -version

//更新下apt
apt-get update
//列出系統(tǒng)安裝的jdk版本
apt list --installed | grep jdk
//卸載jdk17
apt remove openjdk-17-jdk -y
apt remove openjdk-17-jre-headless -y
apt autoremove

//安裝jdk11
apt install openjdk-11-jdk -y
//檢查版本
java -version
4狭吼、編譯工程(虛擬機上操作)
./gradlew clean assembleRelease

如果編譯成功則會有類似輸出:

.....
BUILD SUCCESSFUL in 3m 49s
77 actionable tasks: 74 executed, 3 up-to-date

五层坠、遇到的問題及解決方案

1、gradle下載失敗

編譯錯誤并有類似輸出:

Exception in thread "main" java.io.IOException: Downloading from https://services.gradle.org/distributions/gradle-6.7.1-bin.zip failed: timeout

出現(xiàn)此問題是因為無法訪問https://services.gradle.org/distributions/gradle-6.7.1-bin.zip導(dǎo)致的刁笙,可以檢查網(wǎng)絡(luò)或者自己搭建一個http服務(wù)破花,提供gradle-6.7.1-bin.zip的下載服務(wù)。

搭建一個簡易http服務(wù)操作如下:

//安裝vim
apt-get update
apt install vim -y
//編輯gradle腳本
vim gradle/wrapper/gradle-wrapper.properties

將配置文件(gradle-wrapper.properties)中https://services.gradle.org/distributions/gradle-6.7.1-bin.zip替換為我本地的http服務(wù)http\://172.29.112.1:8890/gradle-6.7.1-bin.zip

搭建http服務(wù)則是使用sfk, 在自己的Windows電腦上操作的, 前提是自己提前下載好了gradle-6.7.1-bin.zip(其他版本類似)
在文件相同目錄執(zhí)行命令如下:

sfk httpserv -port=8890
http服務(wù).png

這樣就能下載訪問了

2疲吸、編譯異常中斷座每,源代碼項目工程確認(rèn)沒有問題,都是一些jdk包的異常堆棧輸出

檢查虛擬機的內(nèi)存大小摘悴,可能是內(nèi)存不足導(dǎo)致Daemon進程中斷峭梳。
確保RAM有7G,多個CPU核心
這是我出現(xiàn)問題后的設(shè)置蹂喻,可以編譯成功


docker設(shè)置.png


如果本文對你有幫助就點個贊支持下吧~~~
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末葱椭,一起剝皮案震驚了整個濱河市捂寿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌孵运,老刑警劉巖秦陋,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異治笨,居然都是意外死亡踱侣,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門大磺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來抡句,“玉大人,你說我怎么就攤上這事杠愧〈疲” “怎么了?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵流济,是天一觀的道長锐锣。 經(jīng)常有香客問我,道長绳瘟,這世上最難降的妖魔是什么雕憔? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮糖声,結(jié)果婚禮上斤彼,老公的妹妹穿的比我還像新娘。我一直安慰自己蘸泻,他們只是感情好琉苇,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著悦施,像睡著了一般并扇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上抡诞,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天穷蛹,我揣著相機與錄音,去河邊找鬼昼汗。 笑死肴熏,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的乔遮。 我是一名探鬼主播扮超,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蹋肮!你這毒婦竟也來了出刷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤坯辩,失蹤者是張志新(化名)和其女友劉穎馁龟,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體漆魔,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡坷檩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了改抡。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片矢炼。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖阿纤,靈堂內(nèi)的尸體忽然破棺而出句灌,到底是詐尸還是另有隱情,我是刑警寧澤欠拾,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布胰锌,位于F島的核電站,受9級特大地震影響藐窄,放射性物質(zhì)發(fā)生泄漏资昧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一荆忍、第九天 我趴在偏房一處隱蔽的房頂上張望格带。 院中可真熱鬧,春花似錦刹枉、人聲如沸践惑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尔觉。三九已至,卻和暖如春芥吟,著一層夾襖步出監(jiān)牢的瞬間侦铜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工钟鸵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留钉稍,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓棺耍,卻偏偏與公主長得像贡未,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容