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/

 

posted @ 2019-06-24 16:12  load晴天  阅读(2887)  评论(0编辑  收藏  举报