Android tinker热修复——从运行demo开始

1,250 阅读2分钟

如今你不懂Android的热修复和插件化技术,都不好意思说自己Android开发的了。热修复技术经过2015和2016年的发展、百花齐放,到2017年的沉淀,现在已经是非常成熟的Android技术,各个大厂也退出了自己的开源热修复项目,本文我们将学习比较优秀的热修复开源技术,腾讯系的tinker

tinker的githu地址:

https://github.com/Tencent/tinker

虽然在githut上有比较详细的api文档和demo运行的教程,但是依然有读书运行失败,本文将更加详细,手把手教你将tinker的demo运行起来。

clone

直接在GitHub上下载zip包,解压,得到文件,然后在AndroidStudio上运行sample

sample

或许会出现以下出错:

tinker

需要在项目的gradle.properties添加:

android.injected.build.model.only.versioned=3

tinker

再次运行有可能会出现如下错误:

tinker

这个需要安装git来解决,具体可以参考《Android 热修复Tinker接入实战 - CSDN博客》这篇文章的第二个踩坑点。

那么我是如何解决的呢,我直接安装git,然后把项目clone下来。

tinker

tinker

重新导入Sample,运行即可。不过还是会出现问题,如下:

tinker

解决办法,在Instant Run的Enable中不需要打勾

tinker

如果还出现如此问题,解决如下:

tinker

打开Run--->EditConfigurations,在Install Flags中添加 -t 即可

tinker

然后运行:

tinker

这就把demo运行出来了。运行出来不是我们的目的,我们需要测试一下热修复的情况,接下来就测试热修复。

我们在MainActivity中添加如下代码
this.findViewById(R.id.hello).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this,"你好tinker",Toast.LENGTH_SHORT).show();
            }
        });

对应的xml布局文件添加一个Button

<Button
        android:id="@+id/hello"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/showInfo"
        android:text="你好tinker"/>
修改app的build.gradle文件的tinkerOldApkPath和tinkerApplyResourcePath

在运行完项目之后,会在app-->build--->bakApk下面有生成的apk文件,找到最新的apk和对应的txt文件(这个apk是热更新的达成的patch包的基准)。

tinker

tinkerPatchDebug

一切准备好之后,就需要tinkerPatchDebug了。

tinker

结果还是翻了车,出现如下错误

tinker

这个tinkerPatchDebug中断,需要在build.gradle下的ignoreWarning改成true来解决,在tinker的gradle参数详解中也有讲到这个问题。

tinker

读者也可以参考这篇文章《Tinker热修复,配置时的坑》

配置好之后再tinkerPatchDebug一次,这次成功了,找到app---->build--->outputs--->apk---->tinkerPatch---->debug下面生成了一个patch_signed_7zip.apk。

然后将改patch_signed_7zip.apk包复制到手机的根目录下,打开app点击LoadPatch,修复成功,退出app,再一次打开app。

tinker

tinker

至此,整个demo运行完成并且能够实现热修复的了,希望本文对你有帮助!!!