Linux編譯安卓代碼的基本環境


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/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM