废话不多说,现在网上有很多关于Tinker接入的文章
推荐:http://blog.csdn.net/lmj623565791/article/details/54882693 张鸿洋的博客
本篇文章主要说一下自己在接入过程中的心得
一、Gradle方式接入:
1.项目的build.gradle 下引入依赖:
dependencies {
classpath ('com.tencent.tinker:tinker-patch-gradle-plugin:1.7.7')
}
2、app module的build.gradle中,添加tinker的库依赖以及apply tinker的gradle插件
dependencies {
//可选,用于生成application类
provided('com.tencent.tinker:tinker-android-anno:1.7.7')
//tinker的核心库
compile('com.tencent.tinker:tinker-android-lib:1.7.7')
}
3.继承ApplicationLike类,注意@DefaultLifeCycle注解中设置Application的名称,并且AndroidManifest.xml中引用该Application
@DefaultLifeCycle(application = "com.ider.testview.SampleApplication",
flags = ShareConstants.TINKER_ENABLE_ALL,
loadVerifyFlag = false)
public class SimpleApplicationLike extends ApplicationLike {
// 此处省略构造方法
@Override
public void onBaseContextAttached(Context base) {
super.onBaseContextAttached(base);
}
@Override
public void onCreate() {
super.onCreate();
TinkerInstaller.install(this);
}
}
4.编辑app/build.gradle
apply plugin: 'com.tencent.tinker.patch'
tinkerPatch {
// 有问题的apk地址
oldApk = "D://app-debug.apk"
ignoreWarning = false
useSign = true
buildConfig {
tinkerId = "1.0"
}
dex {
dexMode = "jar"
pattern = ["class*.dex", "assets/secondary-dex-?.jar"]
loader = ["com.tencent.tinker.loader.*", "com.ider.testview.SampleApplication"]
}
lib{
pattern = ["lib/armeabi/*.so", "lib/arm64-v8a/*.so", "lib/armeabi-v7a/*.so", "lib/mips/*.so", "lib/mips64/*.so", "lib/x86/*.so", "lib/x86_64/*.so"]
}
res {
pattern = ["res/*", "assets/*", "resources.arsc", "AndroidManifest.xml"]
largeModSize = 100
}
sevenZip {
zipArtifact = "com.tencent.mm:SevenZip:1.1.10"
}
}
5.
此处注意:
注意环境变量中gradle版本,如果使用2.2.0+的插件版本,那么gradle版本要使用2.14.1,并且java版本要为jdk1.8,环境变量中JAVA_HOME和JRE_HOME都要设置为1.8的,否则无法通过gradle编译
useSign = true。设为false时,不对差分包进行签名,会导致差分包与基准包签名不同,无法更新
"TINKER_ID" android:value="tinker_id_1.0"/>
应用做的版本升级,但是没有更新tinkerID,会导致新版本加载旧版本的补丁。
- 接上面tinkerID继续,如果基础版本是tinkerID=1.0,发布一个tinkerPatch的tinkerID=2.0,那么2.0会保存在package_mete.xml的NEW_TINKER_ID中,此值并没有被用到,注意此时TINKER_ID依然为1.0,并没有因为打上patch而变为2.0。你依然可以在tinkerid=1.0的oldApk上继续发布3.0的patch,更新成功后NEW_TINKER_ID变为3.0, 而TINKER_ID依然是1.0。即:基于同一个基础包的修复patch可多次发布
Demo地址 : https://github.com/ericzhaowei/testtinker.git
二、命令行方式接入
1、1,2,3步相同
2、第4步省略,改为配置tinker_config.xml,tinker_config.xml中要修改应用Application的完整包名。
3、AndroidManifest.xml中手动设置thinkerId
data
android:name="TINKER_ID"
android:value="tinker_id_1.0" />
使用如下命令进行差分包生成:
java -jar tinker-patch-cli-1.7.7.jar -old old.apk -new new.apk -config tinker_config.xml -out output
具体Demo参考鸿洋博客底部的Demo:
http://blog.csdn.net/lmj623565791/article/details/54882693
参考:http://blog.csdn.net/a750457103/article/details/52815096