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/