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

題外話

先說下作這件事的初衷,領導打算搞先後端的自動化部署打包,原本後端就是用rundeck 自動化部署的,若是把android項目的pull代碼,編譯,打包,自動上傳到服務器也都整成流水線的形式,就須要在服務器上配置下android的環境了,不須要開發,android studio 或者idea intellij就不須要了,但爲了能編譯:sdk,ndk,jdk,gradle,git等東西仍是得裝。html

在安裝環境的時候我必然先查閱下相關資料,看看有沒有其餘小夥伴有經驗,可是參考的相關文章太多,不夠綜合,遇到了不少問題,我仍是把本身總結的發出來,供你們參考。java

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

CentOS(Community Enterprise Operating System,中文意思是:社區企業操做系統)是Linux發行版之一,它是來自於Red Hat Enterprise Linux依照開放源代碼規定釋出的源代碼所編譯而成。因爲出自一樣的源代碼,所以有些要求高度穩定性的服務器以CentOS替代商業版的Red Hat Enterprise Linux使用。二者的不一樣,在於CentOS並不包含封閉源代碼軟件。node

搭建環境

爲了避免直接在服務器上部署時出現大問題,我先在本機環境(mac)上進行測試,安裝了virtual Box模擬器,下載了個ova格式的CentOS鏡像文件直接使用。
virtualBox比較好找,我就只附個centos鏡像下載地址吧:
centos下載
我下載的是7.1版本python

啓動centos

簡略virtualBox導入鏡像文件的過程,只是注意上邊的地址裏已經標明瞭默認用戶的密碼root/reverse,若是你下載了帶gnome界面的版本,也能夠不用管它,桌面上右鍵打開命令行,由於咱們真實服務器上是沒有界面的,只是爲了模擬這個過程,順便回憶下Linux命令linux

在mac上遠程登陸centos

由於虛擬機內速度較慢,而且如過用到了鼠標操做再切回本身的主機須要按住command 鍵,鼠標才能回來,比較麻煩,效率也低,因此咱們直接在本身的mac電腦上遠程操做centos,窗口大小也能夠隨意控制。android

先在centos上輸入命令查看ip地址:c++

  ifconfig複製代碼

結果爲:
git

如今打開你的mac終端輸入github

  ssh root@192.168.1.104複製代碼

而後回車會提示輸入密碼,密碼在下載頁面上,上文提到了,是:reverse,而後回車你就遠程登陸了centos,而後最小化virtualBox和centos界面,剩下的就在你的終端上操做就能夠了。shell

注: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

相關文章
相關標籤/搜索