在CentOS上全命令列搭建android編譯環境

小豬睡枕頭single發表於2017-09-28

題外話

先說下做這件事的初衷,領導打算搞前後端的自動化部署打包,本來後端就是用rundeck 自動化部署的,如果把android專案的pull程式碼,編譯,打包,自動上傳到伺服器也都整成流水線的形式,就需要在伺服器上配置下android的環境了,不需要開發,android studio 或者idea intellij就不需要了,但為了能編譯:sdk,ndk,jdk,gradle,git等東西還是得裝。

在安裝環境的時候我必然先查閱下相關資料,看看有沒有其他小夥伴有經驗,但是參考的相關文章太多,不夠綜合,遇到了很多問題,我還是把自己總結的發出來,供大家參考。

先從某百科上貼上下概念,什麼是centos?

CentOS(Community Enterprise Operating System,中文意思是:社群企業作業系統)是Linux發行版之一,它是來自於Red Hat Enterprise Linux依照開放原始碼規定釋出的原始碼所編譯而成。由於出自同樣的原始碼,因此有些要求高度穩定性的伺服器以CentOS替代商業版的Red Hat Enterprise Linux使用。兩者的不同,在於CentOS並不包含封閉原始碼軟體。

搭建環境

為了不直接在伺服器上部署時出現大問題,我先在本機環境(mac)上進行測試,安裝了virtual Box模擬器,下載了個ova格式的CentOS映象檔案直接使用。
virtualBox比較好找,我就只附個centos映象下載地址吧:
centos下載
我下載的是7.1版本

啟動centos

簡略virtualBox匯入映象檔案的過程,只是注意上邊的地址裡已經標明瞭預設使用者的密碼root/reverse,如果你下載了帶gnome介面的版本,也可以不用管它,桌面上右鍵開啟命令列,因為我們真實伺服器上是沒有介面的,只是為了模擬這個過程,順便回憶下Linux命令

在mac上遠端登入centos

因為虛擬機器內速度較慢,並且如過用到了滑鼠操作再切回自己的主機需要按住command 鍵,滑鼠才能回來,比較麻煩,效率也低,所以我們直接在自己的mac電腦上遠端操作centos,視窗大小也可以隨意控制。

先在centos上輸入命令檢視ip地址:

  ifconfig複製程式碼

結果為:

現在開啟你的mac終端輸入

  ssh root@192.168.1.104複製程式碼

然後回車會提示輸入密碼,密碼在下載頁面上,上文提到了,是:reverse,然後回車你就遠端登入了centos,然後最小化virtualBox和centos介面,剩下的就在你的終端上操作就可以了。

注:1 設定virtualBox的時候要設定網路卡為橋接模式,不然有可能你會遠端登入失敗
2 假如你開機後登入的是非root賬戶,可以用

  su root複製程式碼

來切換到root賬戶下,這樣會減少一些許可權上的麻煩,當然我們的前提都是模擬安裝android環境,在真實場景中不要這麼幹

安裝jdk

centos上一般會預設安裝jdk,所以先檢視下已安裝的版本是不是你想要的

  java -version複製程式碼

如果是的話,直接跳過這一節,否則可以繼續往下看;

輸入命令檢視所安裝JDK的包的情況,這一步是為了將你不需要的版本解除安裝乾淨

  rpm -qa|grep java複製程式碼

結果可能是這樣的:

javapackages-tools-3.4.1-6.el7_0.noarch
java-1.7.0-openjdk-headless-1.7.0.71-2.5.3.1.el7_0.x86_64
python-javapackages-3.4.1-6.el7_0.noarch
tzdata-java-2014i-1.el7.noarch
java-1.7.0-openjdk-1.7.0.71-2.5.3.1.el7_0.x86_64複製程式碼

因為我想要安裝jdk8 ,所以先刪除上邊的東西:

 sudo rpm -e --nodeps xxx xxx xxx xxx xxx複製程式碼

xxx是上邊列出的五個檔名,中間用空格隔開;

檢視你的centos具體版本,

  uname -i複製程式碼

如果是x86_64那就是64位,如果是i386那麼就是32位,然後去oracle官網下載對應版本
附oracle jdk地址:oracle

我是先在mac上下載好安裝zip包,然後通過命令複製到centos上

  scp jdk-8u144-linux-i586.tar.gz root@192.168.1.104:/你自定義的資料夾路徑複製程式碼

注意上邊的命令不是在遠端登入的視窗上,你需要新開啟個你本機的終端視窗,兩個環境不要弄混

然後在cd到上述的路徑下,unzip命令解壓即可。

至於我為什麼不直接在centos裡下載,因為我不知道怎麼獲取jdk包的下載地址,通過在oracle官網上右鍵:複製出的下載地址其實是個網頁,有會的朋友可以教我。

然後,配置你jdk8的環境變數,開啟profile檔案

  vi /etc/profile複製程式碼

這個檔案是系統級別的,所有賬戶都可以使用,然後將下列複製到這個檔案末尾

  #設定jdk環境變數
  JAVA_HOME=/home/centos/Desktop/java/jdk1.8.0_144
  JRE_HOME=/home/centos/Desktop/java/jdk1.8.0_144/jre
  CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
  PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
  export JAVA_HOME JRE_HOME CLASS_PATH PATH複製程式碼

其中相應路徑改成你自己的,然後esc,:wq退出
為了使用環境變數生效,輸入:

  source /etc/profile複製程式碼

然後再測試下

  java -version複製程式碼

