使用Jenkins自动打包android
服务器是Centos系统,使用Jenkins部署android项目时遇到一些坑,特此记录一下。
环境准备
Jenkins的安装在这就不多说了,百度文档挺多的。
android环境准备
建议服务器建个 android 目录来存放相关的文件。
首先拷贝一份本地开发环境的 android sdk 到服务器中,其中的 build-tools 和 platform-tools 文件夹中的文件是跟平台有关,需要另外单独去镜像网站上下载,Jenkins 打包只需要单独下载对应的 build-tools 。
去 东软信息学院的开源镜像网站 下载对应的 build-tools 文件,我项目中使用的是 25.0.2 版本,选择 build-tools_r25.0.2-linux.zip 下载,下载完成后解压出来的文件放到android sdk 中的 build-tools 文件夹中(注意文件夹名字改为 25.0.2)。
Jenkins 内置的 gradle 和 android 使用的 gradle 可能有不匹配的情况,建议直接拷贝一份本地开发环境到服务器。
Jenkins环境准备
点击系统管理 -> 系统设置 -> 找到全局属性那一栏,点击增加,键名 ANDROID_HOME 值为 sdk 在服务器的绝对路径
在系统管理页面点击 Global Tool Configuration,找到 Gradle 安装,
新增一个 Gradle ,name 为 android_gradle,GRADLE_HOME 为 gradle 在服务器的绝对路径。
环境已准备完毕,接下来就是配置 Jenkins 任务了。
Jenkins 配置任务
在 Jenkins 首页点击新建,填写任务名称,选择构建一个自由风格的软件项目,点击 OK。
新建任务
进去点击源码管理,Repository URL 填写 git 地址,Credentials 选择 git 账号(没有就点击 Add 添加一个),Branch Specifier 填写需要编译的分支(例如:*/master )。
源码管理再点击构建,增加构建步骤,选择 Invoke Gradle script ,点击 Invoke Gradle 选择 Gradle Version 为 android_gradle ,然后 Tasks 填写 assembleDebug (该 task 是平时 android studio 点击 build 时执行的 task,打出的 Debug 包),注意将 Force GRADLE_USER_HOME to use workspace 勾选上。
Invoke Gradle script 构建点击保存就可以运行任务了。
下载 apk
正常打包后都会在 app/build/outputs/apk/
目录下看到生成的 debug apk,但总不能每次都 cd 进去找吧。针对这个问题,我通过 Nginx 的文件目录浏览功能做了下载页面。Nginx 的安装问题文中就不再诉说了,直接说怎么做下载页面吧。
在上面选择 Invoke Gradle script 后再增加一个构建步骤,选择 Execute shell 。预先在服务器中创建了存放 apk 的目录(例如
/root/android/apk
)
shell 命令
cd /root/android/apk
#按打包完成的时间生成文件夹 如17_07_14_12_00_00_debug
dirName=`date +%y_%m_%d_%H_%M_%S`_debug
mkdir $dirName
cd $dirName
#apk生成的路径
cp /root/.jenkins/workspace/android_build/app/build/outputs/apk/debug.apk debug.apk
shell 命令写后可以运行任务,看看是否在 /root/android/apk
下生成对应的文件夹和文件。
接下来就要修改 Nginx 的配置了,找到 nginx.conf
,进入vim。
location /download {
autoindex on;
autoindex_exact_size on;
autoindex_localtime on;
alias /root/android/apk;
}
添加以上内容,然后 Nginx 重启下,就可以在服务器 /download
(例如:我服务器地址为 http://192.168.0.100/download
)下能看到生成 apk 文件夹及文件,点击文件就可以下载。
遇到的坑
在打包过程中 aapt 运行提示 libc.so.6: version `GLIBC_2.14' not found,原因是系统的 glibc 版本太低,软件编译时使用了较高版本的glibc 引起的,没法只能去 google 了。在一国外网站找到了解决方法
You cannot update glibc on Centos 6 safely. However you can install 2.14 alongside 2.12 easily, then use it to compile projects etc.
大意是说不能直接在服务器上升级 glibc ,需自己去下载重新编译。以下给出 shell 命令
mkdir ~/glibc_install
cd ~/glibc_install
wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz
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
经过漫长的编译后,再次运行任务后编译成功。