1. 程式人生 > >騰訊Bugly熱更新整合總結

騰訊Bugly熱更新整合總結

熱更新:多麼高大上的名字,Android 開發者應該都知道這麼個東西,原理呢!請自行百度,這裡只是整合總結,謝謝!!!
對於第三方SDK的使用,大家都知道用“步步高點讀機,哪裡不會點哪裡”—— 所以第一步肯定是看官方整合文件:地址:https://bugly.qq.com/docs/user-guide/instruction-manual-android-hotfix/?v=20170223160322
首先,剛開始看的時候跟大部分SDK一樣肯定是各種配置的,這裡根據官方文件的步驟來解釋說明哪裡需要注意的,以及我是怎麼處理成功的。

第一步:新增外掛依賴
工程根目錄下“build.gradle”檔案中新增:

buildscript {
repositories {
jcenter()
}
dependencies {
// tinkersupport外掛, 其中lastest.release指拉取最新版本,也可以指定明確版本號,例如1.0.4
classpath “com.tencent.bugly:tinker-support:latest.release”
}
}
坑 1:這裡是新增依賴沒錯,但我遇到問題就是後面生成patch包時在Gradle任務中找不到文件裡面說的tinker資料夾和tinker-support資料夾(後面的步驟會說到),於是乎翻山越嶺找資料,發現一個這個: classpath (‘com.tencent.tinker:tinker-patch-gradle-plugin:1.7.5’) 需要這個依賴外掛

第二步:整合SDK:這裡沒有什麼大坑,照著複製就可以了,注意:tinker-support.gradle檔案中的配置
apply plugin: ‘com.tencent.bugly.tinker-support’

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

/**
* 此處填寫每次構建生成的基準包目錄,如果是你打基準包這個可以暫時不用管,打patch包的話就要改成你的基準包生成的目錄,必須相同
*/
def baseApkDir = “app-0208-15-10-00”

/**
* 對於外掛各引數的詳細解析請參考
*/
tinkerSupport {

// 開啟tinker-support外掛,預設值true
enable = true

// 指定歸檔目錄,預設值當前module的子目錄tinker
autoBackupApkDir = "${bakPath}"

// 是否啟用覆蓋tinkerPatch配置功能,預設值false
// 開啟後tinkerPatch配置不生效,即無需新增tinkerPatch
overrideTinkerPatchConfiguration = true

// 編譯補丁包時,必需指定基線版本的apk,預設值為空
// 如果為空,則表示不是進行補丁包的編譯
// @{link tinkerPatch.oldApk } **patch包改成基準包的apk檔名**
baseApk = "${bakPath}/${baseApkDir}/app-release.apk"

// 對應tinker外掛applyMapping **patch包改成基準包的mapping檔名**
baseApkProguardMapping = "${bakPath}/${baseApkDir}/app-release-mapping.txt"

// 對應tinker外掛applyResourceMapping **patch包改成基準包的R檔名**
baseApkResourceMapping = "${bakPath}/${baseApkDir}/app-release-R.txt"

// 構建基準包和補丁包都要指定不同的tinkerId,並且必須保證唯一性,**基準包這裡最好是改成base-versionname,patch包就改成patch-versionname,每個版本的都不一樣**
tinkerId = "base-1.0.1"//示例

// 構建多渠道補丁時使用
// buildAllFlavorsDir = "${bakPath}/${baseApkDir}"

// 是否開啟反射Application模式
enableProxyApplication = false

}

/**
* 一般來說,我們無需對下面的引數做任何的修改
* 對於各引數的詳細介紹請參考:
* 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的分配
}
}

後面的步驟就按照整合文件來就OK了,最後說明一下:build資料夾下會產生很多app-xxxx-xx-xx的資料夾, 你生成的基準包就是在這裡面,主要使用最新的,不想要的話直接build project或者clean也可以。
這裡寫圖片描述

終極大坑: 在打patch包的時候,遇到點選Gradle任務中的tinker-support生成apk的時候有時會出錯,經過我的不斷rebuild和clean之後就好了(也有可能是你配置檔案中的問題,這裡需要注意)。
生成patch包