注:網上有的文章是安裝的openJDK,據我後續操作的經驗,最好不要安裝 openJDK,android在openJDK版本環境下編譯可能缺少部分檔案,編譯不通過,所以最好換成普通的jdk

附:關於openJDK和 普通JDK的區別
openJDK

安裝SDK

新建個目錄(隨意,可以不建,只是為了便於管理你自己的檔案),然後下載sdk包

  mkdir android複製程式碼
  wget  http://dl.google.com/android/android-sdk_r24.0.1-linux.tgz複製程式碼

上邊的wget是下載目錄,後邊跟上一個下載地址即可。如果下載緩慢你可能需要翻~~牆了,下載完畢後解壓:

  tar xvzf android-sdk_r24.0.1-linux.tgz複製程式碼

解壓完畢別忘了刪除壓縮包,因為比較大,佔空間,保留解壓後的sdk資料夾就好了

  rm -rf android-sdk_r24.0.1-linux.tgz複製程式碼

cd進入這個sdk目錄,你可能發現沒有platform-tools等相關檔案,對,現在這個sdk就是個空殼子,連adb都沒有,你需要手動更新,

插曲:你大概可能需要安裝一些相容庫

在UI模式下執行,需要安裝canberra-gtk-module

  yum install libcanberra-gtk2複製程式碼

在64位的機器上執行android的工具需要安裝一些32位的庫:

  yum install glibc.i686 libgcc.i686 libstdc++.i686複製程式碼

如果在安裝libgcc的時候提示版本衝突,請更新系統:

  yum update複製程式碼

如果在前面的安裝中disable掉了/etc/yum.repo/CentOS-Base.repo,升級的時候需要恢復它,或用

  yum -c yum_repo_file複製程式碼

加上這個庫。

現在cd進入sdk/.../tools 目錄下,我們要模擬sdk manager進行sdk的更新了,因為沒有圖形介面,只能用命令列:
執行

  ./android list sdk --all複製程式碼

這個目錄就是列出所有的sdk,build-tools,source等檔案,同樣可能需要翻~~牆,下圖為結果

然後執行命令選擇你想要的包進行安裝,如果想安裝多個,選擇上圖的序號,用空格隔開:

 ./android update sdk -u -a -t 1,2,4,6,8複製程式碼

然後經過漫長的等待,安裝完畢
配置環境變數,方法同jdk

#設定android環境變數
export ANDROID_SDK_HOME=/home/centos/Desktop/android/android-sdk-linux
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$ANDROID_SDK_HOME/tools:$ANDROID_SDK_HOME/platform-tools複製程式碼

然後測試下adb命令或android命令吧

安裝ndk

因為我的專案中用到了jni,所以需要安裝下
先上個官方地址:官方ndk
可以自己去找對想要的版本。

新建目錄,然後下載ndk, 最後解壓

mkdir ndk複製程式碼
wget https://dl.google.com/android/repository/android-ndk-r15c-linux-x86_64.zip複製程式碼
unzip android-ndk-r15c-linux-x86_64.zip複製程式碼

我沒有設定ndk的環境變數,暫時沒用到。

安裝gradle

下載

wget https://services.gradle.org/distributions/gradle-2.8-bin.zip複製程式碼

解壓,配置,環境變數,不囉嗦了

安裝git

yum install git複製程式碼

這個好,直接安裝,環境變數都不用配置了

測試pull 程式碼,編譯

環境大致搭建完成,如果想測試下的可以用github裡的專案。
首先你有個github賬號,登入,然後在centos裡生成ssh key公鑰

ssh-keygen -t rsa -C "your_email@youremail.com複製程式碼

一路回車,最後檢視你的公鑰:

cd ~/.ssh複製程式碼
ls複製程式碼

列出的檔案字尾為pub的即你的公鑰檔案,開啟它:

tail xxx複製程式碼

複製出來貼上到你的github的 key設定裡,然後你就可以clone 下你的專案,用gradle進行編譯了

gradle build複製程式碼

問題

編譯專案的時候我遇到了若干問題:
1 提示缺少對應的build-tools或者sdk版本,去上邊找sdk的安裝步驟,下載你缺少的元件
2 提示 You have not accepted the license agreements of the following SDK components
這是因為你下載的sdk目錄下缺少授權檔案,對比你本機的sdk路徑下去生成:

在 sdk 根目錄下建立資料夾licenses,資料夾下建立檔案android-sdk-license,內容為:8933bad161af4178b1185d1a37fbf41ea5269c55複製程式碼

3 提示ndk not configured
我們平時的專案根目錄下會有一個檔案:local.properties
這個檔案是android studio生成的,但我們現在沒有安裝as,只能自己手動建立了
cd 到project 根目錄下,

touch local.properties複製程式碼

然後進入編譯:

vi local.properties複製程式碼

內容去你平時專案裡找,記得填寫正確了sdk和ndk的路徑

結尾

內容大概就是這麼多,此文的目的只是為了介紹在沒有介面的情況下如何搭建android環境,畢竟平時那些安裝包都是android studio幫我們自動下載的,不熟悉Linux的同學會有些難受。

自動化部署的話也可以用到rundeck,這是個執行指令碼的工具而已,將你的git pull,gradle build等相關命令寫成shell指令碼,然後用rundeck跑一遍就成了自動化部署,相關詳細內容以後可以單獨描述一篇。

另外,發現掘金的部落格的書寫方式居然是markdown 格式的,大讚,很方便。

最後附上我的github,歡迎捧場:
我的github

相關文章