蒲公英文档中心
这篇文章将会给大家介绍如何在 android 项目上使用 travis ci ,并发布签名 apk 到蒲公英。
是目前比较流行的持续集成工具之一,用来构建及测试在 github 托管的代码,使用它可以极大的简化工作流程。 产品分为:
注:本文中介绍的demo是基于(travis-ci.org)
需要在本地安装 travis ci 命令工具。
确保本地系统配置 ruby 1.9 以上版本:
ruby -v
安装travis-ci (如果使用 mac os 最好先更新 ruby 到最新版本,然后再安装)
gem install travis --no-rdoc --no-ri
验证 travis 是否安装成功 (有版本输出则说明安装成功)
travis -v
1.8.8
通过github账号登录travis平台。travis会自动同步github账号上所有的开源项目。通过列表选择需要启动的项目。
.travis.yml
文件。这个文件用于说明 travis-ci 需要处理的构建。 travis-ci 本身提供基本的构建和支持语言,同时开发者可以通过.travis.yml
文件设置自己的构建操作,同时需要遵从 travis-ci 自己规定的构建生命周期。
在完成 .travis.yml
定义后, 可以通过 travis lint [path to your .travis.yml]
命令验证这个文件语法是否正确性。如果正确会出现以下的提示:
配置 android 工程基本模板,在 .travis.yml
中定义以下内容:
language: android #语言说明
jdk: oraclejdk8 #jdk版本
sudo: required #权限要求
env: #环境变量
global:
- android_api=26
- emulator_api=21
- android_build_tools=26.0.2
- adb_install_timeout=5 # minutes
android: #android 环境要求
components:
- tools
- platform-tools
- build-tools-$android_build_tools
- android-$android_api
- android-$emulator_api
- extra-google-m2repository
- extra-android-m2repository # 配置design 库
- addon-google_apis-google-19 # 配置google play services
- sys-img-armeabi-v7a-android-$android_api
- sys-img-armeabi-v7a-android-$emulator_api
licenses: #内容许可添加
- android-sdk-preview-license-.
- android-sdk-license-.
- google-gdk-license-.
注:这里的 android 版本需要和你项目中的版本一致。如果在构建过程需要用到不同的 adnroid版本
或者 build-tool
版本,则都需要再此声明,否则 ci 会出现类似以下的错误:
可以设置缓存机制,这样可以保证规定的缓存文件不需要每次下载,提高每次构建的速度(可选); 但是如果在更好环境的基础配置的情况(比如更新gradle 版本等,建议先清除缓存再跑ci)
before_cache:
- rm -f $home/.gradle/caches/modules-2/modules-2.lock
- rm -fr $home/.gradle/caches/*/plugin-resolution/
cache: #指定缓存目录
directories:
- $home/.gradle/caches/
- $home/.gradle/wrapper/
可以手动删除 travis ci cache ,如下图:
启动模拟器(可选,只有在需要跑测试用到模拟器才添加)
注:这里规定的模拟器 android 版本需要在 .travis.yml
android
部分声明到相关的版本,否则在启动模拟器时会出现错误,停止构建。整个travis-ci 的状态为 errored
。
before_script:
- echo no | android create avd --force -n test -t android-$emulator_api --abi armeabi-v7a
- emulator -avd test -no-skin -no-audio -no-window &
- android-wait-for-emulator
如果模拟器的 andorid 版本未添加会报以下错误:
运行脚本
script:
- ./gradlew clean build connectedcheck -pdisablepredex --stacktrace"
script:
- ./gradlew assemblerelease
创建apk签名文件(android studio -> build -> generate singed apk -> create new)
生成一个.jks
文件
先使用 github 账户登录 travis 命令
travis login # 根据提示依次输入项目所属 github 的账户和密码
使用travis 命令对签名文件加密。(这个加密后的文件需要放在项目的根目录一同上传到仓库)
travis encrypt-file [文件名].jks
会生成一个加密以后的文件 *.jks.enc
按照脚本提示将图中的命令添加到before_install
生命周期下:
before_install:
- openssl aes-256-cbc -k $encrypted_df44b3ae1834_key -iv $encrypted_df44b3ae1834_iv -in demo.jks.enc -out demo.jks -d
使用travis 命令对签名文件中的参数加密。
travis encrypt storepass=your_store_password --add env.global
travis encrypt keypass=your_key_password --add env.global
命令生效以后会在.travis.yml
中 env: global:
中生成以下部分
注:同一个签名文件和秘钥,如果更改了 github 所属人的地址,需要通过命令退出,再使用新的 github 账户登录,重新生成所有的加密部分。
travis logout
travis login
配置travis-ci 打包流程
after_success:
- cp $travis_build_dir/demo.jks $home
- cd app/build/outputs/apk/
- jarsigner -verbose -sigalg sha1withrsa -digestalg sha1 -keystore $home/demo.jks -storepass $storepass -keypass $keypass app-release-unsigned.apk demo #[ demo 是签名文件的key alias]
- jarsigner -verify app-release-unsigned.apk # 验证未签名的 apk
- "${android_home}/build-tools/24.0.2/zipalign -v 4 app-release-unsigned.apk yourapp.apk" # apk优化并重命名
在before_install
添加蒲公英上传脚本:
before_install:
- cd $travis_build_dir
- wget -c https://raw.githubusercontent.com/pgyer/travisfile/master/pgyer_upload.sh
-o pgyer_upload.sh
- chmod x pgyer_upload.sh
在after_script
添加上传步骤:
after_script:
- set -e
- $travis_build_dir/pgyer_upload.sh "${travis_build_dir}/app/build/outputs/apk/release/" <蒲公英 api_key>
蒲公英的 api_key 可以通过这里查看 本篇分享的 demo 已经上传github,欢迎大家浏览,地址是:https://github.com/pgyer/travisuploadandroiddemo 。
本文内容是 android 项目使用 travis ci简单的教程 。上传蒲公英的部分,单独使用脚本上传签名好的 apk 是由于在参数错误等的情况下,单纯使用 curl
命令会使 travis ci 认为构建是正确,整个构建返回结果是 passed
,实际上并没有完成上传蒲公英的步骤。而在脚本中我们处理了比较常见的情况,并且根据不同结果做出不同的命令结果,这样就能使travis ci 完整有效的返回整个集成的状态。
希望本文对各位有所帮助,同时欢迎指正。