gradle 的配置:
tinker官方demo: 传送门
可以直接用as导入, 运行.
(运行会出现一个错误tinker_id没获取到, 只需将下面写死或者获取git version即可)
运行步骤:
1, 先使用gradle中的build生成old apk
2, 在项目工程app->build->bakapk找到生成的old apk
3, 将生成old.apk名字复制替换掉gradle中
ext>tinkerOldApkPath/tinkerApplyMappingPath/tinkerApplyResourcePath
4, 修改项目工程代码,或者布局
5, 使用gradle中的tinker中的tinkerPatchDebug/tinkerPatchRelease生成补丁
6, 在项目工程中app->build->outputs->tinkerpatch中找到生成的补丁
(先安装old apk,然后将补丁放入手机根目录, 点击加载补丁, 重启app即可)
project.gralde:
buildscript {
repositories {
mavenLocal()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.3.2'
classpath "com.tencent.tinker:tinker-patch-gradle-plugin:${TINKER_VERSION}"
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
mavenLocal()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
app.gradle:
将官方gradle 复制到自己项目里面(所有)
(TINKER_VERSION: 在gradle.properties中TINKER_VERSION=1.8.0)
java代码:
除app包可以不复制以外, 其它包全部copy到自己工程里面. 如:
Application:
1. 新建ApplicationLike继承DefaultApplicationLike, 并且添加注解
(红框代码为自己生成的application, 代码重新构建后, 可以在manifast添加)
2. 重写方法onBaseContextAttached, 可以在里面实现我们初始化方法, 一定要初始化tinker
SampleApplicationContext.application = getApplication();
SampleApplicationContext.context = getApplication();
TinkerManager.setTinkerApplicationLike(this);
TinkerManager.initFastCrashProtect();
//should set before tinker is installed
TinkerManager.setUpgradeRetryEnable(true);
//optional set logIml, or you can use default debug log
TinkerInstaller.setLogIml(new MyLogImp());
//installTinker after load multiDex
//or you can put com.tencent.tinker.** to main dex
TinkerManager.installTinker(this);
Tinker tinker = Tinker.with(getApplication());
- 加载补丁
TinkerInstaller.onReceiveUpgradePatch(getApplicationContext(),Environment.getExternalStorageDirectory().getAbsolutePath() + "/patch_signed_7zip.apk");
//patch_signed_7zip: 补丁名称