項(xiàng)目中經(jīng)常會(huì)進(jìn)行打包分發(fā), 但是常規(guī)的打包過程不免會(huì)非常的乏味無聊, 重復(fù)性的勞動(dòng), 實(shí)在沒啥意思, 今天就來介紹fastlane工具進(jìn)行android自動(dòng)打包, 上傳蒲公英(也可以firim)并進(jìn)行釘釘群組通知相關(guān)人員。
羅源網(wǎng)站建設(shè)公司成都創(chuàng)新互聯(lián),羅源網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為羅源千余家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢,請找那個(gè)售后服務(wù)好的羅源做網(wǎng)站的公司定做!
Fastlane是一整套的客戶端CICD工具集合。Fastlane可以非??焖俸唵蔚拇罱ㄒ粋€(gè)自動(dòng)化發(fā)布服務(wù),并且支持Android,iOS,MacOS。
Fastlane命令執(zhí)行的底層并不是自己實(shí)現(xiàn)的,而是調(diào)用其他的插件或者工具執(zhí)行的。比如說打包,F(xiàn)astlane中的gym工具只是xcodebuild工具的一個(gè)封裝,調(diào)用的其實(shí)還是xcodebuild中的打包命令。
Fastlane本身沒有一套特殊語法,使用的Ruby語言。
Fastlane的插件工具叫做action,每一個(gè)action都對應(yīng)一個(gè)具體的功能。
1、蘋果系統(tǒng)自帶有ruby
2、安裝今天的主角fastlane
通過修改用戶讀寫權(quán)限可以解決
3、安裝蒲公英的 Fastlane 插件
如果遇到這種情況:Could not find action, lane or variable 'pgyer'.
可能是你安裝pgyer插件的時(shí)候,不是在項(xiàng)目fastlane文件夾下安裝的,重新安裝一下就可以解決上面的錯(cuò)誤。
4、安裝獲取應(yīng)用版本的 Fastlane 插件
如果出現(xiàn)類似pgyer的錯(cuò)誤,同理在項(xiàng)目fastlane文件夾下重新安裝就可以避免找不到插件的命令錯(cuò)誤。
在使用 Fastlane 之前,我們首先需要在項(xiàng)目中初始化 Fastlane。首先進(jìn)入 App 的開發(fā)目錄,執(zhí)行以下命令來初始化 Fastlane:
激動(dòng)人心的時(shí)刻終于來了,開始打包。
1、Monkey是Android SDK自帶的測試工具,在測試過程中會(huì)向系統(tǒng)發(fā)送偽隨機(jī)的用戶事件流,如按鍵輸入、觸摸屏輸入、手勢輸入等),實(shí)現(xiàn)對正在開發(fā)的應(yīng)用程序進(jìn)行壓力測試,也有日志輸出。實(shí)際上該工具只能做程序做一些壓力測試,由于測試事件和數(shù)據(jù)都是隨機(jī)的,不能自定義,所以有很大的局限性。
2、MonkeyRunner也是Android SDK提供的測試工具。嚴(yán)格意義上來說MonkeyRunner其實(shí)是一個(gè)Api工具包,比Monkey強(qiáng)大,可以編寫測試腳本來自定義數(shù)據(jù)、事件。缺點(diǎn)是腳本用Python來寫,對測試人員來說要求較高,有比較大的學(xué)習(xí)成本。
3、Instrumentation是早期Google提供的Android自動(dòng)化測試工具類,雖然在那時(shí)候JUnit也可以對Android進(jìn)行測試,但是Instrumentation允許你對應(yīng)用程序做更為復(fù)雜的測試,甚至是框架層面的。通過Instrumentation你可以模擬按鍵按下、抬起、屏幕點(diǎn)擊、滾動(dòng)等事件。Instrumentation是通過將主程序和測試程序運(yùn)行在同一個(gè)進(jìn)程來實(shí)現(xiàn)這些功能,你可以把Instrumentation看成一個(gè)類似Activity或者Service并且不帶界面的組件,在程序運(yùn)行期間監(jiān)控你的主程序。缺點(diǎn)是對測試人員來說編寫代碼能力要求較高,需要對Android相關(guān)知識有一定了解,還需要配置AndroidManifest.xml文件,不能跨多個(gè)App。
4、UiAutomator也是Android提
該腳本是我在獨(dú)立開發(fā)過程中,為了提升 Android 應(yīng)用打包和運(yùn)營的效率而開發(fā)的腳本。項(xiàng)目地址是,
如項(xiàng)目中的語言構(gòu)成展示的,該腳本完全使用 Python 語言開發(fā)完成。
使用起來非常簡單,首先你要準(zhǔn)備如下的環(huán)境,
然后,通過編輯配置文件 config.yml 對腳本進(jìn)行配置。比如,
YAML 格式也不算新穎,早在幾年之前的 SpringBoot 里面就已經(jīng)采用了這種格式。相比于使用 json 或者 properties 等格式的配置文件,它更加簡潔。
1、使用 gradle 指令自動(dòng)打包,區(qū)分 32 位和 64 位 :因?yàn)楝F(xiàn)在有些應(yīng)用市場明確要求區(qū)分 32 位和 64 位,所以,打包的時(shí)候要分開進(jìn)行打包。
2、打包完成之后將 APK 拷貝到指定的目錄 :主要用來做本地的 APK 文件備份,后面也會(huì)用這里拷貝的 APK 文件進(jìn)行自動(dòng)化加固。
3、使用 diffuse 輸出相對于上一個(gè)版本的 APK 版本差異報(bào)告 :diffuse 是 JakeWharton 開發(fā)的 APK, AAB, AAR 和 JAR 的對比工具。這里我用它對比當(dāng)前版本和上一個(gè)版本的 APK 的信息,以實(shí)現(xiàn)對 APK 質(zhì)量的監(jiān)控。diffuse 項(xiàng)目的地址是
3、拷貝多語言資源到指定的目錄,并自動(dòng)提交到 Github 倉庫以便于協(xié)助翻譯 :對做國際化的應(yīng)用的開發(fā)者而言,我們可以通過應(yīng)用內(nèi)的協(xié)助翻譯功能借助社區(qū)的力量實(shí)現(xiàn)應(yīng)用的多語言。這里我盡量將這個(gè)過程做得更加自動(dòng)化。即在應(yīng)用打包完成之后將應(yīng)用內(nèi)的多語言資源按照版本信息拷貝到指定的目錄下。然后使用 Git 工具將其推送到 Github 等。具體的效果可以參考 .
4、自動(dòng)打 tag 并提交到遠(yuǎn)程倉庫 :該功能用來在打包完成之后使用為當(dāng)前版本添加 Git tag,以便于后續(xù)根據(jù)版本回滾到指定的 Git 提交記錄。
5、根據(jù) Git 提交記錄自動(dòng)生成更新日志 :上面做了為項(xiàng)目自動(dòng)添加 Git tag 的功能之后,我們可以根據(jù)當(dāng)前版本到上一版本之間的 Git 提交記錄的 comment 信息自動(dòng)生成版本更新日志。雖然,這個(gè)這樣生成的更新日志并不能直接用作發(fā)布時(shí)的更新記錄,但在至少可以讓我們直觀得看到這個(gè)版本修改了什么。
6、使用 360 加固 對上述 APK 進(jìn)行加固并輸出到指定的目錄 :加固操作其實(shí)非常簡單,只需要一個(gè) command 指令就可以完成了,
不過在使用上述命令之前需要先通過 GUI 的形式修改你在 360 加固中的渠道和簽名信息(直接手動(dòng)改文件也可以)。
7、上傳打包 APK 到藍(lán)奏云 :藍(lán)奏云是現(xiàn)在很多開發(fā)者用來分享軟件的一個(gè)云存儲(chǔ)平臺,100M 以下的文件可以免費(fèi)存儲(chǔ),類似于百度云。上傳藍(lán)奏云之前需要先修改配置文件,
這里需要填入的 ylogin 和 phpdisk_info 可以在登錄之后通過 Chrome 的開發(fā)工具查看 cookie 信息得到。目前能夠做到自動(dòng)化的一個(gè)方案就是使用上述兩個(gè)信息。
8、通過 Telegram bot 將打包完成的渠道包和更新日志信息發(fā)送到 Telegram 群組 :對海外的用戶我們可以通過 Telegram 作為一個(gè)交流的渠道。Telegram 是一個(gè)非常好用的聊天軟件。它提供了 bot 功能,即一個(gè)可以推送消息的機(jī)器人。我們可以通過這個(gè)功能來在群組中推送消息、圖片和文件。Telegram 的 bot 有非常強(qiáng)大的自定義性。其實(shí)我們完全可以基于爬蟲和 bot 維護(hù)一個(gè)社區(qū),然后通過在社區(qū)內(nèi)推送廣告來獲得一些利益。這也不失為一個(gè)賺錢的渠道。使用 Telegram bot 之前需要在配置文件中填入如下信息,
這里的 token 是注冊 bot 的時(shí)候得到的信息。chat_id 可以通過如下方式獲取到:
即將 token 信息填入到上述 YourBOTToken 處。在返回的 json 結(jié)果中可以獲取到 chat id 信息。
向群組推送信息的方式非常簡單,一個(gè) http 請求即可完成,
更多的協(xié)議可以參考這個(gè)文檔:
9、完成上述操作之后使用郵件通知打包結(jié)果 :最后就是在完成了最終的打包操作之后通過 Email 發(fā)送一封郵件,內(nèi)部包含了本次打包的 diff 信息等給指定的用戶。使用郵件功能需要在配置文件中填寫,
這里我們使用的是 QQ 郵箱來發(fā)送郵件。這里需要填寫的 user 和 password 字段分別是郵箱和開通 smtp 服務(wù)時(shí)系統(tǒng)提供的密碼信息。QQ 郵箱開通 SMTP 服務(wù)器其 官方文檔 即可。
上述是該打包腳本的主要功能。后續(xù)我會(huì)添加更多功能。因?yàn)闀r(shí)間有限,有些功能需要修改一下才能使用。不過,許多功能我都封裝成了獨(dú)立的 Python 腳本,如果需要的話可以自己做細(xì)微的修改。對于這個(gè)腳本,如果你有更好的建議和想法,可以跟我交流~
1、確定jdk安裝完畢,且檢查環(huán)境變量
2、確定android SDK安裝完畢,且檢查環(huán)境變量
3、確定你的appium和nodejs均安裝完畢,且環(huán)境變量設(shè)置完畢,可以通過cmd命令行:appium-doctor中確定
4、真機(jī)開啟了usb調(diào)試模式,通過命令行執(zhí)行:appium -a 127.0.0.1 -p 4723 -U N2F4C15A30001571 --no-reset ,其中-u后面的部分是手機(jī)的devices。來建立手機(jī)端和appium服務(wù)器的連接
5、在初始化程序設(shè)置一些運(yùn)行時(shí)的狀態(tài),如appium版本,手機(jī)版本,型號,系統(tǒng)類型。設(shè)置待測試的app packagename和activityname
6、test類中寫入操作,進(jìn)行自動(dòng)化測試
啟動(dòng)Jenkins
1、 安裝jdk
從略,建議1.6或以上版本,配置好環(huán)境變量。
2、 安裝tomcat
從略,安裝完調(diào)試下tomcat是否正常。
3、 安裝ant
下載zip包,解壓后配置好環(huán)境變量。
4、 安裝jenkins
下載war包,命名為Jenkins,拷貝到tomcat/webapps目錄下。
5、 安裝Android SDK
下載安裝,完成后配置好Android_SDK_HOME環(huán)境變量。此步驟主要用于進(jìn)行android自動(dòng)化測試,若不進(jìn)行此項(xiàng)可略過。
安裝完成后啟動(dòng)tomcat/bin/startup.bat文件(linux下是startup.sh),在瀏覽器輸入,8080為tomcat端口,即可訪問jenkins服務(wù)器。
配置Jenkins
1、 JDK配置
新增JDK,指定JDK名字和JAVA_HOME
2、 ANT配置
新增ANT,指定ANT名字和ANT_HOME
3、 Maven配置
從略,本文未使用到Maven,具體配置方法參考Google。
4、 Subversion
選擇1.6版本SVN,勾選Update default Subversion credentials cache after successful authentication
5、 郵件通知
填寫SMTP server、Default user E-mail suffix、System Admin E-mail Address、Jenkins URL、勾選Use SMTP Authentication,填寫User Name、Password、Use SSL、SMTP port、Chareset(UTF-8) 、Default Content Type(默認(rèn))、Default Recipients(默認(rèn)收件人),配置完成后可進(jìn)行測試郵件。
6、 Jenkins URL
配置該URL,用于別人訪問。
插件管理
1、 Hudson Subversion Plug-in,jenkins的svn插件。
2、 Android Emulator Plugin,android模擬器插件。
3、 JUnit Attachments Plugin,junit測試報(bào)告附件插件。
4、 Email-ext plugin,郵件擴(kuò)展插件。此處說明下,默認(rèn)Jenkins只會(huì)發(fā)送構(gòu)建失敗的郵件,我們需安裝此插件才能自定義不同場景。
5、 Deploy to container Plugin遠(yuǎn)程發(fā)布插件。
自動(dòng)化測試
打包源工程
Android程序
本小節(jié)講訴如何打包一個(gè)Android工程,當(dāng)前使用的是ant進(jìn)行編譯源碼。
1、 首先構(gòu)建一個(gè)自由風(fēng)格的Job。
2、 添加源碼路徑,選擇所使用的版本控制器,輸入源碼路徑。
3、 構(gòu)建觸發(fā)器可根據(jù)需要選擇是否定時(shí)構(gòu)建。
4、 構(gòu)建環(huán)境,此處Jenkins安裝了Android Emulator Plugin插件,可以啟動(dòng)已有模擬器或添加新的模擬器,本文案例中使用真機(jī)調(diào)試。
5、 構(gòu)建,卸載手機(jī)中原程序 adb –s uninstall com.XXXXXX
6、 生成bulid.xml文件,-p后面跟工程所在的本地jenkins下路徑
android update project -n *** c:\被測工程Job路徑\workspace
7、 Ant進(jìn)行編譯程序,并安裝到當(dāng)前手機(jī)中
ant debug install -f c:\被測工程Job路徑\workspace\build.xml
8、 構(gòu)建后操作,本案例中構(gòu)建完成后自動(dòng)啟動(dòng)構(gòu)建下一個(gè)測試Job
Bulid other projects,選擇測試工程的Job.
打包測試工程
Android程序
本小節(jié)講訴如何構(gòu)建一個(gè)Android測試工程,包括郵件發(fā)送和測試報(bào)告展示。
1、 構(gòu)建步驟1-7和Android程序章節(jié)一樣,從略。
2、 本文案例中測試程序是通過命令行啟動(dòng)運(yùn)行的,所以在此處增加一個(gè)批處理運(yùn)行。P.S. adb shell am instrument -w -e class com.megafon.test.MegafonTest#testDeleteContact com.megafon.test/android.test.InstrumentationTestRunner ,此處是通過批處理來單獨(dú)運(yùn)行一個(gè)個(gè)的測試用例。避免了Junit3的無序執(zhí)行的問題。
3、 刪除Workspace中原來存在的測試報(bào)告文件,一般不刪除也會(huì)覆蓋。
如何讓測試程序生成xml格式的測試報(bào)告,其他文章會(huì)重點(diǎn)介紹。
4、 從手機(jī)中拷貝測試報(bào)告,最終測試是在手機(jī)上運(yùn)行,所以報(bào)告也生成在手機(jī)中,使用adb pull命令把測試報(bào)告全部拷貝到workspace下制定目錄。
5、 構(gòu)建后操作,發(fā)布測試報(bào)告,如果報(bào)告中包含附件,此處使用到JUnit Attachments Plugin插件。
6、 郵件通知,此處使用到Email-ext plugin插件,前面的默認(rèn),直接使用我們在系統(tǒng)管理里面設(shè)置的默認(rèn)值。
7、 點(diǎn)擊右下角高級按鈕,可選擇不同場景下發(fā)送郵件。
8、 測試結(jié)果展示,在本次構(gòu)建的控制臺可以顯示當(dāng)前所有的構(gòu)建日志。
9、測試報(bào)告點(diǎn)擊Test Result可以顯示所有測試記錄。