首页github地址 : https://github.com/Tencent/tinker
1.添加依赖文件,在你project下的build.gradle中添加如下代码:
buildscript {
dependencies {
classpath ('com.tencent.tinker:tinker-patch-gradle-plugin:1.7.6')
}
}
在app下的build.gradle下添加:
dependencies {
//用来自动生成application的,关于添加与否下面会说
provided('com.tencent.tinker:tinker-android-anno:1.7.6')
//tinker's main Android lib
compile('com.tencent.tinker:tinker-android-lib:1.7.6')
}
当然可以吧版本信息放在gradle.properties文件下进行配置
TINKER_VERSION=1.7.6
然后参考上面github中tinker-sample-android目录下的build.gradle配置自己的build.gradle(大部分都是拷贝过来的)
更多代码我就不贴了,参照tinker-sample-android就可以了。
2.配置Application,这里有两种方式,方式一 :
这个时候需要添加上面说的那个依赖,然后会自动生成SampleApplication,但是还是需要在xml里面配置好,虽然配置的时候回报错,等等编译一下就好了。
<application
android:name=".SampleApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
方式二:自定义Application集成TinkerApplication,指定applicationlike
public class SampleApplication extends TinkerApplication {
public SampleApplication() {
super(ShareConstants.TINKER_ENABLE_ALL
, "com.skin.tinkerdemo.SampleApplicationLike");
}
}
会有人好奇这个applicationLike是用来干嘛的,我们来看看demo里
@Override
public void onBaseContextAttached(Context base) {
super.onBaseContextAttached(base);
MultiDex.install(base);
TinkerManager.setTinkerApplicationLike(this);
TinkerManager.initFastCrashProtect();
//should set before tinker is installed
TinkerManager.setUpgradeRetryEnable(true);
TinkerManager.installTinker(this);
// TinkerInstaller.install(this);
}
很显然就是一些配置,中间那些TinkerManager也在demo里面大家可以看一下,这个地方有一个小提示,如果你用TinkerInstall.install(this)去安装的话可能会在你修复后闪退,不过不要怕,这个是库里面写的杀死进程,毕竟这个还需要进程重启才会修复生效,我们可以参考TinkerManager.installTinker(this)里面去重写SampleResultService(这个就是继承的库里面的DefaultTinkerResultService),在onPatchResult方法里面决定是否强制关闭应用进程。
TinkerInstaller.install(appLike,
loadReporter, patchReporter, patchListener,
SampleResultService.class, upgradePatchProcessor);
接下来我们就是先在MainActivity中配置文字信息
<string name="test_name">hello world!</string>
xml中,按钮点击调用修复代码
TinkerInstaller.onReceiveUpgradePatch(getApplicationContext(), Environment.getExternalStorageDirectory().getAbsolutePath() + "/patch_signed_7zip.apk");
那么这个patch_signed_7zip.apk是哪里来的呢,如果你按照demo里面的build.gradle去配置,你会发现你的如下图是这样的
这个时候你需要修改string.xml为
<string name="test_name">hello world!!!!!</string>
然后点击这个tinkerPatchDebug,不然不会生产差异包,(当然我这边是加了渠道才会变成TinkerPatchDevDebug),如果一切配置都没问题的话会在你的build下生产
#adb push ./app/build/outputs/tinkerPatch/debug/patch_signed_7zip.apk /storage/sdcard0/
最后拷贝文件到手机目录下,然后点击按钮重启进程(重启进程!重启进程!重启进程!重要的事说三遍)再打开你会发现已经修复好了。
最后提示:
1. 1.7.6版本不支持加固,如果需要加固不建议用tinker或者使用1.7.5之前的版本
2. 一键接入式也许更方便 https://github.com/TinkerPatch/tinkerpatch-sdk
3. 有什么不懂的可以咨询我哈