Pgyer internal test distribution service is a leading mobile application internal test distribution platform in China, dedicated to providing easy-to-use App internal test distribution services for mobile developers and test users.
Pgyer Developer Service Platform is committed to providing excellent upstream and downstream services for developers, addressing the various needs of developers throughout the developer life cycle.
Scan QR code to follow
Pgyer WeChat Official Account
Get the latest news, official benefits, promotions and other information
Pgyer document center
這篇文章將會給大家介紹如何在 Android 項目上使用 Travis CI ,并發布簽名 apk 到蒲公英。
Travis CI 是目前比較流行的持續集成工具之一,用來構建及測試在 Github 托管的代碼,使用它可以極大的簡化工作流程。Travis CI 產品分為:
注:本文中介紹的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/<apk名稱>" <蒲公英 API_KEY>
蒲公英的 API_KEY 可以通過這里查看 本篇分享的 Demo 已經上傳Github,歡迎大家瀏覽,地址是:https://github.com/Pgyer/TravisUploadAndroidDemo 。
本文內容是 Android 項目使用 Travis CI簡單的教程 。上傳蒲公英的部分,單獨使用腳本上傳簽名好的 apk 是由于在參數錯誤等的情況下,單純使用 curl
命令會使 Travis CI 認為構建是正確,整個構建返回結果是 passed
,實際上并沒有完成上傳蒲公英的步驟。而在腳本中我們處理了比較常見的情況,并且根據不同結果做出不同的命令結果,這樣就能使Travis CI 完整有效的返回整個集成的狀態。
希望本文對各位有所幫助,同時歡迎指正。
About Us
Product Services
Help
Your account information is under review and can not be used temporarily; you can:
Check out the help documentation for common ways to work on the Pgyer's platform;
Check Pgyer's App Auditing , which must be viewed before uploading.
Currently, the real-name authentication has not been completed, and the number of downloads for each version is limited to 5 times/day, After real-name authentication, it can be extended to 500 times/day
TestFlight is only available to Professional users.(Click understand pgyer's price plan)
支付成功
Pgyer VIP User Group
(Please open WeChat - Sweep and join the group chat)