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