Linux服務器編譯安卓代碼的基本環境
開發安卓最主要的開發工具就是Android Studio,而AndroidStudio的編譯工具就是Gradle,因此Gradle是必不可少的;另外Android開發所依賴的開發工具包也是必不可少的。現在就開始准備這兩個東西。
SDK
sdk:軟件開發工具包(縮寫:SDK、外語全稱:Software Development Kit)一般都是一些軟件工程師為特定的軟件包、軟件框架、硬件平台、操作系統等建立應用軟件時的開發工具的集合。
下載
cd /opt wget https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip unzip sdk-tools-linux-3859397.zip mkdir sdk mv tools/ sdk/
環境變量
vim /etc/profile
export ANDROID_HOME=/opt/sdk
export PATH=${ANDROID_HOME}/tools/bin:${ANDROID_HOME}/tools/bin:${ANDROID_HOME}:${PATH}
source /etc/profile
sdkmanager --list
如果報錯是因為沒有jdk
Gradle
關於gradle的選擇:
因為針對不同的項目,所用的gradle的版本是不一樣的,而且涉及到在源碼配置文件中不同的gradle插件與不同的gradle兼容性不一樣,所以穩妥起見先看自己的源代碼(別說你不用android studio):
先找一個在本地可以正常打包的apk源碼(要是本地都不成功,那就是代碼有問題了,服務器不背鍋)
下載
cd /opt wget https://services.gradle.org/distributions/gradle-4.10.1-all.zip unzip gradle-4.10.1-all.zip mkdir gradle mv gradle-4.10.1 /opt/gradle/
環境變量
vim /etc/profile
export GRADLE_HOME=/opt/gradle/gradle-4.10.1 export PATH=${GRADLE_HOME}/bin:${PATH}
source /etc/profile
gradle -v
編譯andriod項目
mkdir /opt/code
下載代碼到這個文件
然后:gradle assembleDebug 然后發現一大堆問題。。。
第一沒有平台platforms;android-28
sdkmanager "platforms;android-28"
第二 沒有構建工具 build-tools;28.0.3
sdkmanager "platforms;android-28"
第三 some licences 這個是一些許可文件
還記得構建失敗的第三個原因嘛,缺少licenses許可。當你下載platforms的時候如果在這里敲了y,就會生成對應的許可,所以一般只要解決了前面兩個問題,第三個問題迎刃而解。但是如果有人不想下載,而是通過拷貝的方式將platforms復制到sdk目錄下,第三條的問題還會出現。這時候要運行一條命令
sdkmanager --licenses
等彈出要輸入y 或者n的時候一律敲y 然后回車。這樣就能生成所有的許可文件了。
填坑#1
還記得下載tools后要保持/opt/sdk/tools這樣的目錄結構,並且設定ANDROID_HOME要設定為/opt/sdk目錄這個坑嗎?
這是因為在執行sdkmanager工具的時候安裝的platforms,build-tools等組件和ANDROID_HOME無關,而是直接放在了tools的同一等級目錄,但是在用gradle構建的時候卻是要去ANDROID_HOME的路徑下面找,
如果ANDROID_HOME指定的是別的路徑,或者干脆就指向了tools目錄,那明明下載完了組件,但是gradle工具仍舊找不到需要的組件。如果要解決這個問題,還要手動去將組件移動到ANDROID_HOME目錄,這樣就比較麻煩了。
glibc升級
編譯的時候報錯:
aapt: /lib64/libc.so.6: version `GLIBC_2.14’ not found (required by aapt)
從上面報錯可以看出,程序運行時候,沒有找到“GLIBC_2.14”這個版本庫,而默認的Centos6.9 glibc版本最高為2.12, 所以需要更新系統glibc庫。
glibc是gnu發布的libc庫,即c運行庫,glibc是linux系統中最底層的api,幾乎其它任何運行庫都會依賴於glibc。glibc除了封裝linux操作系統所提供的系統服務外,它本身也提供了許多其它一些必要功能服務的實現。
很多linux的基本命令,比如cp, rm, ll,ln等,都得依賴於它,如果操作錯誤或者升級失敗會導致系統命令不能使用,嚴重的造成系統退出后無法重新進入,所以操作時候需要慎重。
解決辦法:
1.查看系統版本和glibc庫版本
# cat /etc/redhat-release CentOS release 6.9 (Final) # strings /lib64/libc.so.6 |grep GLIBC_ GLIBC_2.2.5 GLIBC_2.2.6 GLIBC_2.3 GLIBC_2.3.2 GLIBC_2.3.3 GLIBC_2.3.4 GLIBC_2.4 GLIBC_2.5 GLIBC_2.6 GLIBC_2.7 GLIBC_2.8 GLIBC_2.9 GLIBC_2.10 GLIBC_2.11 GLIBC_2.12 GLIBC_PRIVATE
由上面的信息可以看出系統是CentOS 6.9,最高支持glibc的版本為2.12,而研發程序要2.14版本,所以需要升級。
2.下載軟件並升級:
wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz wget http://ftp.gnu.org/gnu/glibc/glibc-ports-2.14.tar.gz tar -xvf glibc-2.14.tar.gz tar -xvf glibc-ports-2.14.tar.gz mv glibc-ports-2.14 glibc-2.14/ports mkdir glibc-2.14/build cd glibc-2.14/build ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin make make install
以上完成不報錯的話,查看庫文件,發現/lib64/libc.so.6軟鏈接指向了2.14版本
# ll /lib64/libc.so.6 /lib64/libc.so.6 -> /lib64/libc-2.14.so
3.再次查看glibc支持的版本:
# strings /lib64/libc.so.6 |grep GLIBC_ GLIBC_2.2.5 GLIBC_2.2.6 GLIBC_2.3 GLIBC_2.3.2 GLIBC_2.3.3 GLIBC_2.3.4 GLIBC_2.4 GLIBC_2.5 GLIBC_2.6 GLIBC_2.7 GLIBC_2.8 GLIBC_2.9 GLIBC_2.10 GLIBC_2.11 GLIBC_2.12 GLIBC_2.13 GLIBC_2.14 GLIBC_PRIVATE
可以看到glibc支持的版本已經到2.14,再次執行程序就不會報錯了。
gradle常用命令
gradle clean 清空編譯時出現的緩存
gradle assemble 編譯代碼,並生成debug版本和正式版本apk
gradle assembleDebug 編譯代碼,並生成debug版本apk
gradle assembleRelease 編譯代碼,並生成正式版本apk
編譯完成后的包在: app/build/outputs/apk/