Android 热修复 Tinker 接入

现在热修复技术在Android开发中使用的越来越多,市场上关于热修复的框架也越来越多。Tinker 是微信官方的Android热补丁解决方案,它支持动态下发代码、so库以及资源,让应用能够在不需要重新安装的情况下实现更新。当然,你也可以使用 Tinker 来更新你的插件。Tinker对比市场上其他的一些框架:这里写图片描述
因此我在自己的项目中加入热修复功能时选择了Tinker。

一、接入

首先在我们项目的 build.gradle 文件中加入:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.3.3'
        /**热修复导入*/
        classpath "com.tinkerpatch.sdk:tinkerpatch-gradle-plugin:1.1.7"
    }
}

然后在app的build.gradle 文件中加入:

dependencies {
    provided("com.tinkerpatch.tinker:tinker-android-anno:1.7.11")
    compile("com.tinkerpatch.sdk:tinkerpatch-android-sdk:1.1.7")
}

将在下载的tinkerpatch.gradle文件放入自己项目的app目录下。当然在在app的build.gradle需要加入apply from: 'tinkerpatch.gradle' 将这个文件引用。

打开tinkerpatch.gradle文件,里面有几个参数需要注意

/**
 * TODO: 请按自己的需求修改为适应自己工程的参数
 */
def bakPath = file("${buildDir}/bakApk/")
def baseInfo = "app-1.1.0-0629-16-21-53"
def variantName = "release"

tinkerpatchSupport {
 reflectApplication = true
 appKey = "7d703361323c657d"

 /** 注意: 若发布新的全量包, appVersion一定要更新 **/
 appVersion = "1.0.0"
 }

当你第一次打包上线的时候需要appKey设置为你在官网上申请到的appkey,如果你的项目有自己的application那么你就需要将reflectApplication参数设置为true,appVersion尽量与你项目的versionCode保持一致,每次我们的项目新版本上线记得更新它。打包以后记得将bakApk文件夹里面的文件保存起来。剩下的bakPath、baseInfo、variantName在接下来会讲到。

因为我们的reflectApplication参数设置的是true,接下来我们创建一个简单的application:

public class MyApplication extends Application {
    private ApplicationLike tinkerApplicationLike;

    @Override
    public void onCreate() {
        super.onCreate();
        // 我们可以从这里获得Tinker加载过程的信息
        tinkerApplicationLike = TinkerPatchApplicationLike.getTinkerPatchApplicationLike();
        // 初始化TinkerPatch SDK, 更多配置可参照API章节中的,初始化SDK
        TinkerPatch.init(tinkerApplicationLike)
                .reflectPatchLibrary()
                .setPatchRollbackOnScreenOff(true)
                .setPatchRestartOnSrceenOff(true)
                .setFetchPatchIntervalByHours(3);

        TinkerPatch.with().fetchPatchUpdate(true);
    }
}

里面的TinkerPatch.with().fetchPatchUpdate(true);表示去检查是否有补丁需要更新。放在application的oncreate方法中意味着当我们每次启动app的时候就会去检查是否有补丁需要更新。

接下来在我们的activity中写一段比较简单的代码:

public class MainActivity extends AppCompatActivity {
    private TextView mTextView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    public void clickButton(View view) { 
               Toast.makeText(this, "这是测试,这里有BUG",Toast.LENGTH_LONG).show();
    }
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="20dp"
        android:text="热修复测试"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_horizontal"
        android:layout_marginTop="20dp"
        android:background="#00ff00"
        android:onClick="clickButton"
        android:padding="10dp"
        android:text="点击"/>
</LinearLayout>

这里我们使用 gradlew assembleRelease命令打一个正式包,然后我们会在app/build/目录下发现一个bakApk文件夹,在继续打开会有一个release文件夹,里面会有3个文件
这里写图片描述
将这个apk安装到手机上打开:
这里写图片描述
将bakApk目录下的
这里写图片描述 文件夹保存下来。
接下来我们修改源代码

 public void clickButton(View view) {
        Toast.makeText(this, "这是测试,这里BUG通过热修复修复了", Toast.LENGTH_LONG).show();
    }

将toast的内容改变一下。接下来就是如何打补丁包了:
这时候我们就需要修改上面提到的3个参数了。bakPath一般情况下不需要修改,baseInfo需要修改为刚刚你生成的bakApk包下的文件夹名,variantName如果你使用的是assembleRelease生成正式包就是release,否则就是bug。这3个参数是为了打补丁包时能够找到
这里写图片描述 这3个文件从而对比生成补丁包。改好以后就可以使用命令gradlew tinkerPatchRelease生成补丁包了。
然后找到
这里写图片描述
里面这个patch_signed_7zip.apk 就是我们需要使用的补丁包了。
打开Tinker官网
这里写图片描述
填写项目版本号。
这里写图片描述
选择发布补丁。这时候重启手机上的demo就会去下载补丁了,但补丁生效需要再次重启应用。
这里写图片描述
更多设置可以去http://www.tinkerpatch.com/Docs/api 查看。
Tinker简单接入到这就完成了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值