下面的文章只是和微信的 tinker 有关,和收费的 tinkerPlatform 还有 buglyTinker 无关。
下面是 tinker 在 GitHub 给出的官网文档:https://github.com/Tencent/tinker
tinker 的优势以及和 QZone、AndFix、Robust 的对比效果就不再说了,想了解自行搜索。
下面是 tinker Android 版本给出的 demo:https://github.com/Tencent/tinker/tree/master/tinker-sample-android,也就是下面这个:
将最上面的 GitHub 项目下载下来,用 AndroidStudio 打开我们的 tinker-sample-android;编译完毕会出现下面的错误:
将 app 下面的 build.gradle 中的 tinkerId = getTinkerIdValue() 替换为 tinkerId = "tinkerId" ,如下图所示
再将 ignoreWarning = false 替换为 ignoreWarning = true ,如下图所示:
替换完毕,下面来运行 debug ,点击右侧 Gradle ,再点击 assembleDebug,如下图所示:
运行完毕,会提示运行成功,如下图:
然后去 app ==> build ==> bacApk 文件夹中发现一个 debug 的 apk 文件,如下图所示:
将上面的 apk 文件运行到我们的手机上,上面的 debug 包就是我们的基准包,运行完毕,可以看到打印出了
i am on onCreate string:I am in the base apk
如下图所示:
基准包创建完毕,下面就演示打补丁包。
回到项目中,将 R.string.test_resource 中的文字改为 I am in the patch apk ,如下图所示:
在 gradle 中找到 tinkerOldApkPath ,将后面的名称改为刚才 debug 包的名称,如下图所示:
点击右侧 Gradle ,再点击 tinkerPatchDebug ,如下图所示:
运行之后,运行成功会如下图显示:
还可以看到补丁包的文件位置:
Tinker patch done, you can go to file to find the output /Users/wuqingsen/ASProject/AS/GitHubXDown/tinker-dev/tinker-sample-android/app/build/outputs/apk/tinkerPatch/debug
-----------------------Tinker patch end-------------------------
BUILD SUCCESSFUL in 3s
32 actionable tasks: 7 executed, 25 up-to-date
16:32:54: Task execution finished 'tinkerPatchDebug'.
在 app ==> outputs ==> apk ==> tinkerPatch ==> debug ==>patch_signed_7zip.apk 找到补丁包,如下图:
将上面的补丁包加入到手机根目录里面,因为项目设置位置为根目录,如下面的代码:
loadPatchButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TinkerInstaller.onReceiveUpgradePatch(getApplicationContext(), Environment.getExternalStorageDirectory().getAbsolutePath() + "/patch_signed_7zip.apk");
}
});
打开 app ,点击 LOAD PATCH ,加载补丁;过两秒点击 KILL SELF。
然后再打开 app,可以看到下面的 log 日志:
i am on onCreate string:I am in the patch apk
补丁加载成功,日志打印如下图: