android开发使用jenkins编译,自动集成修改点/自动命名/自动备份,将修改的apk发布到测试服务器+发布网盘,而不需要用通讯工具传来传去。
jenkins用在互联网开发编译比较常见,如果android开发也想用,该怎么设计呢?
由于用jenkins开发android app的文章比较多,本文只提炼了干货。
在app端需要做哪些修改?
使用android studio开发,IDE会帮忙默认签名。
而用jenkins编译肯定要用到gradle编译,所以需要在build.gradle里面加入针对于jenkins编译需要做自行签名的代码。
android {
signingConfigs {
debug {
storeFile file('.\\as_key.jks')
storePassword '123456'
keyPassword '123456'
keyAlias 'key0'
}
release {
storeFile file('.\\as_key.jks')
storePassword '123456'
keyPassword '123456'
keyAlias 'key0'
}
}
}
local.properties中的sdk.dir需要改为jenkins可以用到sdk
Android SDK+JDK的配置
包括gradle版本也是头疼的事情,建议google官方出一个集成常用jdk+常用android sdk+特定gradle版本的docker,但是镜像的体积估计不会小,几个G应该有。
以下是我个人启动docker通过映射启动的方式:
docker run --network host --rm -p 8080:8080 -p 50000:50000
-v /home/ldeng/code/Docker/home/jenkins_home/:/var/jenkins_home
-v /etc/localtime:/etc/localtime
-v /home/ldeng/code/Android/Sdk:/var/jenkins_home/workspace/AndroidSDK
-v /usr/lib/jvm/java-11-openjdk-amd64/:/var/jenkins_home/workspace/jdk11/
-v /usr/lib/jvm/java-8-openjdk-amd64/:/var/jenkins_home/workspace/jdk8/
-v /home/ldeng/.gradle/:/var/jenkins_home/.gradle
--name lucasd-jenkins jenkins/jenkins:latest
如何编译? 废话,用gradle。
先配置gradle
但是这种配置方式,必须要和app默认支持的gradle版本保持一直,必须也是6.5的版本
使用gradle编译
app:clean
app:assembleDebug
如果不想gradle版本被限制死了就需要用gradlew的方式编译,
它会自动解析当前项目支持哪个版本的gradle。
但是需要映射gradle下载的缓存路径:
-v /home/ldeng/.gradle/:/var/jenkins_home/.gradle
这个很重要!
不然每次下载都要下载一次gradle 6.5, 这个时间是比较长的,所以建议映射到本地gradle路径。
脚本代码:
pwd
ls
export ANDROID_HOME=/var/jenkins_home/workspace/AndroidSDK
export ANDROID_SDK_ROOT=/var/jenkins_home/workspace/AndroidSDK
export ANDROID_SDK_ROOT=/var/jenkins_home/workspace/jdk8
export GRADLE_HOME=/var/jenkins_home/.gradle/wrapper/dists/gradle-6.5-bin/6nifqtx7604sqp1q6g8wikw7p/gradle-6.5
export GRADLE_USER_HOME=/var/jenkins_home/.gradle
echo $ANDROID_HOME
echo $ANDROID_SDK_ROOT
echo $JAVA_HOME
echo $GRADLE_HOME
#ls /var/jenkins_home/workspace/AndroidSDK
/usr/bin/env bash gradlew clean
/usr/bin/env bash gradlew assembleDebug
发送apk/jar/arr等工件到测试服务器,
用到了Publish artifacts over SSH