1. 程式人生 > >bugly 全量更新和熱修復

bugly 全量更新和熱修復

   bugly怎麼說的,全量更新跟熱修復使用起來還是很簡單的,只是點點點就好了,還支援加固,還有錯誤收集日誌。

但是!這依然不能抵擋他官方文件裡的坑的問題!大問題!我用了一個星期踩坑,建了三四個專案,終於弄完了!那種成就感!那種自豪感!我都不知道自己是誰了。

下面開始整合,最好不要一次全都整合,而是分開弄,整合一個實驗一下功能是否正常在整合下一個,還有,如果是整合進入現有專案的話,最好新建個測試類,不然那關聯的報錯會讓你欲仙欲死的。

---------------------------------------------------------------

  先從全量更新開始:

更新比較簡單,而且網上很多,基本上按照順序走就都能成功,需要注意的就是簽名檔案問題了,這個都不用怎麼說吧,還有就是生效需要一定的時間。

在專案的build.gradle中新增依賴,我的連帶著修復的也算上了,如果你只需要更新的話,可以不按照我的做,去找一個更新的文章,因為我的是連帶著熱修復也算在內部的。

classpath ('com.tencent.tinker:tinker-patch-gradle-plugin:1.7.11')
classpath "com.tencent.bugly:tinker-support:1.1.2"

新增依賴,雖然大部分最後兩個就夠了,不過還好全點吧:

//bugly
compile 'com.android.support:multidex:1.0.1'
// 多dex配置
compile 'com.tencent.tinker:tinker-android-lib:1.9.6'
compile 'com.tencent.bugly:nativecrashreport:latest.release'
//其中latest.release指代最新版本號,也可以指定明確的版本號,例如2.2.0
compile 'com.tencent.bugly:crashreport_upgrade:latest.release'
//其中latest.release指代最新版本號,也可以指定明確的版本號,例如1.2.1

然後是許可權,這個位置不需要多說,就不截圖了,

<uses-permission android:name="android.permission.INTERNET"/>
    <!--必須的許可權配置-->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.READ_LOGS" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

然後同樣是檔案內配置activity和provider,如果有第三方文件的話可以按照官方文件來做,另外,v4包的需要注意一下,看看ctrl+左鍵能不能點進去,最好這兩個都試一下,才能知道導沒匯入成功

<!--bugly必須配置-->
<activity
    android:name="com.tencent.bugly.beta.ui.BetaActivity"
    android:configChanges="keyboardHidden|orientation|screenSize|locale"
    android:theme="@android:style/Theme.Translucent" />
<provider
    android:name="android.support.v4.content.FileProvider"
    android:authorities="${applicationId}.fileProvider"
    android:exported="false"
    android:grantUriPermissions="true">
    <meta-data
        android:name="android.support.FILE_PROVIDER_PATHS"
        android:resource="@xml/provider_paths"/>
</provider>

然後初始化就可以了,

在Application類中初始化1

public class MyApplication extends Application{
    @Override
    public void onCreate() {
        super.onCreate();

        ------

        Bugly.init(getApplicationContext(), "你的appkey", false);

        ------
    }
}

記得在bugly申請一個賬號,然後建立專案,然後填寫資料就好了,這個不需要多說

找到AppID,主要需要的就是這個,初始化中也是

然後是初始化,建立一個全域性類,整合Application類

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        // bugly版本更新
 intBugly();
    }

    private void intBugly() {
        /**
         * 只允許在MainActivity上顯示更新彈窗,其他activity上不顯示彈窗;
         * 不設定會預設所有activity都可以顯示彈窗;
         */
        Beta.canShowUpgradeActs.add(MainActivity.class);
        Beta.autoInit = true;
        Beta.autoCheckUpgrade = true;
        /**
         * 點選過確認的彈窗在APP下次啟動自動檢查更新時會再次顯示;
         */
        Beta.showInterruptedStrategy = false;
        Bugly.init(getApplicationContext(), "自己的appid", false);
    }

}

然後在任何一個想要監測更新的類中呼叫方法,比如MainActivity

Beta.checkUpgrade();

這樣就完成了,只要按照需求加固混淆什麼的就可以了,然後上傳到bugly釋出更新策略就行,那個就按照官方文件走就可以了,下面是bugly的混淆,記得修改版本號哦,只能增大,不能減小。

-dontwarn com.tencent.bugly.**
-keep public class com.tencent.bugly.**{*;}

到這裡更新就整合完畢,只要正常打包然後釋出就可以了,策略啟動需要一定的時間,然後用打包好的更新就好了,基本上沒有什麼坑,也很簡單,但是接下來的熱修復就消耗了好長時間,出了好多坑。