Bugly出熱更新SDK了?
沒錯,Bugly也出熱更新SDK啦,2016.11.25號,我們Bugly也上線了Android版的熱更新SDK,大家都知道這一年來熱更新被無數次提起,各大廠自主研發的熱更新方案層出不窮,下面就列舉一些大家比較熟悉的一些熱更新方案:
微信開源:Tinker
大衆點評:Nuwa
阿里巴巴:Dexposed
阿里巴巴:AndFix
美團:Robust
各個方案的優劣性筆者就不在這裏做過多討論了,總的一句話沒有最好的,只有最適合自己的。
我們Bugly也是出於高可用性的考慮,Tinker支持動態下發代碼、So庫以及資源,所以我們最終選擇了Tinker方案作爲我們SDK的一項能力。
這裏有一點需要說明的,Android版的熱更新SDK是包含在升級SDK裏面的,所以如果你想使用我們提供的熱更新能力需要下載對應版本的升級SDK,目前我們在1.2.0版本纔開始支持熱更新:
注意:升級SDK自1.2.0起將不再支持以jar包形式集成,我們建議您使用Android studio並且以gradle方式集成。
爲什麼集成我們Bugly熱更新SDK?
熱更新能力是Bugly爲解決開發者緊急修復線上Bug,而無需重新發版讓用戶無感知就能把問題修復的一項能力。Bugly目前採用微信Tinker的開源方案,開發者只需要集成我們提供的SDK就可以實現自動下載補丁包、合成、並且應用補丁的功能,我們也提供了熱更新管理後臺讓開發者對每個版本的補丁進行管理。
集成我們SDK的好處是顯而易見的:
- 無需關注Tinker是如何合成補丁的
- 無需自己搭建補丁管理後臺
- 無需考慮後臺下發補丁策略的任何事情
- 無需考慮補丁下載合成的時機,處理後臺下發的策略
- 我們提供了更加方便集成Tinker的方式
- 我們提供應用升級一站式解決方案
如何集成Bugly熱更新SDK?
看文檔、看文檔、看文檔。重要的事情說三遍。
Android熱更新接入指南
相信接入過Tinker的同學會發現使用Tinker還是有一定門檻的,小白用戶第一次使用可能會懵圈,我們Bugly也希望能讓第一次接入的同學能順利使用上熱更新,所以建議大家嚴格按照我們文檔的流程來接入,如果遇到任何使用SDK的問題可以及時跟我們反饋(交流羣號:130979883),但如果是Tinker插件的使用問題也是建議您認真查看Tinker Wiki。
簡單概要說一下整個接入流程:
1. 配置插件依賴(這裏包含tinker插件和tinker-support插件的依賴)
2. apply插件(這裏可以只配置apply plugin: 'com.tencent.bugly.tinker-support'
)
3. 集成SDK
- 集成遠程SDK倉庫
- 重新自定義Application、ApplicationLike
- AndroidManifest配置
- 混淆配置
- 測試驗證
- 打基準包安裝並上報聯網(注:填寫唯一的tinkerId)
- 對基準包的bug修復(可以是Java代碼變更,資源的變更)
- 修改基準包路徑、填寫補丁包tinkerId、mapping文件路徑、resId文件路徑
- 執行tinkerPatchRelease打Release版本補丁包
- 選擇app/build/outputs/patch目錄下的補丁包並上傳(注:不要選擇tinkerPatch目錄下的補丁包,不然上傳會有問題)
- 編輯下發補丁規則,點擊立即下發
- 重啓基準包,請求補丁策略(SDK會自動下載補丁併合成)
- 再次重啓基準包,檢驗補丁應用結果
以上是應用補丁的流程,有同學可能會問,如果我想撤回怎麼辦?這裏先解釋下我們補丁的幾種狀態:
- 下發中
- 生效中、下發停止
- 撤回中
下發中:表示你上傳一個補丁後,點擊立即下發之後的狀態,表示後臺正在下發補丁策略,補丁包對應的基線版本是可以收到對應的策略的。
生效中、下發停止:表示你已經下發過這個補丁,但因爲你上傳了新補丁,這個補丁下發會被停止,要注意一個目標版本只運行下發一個補丁。
撤回中:表示你不再下發這個補丁,這個操作是不可逆的,點擊撤回,基線版本將不會再收到這個補丁策略。
以上就是Bugly熱更新SDK的集成方式一些說明啦,如果還有疑問直接找Bugly-kirito諮詢。
一些大家比較關注的問題
Q:Bugly熱更新會收費麼?
A:大家可以放心,我們熱更新服務目前是完全免費的。
Q:之前使用Tinker,怎麼切換過來使用Bugly?
A: 你只需在dependencies中配置一句代碼:
compile "com.tencent.bugly:crashreport_upgrade:1.2.0"
註釋掉以前的配置:
// 可選,用於生成application類
//provided('com.tencent.tinker:tinker-android-anno:1.7.5')
// tinker的核心庫
// compile('com.tencent.tinker:tinker-android-lib:1.7.5')
插件配置不需要更改,只需要加上我們Bugly額外的tinker-support插件即可:
// tinker gradle插件
classpath ('com.tencent.tinker:tinker-patch-gradle-plugin:1.7.5')
// tinkersupport插件
classpath "com.tencent.bugly:tinker-support:1.0.1"
這裏建議您不要隨便更改插件版本,避免因爲插件的更新導致您無法正常生成我們需要的補丁包。
Q:如果我配置了升級策略,又配置了補丁策略,會是怎樣的效果?
A:升級策略優先級會高於補丁策略,後臺會優先下發升級策略。畢竟你都要升級了,熱更新只是幫助你修復bug而已。
Q:我只想使用熱更新,不想使用升級?
A:熱更新是包含在升級SDK裏面的,你可以不配置任何升級策略,只需按照熱更新文檔集成即可。
Q:是否支持加固模式?
A:tinker是支持加固模式的,但需要你回退到Qzone方案
,將usePreGeneratedPatchDex
設置爲true。
但要注意Tinker官方的提示:
是否提前生成dex,而非合成的方式。這套方案即回退成Qzone的方案,對於需要使用加固或者多flavor打包(建議使用其他方式生成渠道包)的用戶可使用。但是這套方案需要插樁,會造成Dalvik下性能損耗以及Art補丁包可能過大的問題,務必謹慎使用。另外一方面,這種方案在Android N之後可能會產生問題,建議過濾N之後的用戶。
Q:是否支持打多Flavor的patch包
A:支持的。你需要配置productFlavor(示例):
productFlavors {
xiaomi {
applicationId 'com.tencent.bugly.hotfix.xiaomi'
}
yyb {
applicationId 'com.tencent.bugly.hotfix.yyb'
}
}
打flavor包,只需要配置構建flavor的目錄,其他字段不需要填寫(執行tinkerPatchAllFalvorRelease就可以得到所有flavor的包):
總結&展望
關於Bugly熱更新SDK你需要知道的一些事情,筆者已經講完啦,如果你在使用過程中遇到任何問題可以及時跟我們反饋,我們會持續跟進優化SDK和完善接入流程,後續我們會分享更多我們Bugly關於熱更新的一些技術和原理上的理解,希望本篇文章能夠讓使用Bugly熱更新SDK的同學和想了解我們熱更新的同學的有一些解惑。