以下文章記錄bugly熱更新的過程(傻瓜式教程,被那人較懶,直接貼圖吧):
集成第三方,首先肯定是去官網注冊,申請資料,balabala的,直接上圖吧


(APPID后面需要用到)

對照步驟一步步來:
project目錄的gradle配置,重點紅圈?。。?/p>



moudle目錄下創(chuàng)建

tinker-support.gradle里面的內容,好吧,完全copy,沒毛病,之后告訴怎么修改基準包和補丁包的修改
apply plugin: 'com.tencent.bugly.tinker-support'
def bakPath = file("${buildDir}/bakApk/")
/**
- 此處填寫每次構建生成的基準包目錄
*/
def baseApkDir = "app-1110-10-23-51"
/**
-
對于插件各參數(shù)的詳細解析請參考
*/
tinkerSupport {// 開啟tinker-support插件,默認值true
enable = true// 指定歸檔目錄,默認值當前module的子目錄tinker
autoBackupApkDir = "${bakPath}"// 是否啟用覆蓋tinkerPatch配置功能,默認值false
// 開啟后tinkerPatch配置不生效,即無需添加tinkerPatch
overrideTinkerPatchConfiguration = true// 編譯補丁包時,必需指定基線版本的apk,默認值為空
// 如果為空,則表示不是進行補丁包的編譯
// @{link tinkerPatch.oldApk }
baseApk = "${bakPath}/${baseApkDir}/app-release.apk"// 對應tinker插件applyMapping
baseApkProguardMapping = "${bakPath}/${baseApkDir}/app-release-mapping.txt"// 對應tinker插件applyResourceMapping
baseApkResourceMapping = "${bakPath}/${baseApkDir}/app-release-R.txt"// 構建基準包和補丁包都要指定不同的tinkerId,并且必須保證唯一性
// tinkerId = "base-1.0.1"
tinkerId = "patch-1.0.1"// 構建多渠道補丁時使用
// buildAllFlavorsDir = "${bakPath}/${baseApkDir}"// 是否啟用加固模式,默認為false.(tinker-spport 1.0.7起支持)
// isProtectedApp = true// 是否開啟反射Application模式
enableProxyApplication = false// 是否支持新增非export的Activity(注意:設置為true才能修改AndroidManifest文件)
supportHotplugComponent = true
}
/**
一般來說,我們無需對下面的參數(shù)做任何的修改
對于各參數(shù)的詳細介紹請參考:
-
https://github.com/Tencent/tinker/wiki/Tinker-%E6%8E%A5%E5%85%A5%E6%8C%87%E5%8D%97
/
tinkerPatch {
//oldApk ="${bakPath}/${appName}/app-release.apk"
ignoreWarning = false
useSign = true
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 = "1.0.1-base"
//applyMapping = "${bakPath}/${appName}/app-release-mapping.txt" // 可選,設置mapping文件,建議保持舊apk的proguard混淆方式
//applyResourceMapping = "${bakPath}/${appName}/app-release-R.txt" // 可選,設置R.txt文件,通過舊apk文件保持ResId的分配
}
}

有關,true呢,方便一點,本人較懶,不想多寫一個類,不過我用的是false。。。。


記得去maifest里面配置application喲,這個就不給圖了,下面是appLike代碼,之前的application里面的初始化操作都放在這里去操作
public class AppLike extends DefaultApplicationLike {
public static final String TAG = "Tinker.SampleApplicationLike";
public AppLike(Application application, int tinkerFlags,
boolean tinkerLoadVerifyFlag, long applicationStartElapsedTime,
long applicationStartMillisTime, Intent tinkerResultIntent) {
super(application, tinkerFlags, tinkerLoadVerifyFlag, applicationStartElapsedTime, applicationStartMillisTime, tinkerResultIntent);
}
@Override
public void onCreate() {
super.onCreate();
// 這里實現(xiàn)SDK初始化,appId替換成你的在Bugly平臺申請的appId
// 調試時,將第三個參數(shù)改為true
Bugly.init(getApplication(), "efbe42d727", 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);
}
}
下面enableProxyApplication = true 的情況,沒寫,直接上文檔圖:

下面是manifest配置

文檔里面的說明。有必要給個圖



編譯完成后這里會生成一個基準包,這就是基準包。
接著,我們修改下代碼,我懶就改了個字符串顯示。。。。
我們看看接下來補丁包的配置
,我們吧剛才基準包的內容修改下,在tinker-support里面,給圖最清楚:

不多說,聰明的各位肯定明白,對了,記得修改tinkerId為補丁包的,看看上面的注釋,必須保證唯一
繼續(xù)圖解

這樣就生成了補丁包,位置注意是patch,不是tinkerPatch

然后我們就可以愉快的去上傳補丁包了


對于下發(fā)范圍的說明:

等會兒然后就ok了
以上,就是圖解bugly熱修復的集成咯