Android Bugly 中的熱修復(fù)接入方式(坑已找到原因)

配置:
/** 第一步:bugly 熱更新配置: 項(xiàng)目中的build.gradle */
jcenter()

/** 第二步:bugly 熱更新配置,版本號一定要按照如下標(biāo)明的填寫: 項(xiàng)目中的build.gradle/
/
* 設(shè)置tools的gradle 版本 /
classpath "com.android.tools.build:gradle:3.4.0"
/
* tinkersupport插件 */
classpath "com.tencent.bugly:tinker-support:1.1.5"

/** 第三步:bugly 熱更新配置: Module中的build.gradle*/
ndk {
//設(shè)置支持的SO庫架構(gòu)
abiFilters 'armeabi','x86','armeabi-v7a','x86_64','arm64-v8a'
}

/** 第四步:bugly 熱更新配置: Module中的build.gradle,版本號一定要按照如下標(biāo)明的填寫*/
implementation "com.android.support:multidex:1.0.2" // 多dex配置
//注釋掉原有bugly的倉庫
// 指定tinker依賴版本(注:應(yīng)用升級1.3.5版本起,不再內(nèi)置tinker)
implementation 'com.tencent.tinker:tinker-android-lib:1.9.9'


distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https://services.gradle.org/distributions/gradle-6.7-all.zip


<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />


<activity
android:name="com.tencent.bugly.beta.ui.BetaActivity"
android:configChanges="keyboardHidden|orientation|screenSize|locale"
android:theme="@android:style/Theme.Translucent" />


<provider
android:name=".utils.BuglyFileProvider"
android:authorities="${applicationId}.fileProvider"
android:exported="false"
android:grantUriPermissions="true"
tools:replace="name,authorities,exported,grantUriPermissions">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"
tools:replace="name,resource"/>
</provider>

/** 第九步:在utils包中創(chuàng)建命名為BuglyFileProvider類,并繼承FileProvider */
public class BuglyFileProvider extends FileProvider {
}

/** 第十步:在res下創(chuàng)建xml目錄,并且創(chuàng)建 provider_paths.xml 文件,文件內(nèi)容如下:*/
<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android">


<external-path name="beta_external_path" path="Download/"/>

<external-path name="beta_external_files_path" path="Android/data/"/>
</paths>

/** 第十一步: 在module根目錄下即app根目錄下創(chuàng)建tinker-support.gradle這個文件,文件內(nèi)容如下:*/
apply plugin: 'com.tencent.bugly.tinker-support'

def bakPath = file("${buildDir}/bakApk/")

/**

  • 此處填寫每次構(gòu)建生成的基準(zhǔn)包目錄
    */
    def baseApkDir = "app-1108-15-10-04"

/**

  • 對于插件各參數(shù)的詳細(xì)解析請參考
    /
    tinkerSupport {
    // 開啟tinker-support插件,默認(rèn)值true
    enable = true
    // 自動生成tinkerId, 你無須關(guān)注tinkerId,默認(rèn)為false
    autoGenerateTinkerId = true
    // 指定歸檔目錄,默認(rèn)值當(dāng)前module的子目錄tinker
    autoBackupApkDir = "{bakPath}" // 是否啟用覆蓋tinkerPatch配置功能,默認(rèn)值false // 開啟后tinkerPatch配置不生效,即無需添加tinkerPatch overrideTinkerPatchConfiguration = true // 編譯補(bǔ)丁包時,必需指定基線版本的apk,默認(rèn)值為空 // 如果為空,則表示不是進(jìn)行補(bǔ)丁包的編譯 // @{link tinkerPatch.oldApk } baseApk = "{bakPath}/{baseApkDir}/app-release.apk" // baseApk = "{bakPath}/{baseApkDir}/app-debug.apk" // 對應(yīng)tinker插件applyMapping baseApkProguardMapping = "{bakPath}/{baseApkDir}/app-release-mapping.txt" // baseApkProguardMapping = "{bakPath}/{baseApkDir}/app-debug-mapping.txt" // 對應(yīng)tinker插件applyResourceMapping baseApkResourceMapping = "{bakPath}/{baseApkDir}/app-release-R.txt" // baseApkResourceMapping = "{bakPath}/{baseApkDir}/app-debug-R.txt" // 構(gòu)建基準(zhǔn)包跟補(bǔ)丁包都要修改tinkerId,主要用于區(qū)分 // tinkerId = "1.0.3-ccc" // 打多渠道補(bǔ)丁時指定目錄 // buildAllFlavorsDir = "{bakPath}/${baseApkDir}"
    // 是否使用加固模式,默認(rèn)為false
    // isProtectedApp = true
    // 是否采用反射Application的方式集成,無須改造Application
    enableProxyApplication = true
    // 支持新增Activity
    supportHotplugComponent = true
    }
    /
    *
  • 一般來說,我們無需對下面的參數(shù)做任何的修改
  • 對于各參數(shù)的詳細(xì)介紹請參考:
  • https://github.com/Tencent/tinker/wiki/Tinker-%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97
    /
    tinkerPatch {
    tinkerEnable = true
    ignoreWarning = false
    useSign = false
    dex {
    dexMode = "jar"
    pattern = ["classes
    .dex"]
    loader = []
    }
    lib {
    pattern = ["lib//.so"]
    }
    res {
    pattern = ["res/", "r/", "assets/*", "resources.arsc", "AndroidManifest.xml"]
    ignoreChange = []
    largeModSize = 100
    }
    packageConfig {
    }
    sevenZip {
    zipArtifact = "com.tencent.mm:SevenZip:1.1.10"
    // path = "/usr/local/bin/7za"
    }
    buildConfig {
    keepDexApply = false
    // tinkerId = "base-2.0.1"
    }
    }

/** 第十二步:在module的頂部,添加依賴插件腳本 */
apply from: 'tinker-support.gradle'

/** 第十三步:在 tinker-support.gradle 文件中修改如下屬性值 */
enableProxyApplication = true

/** 第十四步:在Application 類中初始化熱修復(fù)補(bǔ)丁 */
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// 這里實(shí)現(xiàn)SDK初始化,appId替換成你的在Bugly平臺申請的appId
// 調(diào)試時,將第三個參數(shù)改為true
Bugly.init(this, "900029763", false);
}
@Override
protected void attachBaseContext(Context base) {
super.attachBaseContext(base);
// you must install multiDex whatever tinker is installed!
MultiDex.install(base);
// 安裝tinker
Beta.installTinker();
}
}

/** 第十五步:混淆 /
-dontwarn com.tencent.bugly.
*
-keep public class com.tencent.bugly.*{;}

tinker混淆規(guī)則

-dontwarn com.tencent.tinker.**
-keep class com.tencent.tinker.** { ; }
如果使用了support-v4,需要添加如下規(guī)則:
-keep class android.support.
{;}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容