国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Bugly實現APP熱更新

2019-11-09 16:40:18
字體:
來源:轉載
供稿:網友

Bugly實現APP熱更新

Bugly實現熱修復采用的是微信Tinker技術。對Tinker進行了簡化封裝。

Bugly熱修復官方文檔

一、配置參數

添加插件依賴

工程根目錄下“build.gradle”文件中添加:

buildscript { repositories { jcenter() } dependencies { // tinkersupport插件,其中latest.release指代最新版本號,也可以指定明確的版本號,例如1.0.3 classpath "com.tencent.bugly:tinker-support:latest.release" }}

二、集成SDK

gradle配置

在app module的“build.gradle”文件中添加(示例配置):

dependencies { compile "com.android.support:multidex:1.0.1" compile 'com.tencent.bugly:crashreport_upgrade:latest.release'}

在app module的“build.gradle”文件中添加:

// 依賴插件腳本apply from: 'tinker-support.gradle'

tinker-support.gradle內容如下所示(示例配置):

需要在同級目錄下創建tinker-support.gradle這個文件

apply plugin: 'com.tencent.bugly.tinker-support'def bakPath = file("${buildDir}/bakApk/")def appName = "app-0111-15-18-41"/*** 對于插件各參數的詳細解析請參考*/tinkerSupport { // 開啟tinker-support插件,默認值true enable = true // 指定歸檔目錄,默認值當前module的子目錄tinker autoBackupApkDir = "${bakPath}" // 是否啟用覆蓋tinkerPatch配置功能,默認值false // 開啟后tinkerPatch配置不生效,即無需添加tinkerPatch overrideTinkerPatchConfiguration = true // 編譯補丁包時,必需指定基線版本的apk,默認值為空 // 如果為空,則表示不是進行補丁包的編譯 // @{link tinkerPatch.oldApk } baseApk = "${bakPath}/${appName}/app-release.apk" // 對應tinker插件applyMapping baseApkPRoguardMapping = "${bakPath}/${appName}/app-release-mapping.txt" // 對應tinker插件applyResourceMapping baseApkResourceMapping = "${bakPath}/${appName}/app-release-R.txt" // 唯一標識當前版本 tinkerId = "1.0.1-base" // 是否開啟代理application,設置之后無須改造Application,默認為false enableProxyApplication = false}

三、初始化SDK

enableProxyApplication = false 的情況

自定義Applicationpublic class SampleApplication extends TinkerApplication { public SampleApplication() { super(ShareConstants.TINKER_ENABLE_ALL, "com.yiba.test.buglypatch.SampleApplicationLike", "com.tencent.tinker.loader.TinkerLoader", false); }}自定義ApplicationLikepublic class SampleApplicationLike extends DefaultApplicationLike { public static final String TAG = "Tinker.SampleApplicationLike"; public SampleApplicationLike(Application application, int tinkerFlags, boolean tinkerLoadVerifyFlag, long applicationStartElapsedTime, long applicationStartMillisTime, Intent tinkerResultIntent, Resources[] resources, ClassLoader[] classLoader, AssetManager[] assetManager) { super(application, tinkerFlags, tinkerLoadVerifyFlag, applicationStartElapsedTime, applicationStartMillisTime, tinkerResultIntent, resources, classLoader, assetManager); } @Override public void onCreate() { super.onCreate(); // 這里實現SDK初始化,appId替換成你的在Bugly平臺申請的appId Bugly.init(getApplication(), "900029763", true); } @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) @Override public void onBaseContextAttached(Context base) { super.onBaseContextAttached(base); // you must install multiDex whatever tinker is installed! MultiDex.install(base); // 安裝tinker // TinkerManager.installTinker(this); 替換成下面Bugly提供的方法 Beta.installTinker(this); } @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) public void registerActivityLifecycleCallback(Application.ActivityLifecycleCallbacks callbacks) { getApplication().registerActivityLifecycleCallbacks(callbacks); }}

四、AndroidManifest.xml配置

權限配置<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.READ_EXTERNAL_STORAGE"/>Activity配置<activity android:name="com.tencent.bugly.beta.ui.BetaActivity" android:theme="@android:style/Theme.Translucent" />

配置FileProvider(Android N之后配置)

見文檔

五、混淆配置

為了避免混淆SDK,在Proguard混淆文件中增加以下配置:

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

如果你使用了support-v4包,你還需要配置以下混淆規則:

-keep class android.support.**{*;}

六、編譯基準包

基準包就是原先運行有bug的包。

點擊Android Studio右上角的Gradle按鈕,找到項目的assembleRelease任務,雙擊執行assembleRelease任務。

image

任務執行完成后,會在build的目錄下生成如下文件:

image

七、修復基準版代碼

修復前代碼:

public class BugClass { public String bug() { String str = "This is a bug"; str = null; Log.e("zhang", "BugClass --> bug--> str length :" + str.length()); return str; }}

修復后代碼:

public class BugClass { public String bug() { String str = "This is a bug";// str = null; Log.e("zhang", "BugClass --> bug--> str length :" + str.length()); return str + " , fixed!!!"; }}

調用代碼:

public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Button btn = (Button) findViewById(R.id.btn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { BugClass bugClass = new BugClass(); String bug = bugClass.bug(); Toast.makeText(MainActivity.this, bug, Toast.LENGTH_SHORT).show(); } }); }}

八、生成補丁包

修改appName名稱以及文件名稱都需要保持一致。同時將基準包的tinkerid=1.0.1-base改為補丁包的tinkerid=1.0.1-patch。

image

生成補丁包

執行生成補丁包的任務操作:

image

任務執行完之后,會生成3個文件,其中patch_signed_7zip.apk是我們需要的補丁包

image

將補丁包上傳至bugly的應用升級模塊的熱更新中

具體見bugly的官方文檔。


上傳了補丁包可能不會立馬生效,多試幾次就好

Demo


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 密云县| 邢台市| 孟村| 综艺| 库伦旗| 竹北市| 雅安市| 汾西县| 安宁市| 太仓市| 金溪县| 纳雍县| 象州县| 青岛市| 睢宁县| 耿马| 西青区| 册亨县| 鸡西市| 察雅县| 二连浩特市| 盘锦市| 太康县| 宝坻区| 黔西| 凤城市| 鸡东县| 北宁市| 三明市| 新民市| 揭东县| 湖南省| 广东省| 三门县| 余干县| 安乡县| 甘孜县| 万安县| 潢川县| 九龙坡区| 清水县|