作為小公司小項目的Android菜鳥,我也想在項目中集成熱修復(fù)柬祠,公司沒有測試北戏,都是自己測試的,有時候發(fā)新版后會出現(xiàn)一些小bug漫蛔,錯別字之類的還好嗜愈,有時候因為一些bug直接導(dǎo)致APP閃退,甚至會導(dǎo)致公司經(jīng)濟利益的損失莽龟,是大家都不愿意看得到的蠕嫁。
所以我就開始嘗試熱修復(fù),首選Tinker毯盈。相信騰訊剃毒,相信微信的實力。
對著官方文檔一通Ctrl c,Ctrl v搂赋。將官方Demo代碼全部copy到項目中赘阀。
遇到的問題:
1.程序啟動時會加載默認的Application類,這導(dǎo)致我們補丁包是無法對它做修改了厂镇。需要自定義Application類纤壁。
2.多Flavor打包,配置了productFlavors后生成差異包時出現(xiàn)問題捺信,如果只是多渠道的需求酌媒,建議不要使用flavor的方式。首先其打包很慢迄靠,其次需要維護多個基線包秒咨,后期維護成本也很大。Tinker官方推薦packer-ng-plugin或者walle來進行多渠道打包掌挚,其中walle是支持最新的SchemaV2簽名的雨席。
3.后來覺得還要自己做管理后臺,處理很多問題吠式,沒這時間和精力陡厘。就使用tinkerpatch。
TinkerPatch:
后臺補丁平臺的支持一鍵傻瓜式接入
不需要自己去改造Application特占,不需要去參與補丁的后臺管理糙置。
walle:
美團開源的Android Signature V2 Scheme簽名下的新一代渠道包打包神器
用法示例:
生成渠道包./gradlew clean assembleReleaseChannels
支持 productFlavors./gradlew clean assembleMeituanReleaseChannels
1.需要注意channel文件不帶.txt后綴。
2.360加固失效是目?在使用加固后導(dǎo)致Stringchannel=WalleChannelReader.getChannel(this.getApplicationContext());無法獲取到渠道信息谤饭。解決辦法是:先加固沒簽名的包,然后用buildtool中的apksigner簽名然后用walle注入渠道。
3.ProtectedApkResignerForWalle:[Walle官方推薦]一步解決應(yīng)用加固導(dǎo)致Walle渠道信息失效的自動化腳本工具揉抵,自動生成渠道包亡容。
ProtectedApkResignerForWalle:
一步解決應(yīng)用加固導(dǎo)致Walle渠道信息失效的自動化腳本,自動生成渠道包
按照config.py文件中的注釋改成自己項目配置
將已經(jīng)加固好的包【未簽名的包冤今,請不要使用加固客戶端簽名工具】放到腳本工具根目錄下闺兢,即app-release.encrypted.apk
各種渠道的定義是在channel這個文件中,請根據(jù)項目情況修改
運行命令python ApkResigner.py,即可自動生成所有渠道包辟汰。
最后我的熱修復(fù)算是做完了列敲,輕描淡寫,記錄自己的熱修復(fù)路程帖汞,全是第三方開源工具解決。
開源萬歲凑术。翩蘸。。