android|腾讯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”
【android|腾讯Bugly热更新集成总结】/**
* 对于插件各参数的详细解析请参考
*/
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之后就好了(也有可能是你配置文件中的问题,这里需要注意)。
文章图片
demo地址:http://download.csdn.net/detail/ling9400/9763209(module)
推荐阅读
- android第三方框架(五)ButterKnife
- Android中的AES加密-下
- 带有Hilt的Android上的依赖注入
- android|android studio中ndk的使用
- Android事件传递源码分析
- RxJava|RxJava 在Android项目中的使用(一)
- Android7.0|Android7.0 第三方应用无法访问私有库
- 腾讯视频(我有一段rap想给你说)
- 深入理解|深入理解 Android 9.0 Crash 机制(二)
- android防止连续点击的简单实现(kotlin)