Bugly熱更新SDK你需要知道的一些事

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版本才開始支持熱更新:

Snip20161126_8.png

<font color="red">注意:升級SDK自1.2.0起將不再支持以jar包形式集成,我們建議您使用Android studio并且以gradle方式集成。</font>

為什么集成我們Bugly熱更新SDK?

熱更新能力是Bugly為解決開發者緊急修復線上Bug,而無需重新發版讓用戶無感知就能把問題修復的一項能力。Bugly目前采用微信Tinker的開源方案,開發者只需要集成我們提供的SDK就可以實現自動下載補丁包、合成、并且應用補丁的功能,我們也提供了熱更新管理后臺讓開發者對每個版本的補丁進行管理。

集成我們SDK的好處是顯而易見的:

  • 無需關注Tinker是如何合成補丁的
  • 無需自己搭建補丁管理后臺
  • 無需考慮后臺下發補丁策略的任何事情
  • 無需考慮補丁下載合成的時機,處理后臺下發的策略
  • 我們提供了更加方便集成Tinker的方式
  • 我們提供應用升級一站式解決方案

![Uploading 1480174833522_453273.png . . .]
](http://upload-images.jianshu.io/upload_images/224008-14c8796bc98747d7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

如何集成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配置
    • 混淆配置
  4. 測試驗證

    • 打基準包安裝并上報聯網(注:填寫唯一的tinkerId)
    • 對基準包的bug修復(可以是Java代碼變更,資源的變更)
    • 修改基準包路徑、填寫補丁包tinkerId、mapping文件路徑、resId文件路徑
    • 執行tinkerPatchRelease打Release版本補丁包
    • 選擇app/build/outputs/patch目錄下的補丁包并上傳(注:不要選擇tinkerPatch目錄下的補丁包,不然上傳會有問題)
    • 編輯下發補丁規則,點擊立即下發
    • 重啟基準包,請求補丁策略(SDK會自動下載補丁并合成)
    • 再次重啟基準包,檢驗補丁應用結果

以上是應用補丁的流程,有同學可能會問,如果我想撤回怎么辦?這里先解釋下我們補丁的幾種狀態:

  • 下發中
  • 生效中、下發停止
  • 撤回中

下發中:表示你上傳一個補丁后,點擊立即下發之后的狀態,表示后臺正在下發補丁策略,補丁包對應的基線版本是可以收到對應的策略的。

生效中、下發停止:表示你已經下發過這個補丁,但因為你上傳了新補丁,這個補丁下發會被停止,要注意一個目標版本只運行下發一個補丁。

撤回中:表示你不再下發這個補丁,這個操作是不可逆的,點擊撤回,基線版本將不會再收到這個補丁策略。

1480174833522.png

以上就是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。

1480176125332.png

但要注意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的包):

1480176507819.png
tinker task.png

總結&展望

關于Bugly熱更新SDK你需要知道的一些事情,筆者已經講完啦,如果你在使用過程中遇到任何問題可以及時跟我們反饋,我們會持續跟進優化SDK和完善接入流程,后續我們會分享更多我們Bugly關于熱更新的一些技術和原理上的理解,希望本篇文章能夠讓使用Bugly熱更新SDK的同學和想了解我們熱更新的同學的有一些解惑。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容