腾讯Bugly热更新集成总结

来源:互联网 发布:小米任我行 联通网络 编辑:程序博客网 时间:2024/05/17 18:01

热更新:多么高大上的名字,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插件,默认值trueenable = true// 指定归档目录,默认值当前module的子目录tinkerautoBackupApkDir = "${bakPath}"// 是否启用覆盖tinkerPatch配置功能,默认值false// 开启后tinkerPatch配置不生效,即无需添加tinkerPatchoverrideTinkerPatchConfiguration = 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包

demo地址:http://download.csdn.net/detail/ling9400/9763209(module)

0 0
原创粉丝点击