自動化整合是當前的主流趨勢,一般配置自動化整合環境都是採用Server
版本,並沒有桌面環境(沒有UI),之前寫了CentOS 安裝 Jenkins,還有Jenkins持續整合Android專案,下面就需要在Server
上安裝Android SDK
了,用來打包Android程式。
##獲取SDK安裝包
獲取android-sdk-linux
的安裝包,可以通過下面的命令直接獲取。
這個包有時候在下不需要翻牆也可以成功下載,如果下載不下來就需要翻牆下載了,再上傳到伺服器上面,或者你的伺服器可以直接翻牆。(推薦一個國內的映象網站tools.android-studio.org/index.php/s…也可以在這個網站上下載)。
直接解壓安裝包:
tar zxvf android-sdk_r24.4.1-linux.tgz
安裝包解壓之後,就需要下載platform
,platform-tool
以及Android SDK
了。使用Android Studio
是可以直接在SDK Manager
下載的,但是Server
上沒有UI,所以需要使用命令列更新了。
##android 命令
到andorid的安裝目錄裡的tools
目錄下,執行命令:
android -h
Usage:
android [global options] action [action options]
Global options:
-s --silent : Silent mode, shows errors only.
-v --verbose : Verbose mode, shows errors, warnings and all messages.
--clear-cache: Clear the SDK Manager repository manifest cache.
-h --help : Help on a specific command.
...
- sdk : Displays the SDK Manager window.
- list sdk : Lists remote SDK repository.
...
- update sdk : Updates the SDK by suggesting new platforms to install if available.
- update adb : Updates adb to support the USB devices declared in the
SDK add-ons.複製程式碼
可以看到使用幫助中有update sdk
,update adb
的升級命令以及list sdk
命令。
更新Android SDK
主要用到兩個命令,一個是從伺服器上獲取Android最新的可用SDK:
android list sdk
更新SDK的命令:
android update sdk
一般情況下我們不需要更新全部的SDK,只需要選擇性的更新部分SDK即可,可以使用--filter
引數,來選擇要更新的SDK,還可以使用android update sdk --no-ui --all --force
強制更新所有的SDK到電腦上。
這裡需要重點強調下--all
引數,開發環境中不一定使用最新的SDK,有的時候就需要使用之前的build tools
和sdk
,這個時候可以使用引數--filter
查到歷史的SDK:
android list sdk --all
列出所有的SDK,在選擇更新sdk的時候使用--filter
選擇的時候也必須加上--all
引數。
使用命令列更新比較麻煩的是遇到了個問題: 一般更新Andorid SDK都是使用SDK Manager
直接更新,而因為牆的問題dl-ssl.google.com/android
無法使用。
##使用代理更新SDK
真實情況是執行命令android list sdk
的時候,都會卡在:
Fetching https://dl.google.com/android/repository/addons_list-2.xml複製程式碼
因為大家都知道的原因google的服務是無法使用的,還好Android SDK Manager
命令提供了兩個代理引數:
--proxy-host
設定代理的host地址--proxy-port
設定代理的埠
可以通過代理使用國內的Android映象,國內的Android代理映象伺服器:
http://mirrors.neusoft.edu.cn 埠:80
http://ubuntu.buct.edu.cn/ 埠:80
http://ubuntu.buct.cn/ 埠:80
http://sdk.gdgshanghai.com 埠:8000
IPv6: http://ubuntu.buct6.edu.cn/ 埠:80複製程式碼
使用代理檢視SDK
列表:
android list sdk --proxy-host ubuntu.buct.edu.cn --proxy-port 80 -s --all
id: 1 or "doc-23"
Type: Doc
Desc: Documentation for Android SDK, API 23, revision 1
......複製程式碼
使用代理更新指定SDK:
android update sdk --no-ui --filter 1 --proxy-host ubuntu.buct.edu.cn --proxy-port 80 -s --all
這條命令會安裝id: 1 or "doc-23"
Android 23的文件 。
安裝的時候會提示接受license
:
Do you accept the license 'android-sdk-preview-license-52d11cd2' [y/n]:複製程式碼
選擇y同意之後才能繼續安裝,等待安裝成功即可。
使用國內的映象伺服器安裝,服務穩定,下載速度快,不需要翻牆。
- 注:其中extra-android-m2repository,就是android的
Support Libraries
。
##可能會出現的錯誤
第一個可能會出現的錯誤
Cannot run program "/var/lib/jenkins/tools/android-sdk/build-tools/23.0.1/aapt": error=2, No such file or directory at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048) at com.android.builder.png.AaptProcess$Builder.start(AaptProcess.java:163) at com.android.builder.png.QueuedCruncher$1.creation(QueuedCruncher.java:106) at com.android.builder.tasks.WorkQueue.run(WorkQueue.java:203) at java.lang.Thread.run(Thread.java:745) Caused by: java.io.IOException: error=2, No such file or directory at java.lang.UNIXProcess.forkAndExec(Native Method) at java.lang.UNIXProcess.<init>(UNIXProcess.java:248) at java.lang.ProcessImpl.start(ProcessImpl.java:134) at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029) ... 4 more Thread(png-cruncher_2) has a null payload複製程式碼
因為使用aapt是32位的,不能在64位的系統上面執行,需要安裝對32位的支援。
CentOS安裝命令:sudo yum install libz.so.1
Ubuntu安裝命令:sudo yum apt-get install lib32z1
第二個可能會出現的錯誤
這個錯誤出現在build tools
的版本為:25.0.0上面/build-tools/25.0.0/aapt:** /lib64/libc.so.6: version
GLIBC_2.14' not found (required by /var/lib/jenkins/tools/android-sdk/build-tools/25.0.0/aapt)/var/lib/jenkins/tools/android-sdk/build-tools/25.0.0/aapt: /lib64/libc.so.6: version
GLIBC_2.14' not found (required by /var/lib/jenkins/tools/android-sdk/build-tools/25.0.0/lib64/libc++.so) FAILED
該問題出現的原因是因為libc庫
的版本低,CentOS 的libc版本為2.14
,需要升級到CentOS 7
才有支援GLIBC_2.14
,如果不想升級CentOS,就需要自己編譯glibc 2.14
,編譯的步驟:
wget ftp.gnu.org/gnu/glibc/g…
tar zxvf glibc-2.14.tar.gz
cd glibc-2.14
mkdir build
cd build
../configure -prefix=/opt/glibc-2.14
make -j4
sudo make install
export LD_LIBRARY_PATH=/opt/glibc-2.14/lib
這樣就可以使用glibc 2.14
了,但是aapt並沒有指定使用編譯的glibc-2.14
,指定aapt使用glibc-2.14
就可以解決上面的問題了。
首先將build tools
中的aapt重新命名為:aapt_
cd /path/to/build-tools
mv aapt aapt_
再新建一個指令碼aapt
用來指定glibc 2.14
的環境變數,設定環境變數之後再啟動重新命名的aapt_,指令碼為:
#!/bin/sh
echo "$0"_$@
export LD_LIBRARY_PATH=/opt/glibc-2.14/lib && "$0"_ $@複製程式碼
這樣就解決了上面的錯誤,完成了Android SDK
的安裝