微信热修复Tinker使用

Tinker是微信前段时间开源的Android热补丁方案,它支持动态下发代码、So库以及资源,让应用能够在不需要重新安装的情况下实现更新。当然,你也可以使用Tinker来更新你的插件。
同时,还有许多其他公司使用的热补丁方案,如比如QZone,AndFix,Dexposed等等;网上有许多他们之间的比较文章,大家可以参考后选择适合自己的。本文就简单介绍下Tinker的使用。

添加依赖

这一步很简单,照着 github接入指南 上做就好了。

  • 首先在项目的build.gradle中添加 tinker-patch-gradle-plugin 依赖
    buildscript { 
        dependencies {
             classpath ('com.tencent.tinker:tinker-patch-gradle-plugin:1.7.1')
        }
    }
  • 然后在app的gradle文件 app/build.gradle添加tinker的库依赖以及apply tinker的gradle插件.

    dependencies {
          //可选,用于生成application类  
          compile('com.tencent.tinker:tinker-android-anno:1.7.1') 
          //tinker的核心库 
          compile('com.tencent.tinker:tinker-android-lib:1.7.1')
     }
    ...
    ...
    //apply tinker插件
    apply plugin: 'com.tencent.tinker.patch'
  • 在app/builde.gradle文件的dependencies外面添加一些配置 :

    tinkerPatch {  
       //有问题的apk的地址  
        oldApk = "F://app_bug.apk"  
        ignoreWarning = false  
        useSign = true  
        buildConfig{  
        tinkerId = "1.0"  
    }  
    packageConfig{  
          configField("TINKER_ID", "1.0")  
     }  
    dex{  
          dexMode = "jar"  
          pattern = ["classes*.dex", "assets/secondary-dex-?.jar"]  
          loader = ["com.tencent.tinker.loader.*", "com.tinkertest.Application"] 
      }  
    lib{  
          pattern = ["lib/armeabi/*.so","lib/arm64-v8a/*.so","lib/armeabi-v7a/*.so","lib/mips/*.so","lib/mips64/*.so","lib/x86/*.so","lib/x86_64/*.so"]  
      } 
    res{  
          pattern = ["res/*", "assets/*", "resources.arsc", "AndroidManifest.xml"]  
          largeModSize = 100  
      }  
    sevenZip{  
          zipArtifact = "com.tencent.mm:SevenZip:1.1.10"  
      }
自定义Application类

1.写一个SimpleAppLike类继承自DefaultApplicationLike,并添加注解。使用注解生成application类demo.com.tinkerdemo.SimpleApp,并将其添加到manifest中


1111.png

2.重写SimpleAppLike里面的onBaseContextAttached(Context base)方法,并添加registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks  callback)方法。

@Override
public void onBaseContextAttached(Context base) { 
   super.onBaseContextAttached(base); 
   MultiDex.install(base);    
   TinkerInstaller.install(this);
}
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
public void registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callback) {
    getApplication().registerActivityLifecycleCallbacks(callback);
}

3.在SimpleAppLike中实现你Application 类需要实现的内容。

简单使用

1.先将你的app运行到手机上,并复制一份到第一步中的oldApk目录
2.修改app的代码,例如修改文字,Toast等,在实际中即修复bug。
2.在android-studio右边点开gradle窗口,选择tinkerPatchDebug,并运行生成补丁包


222.png


3.在app->build->outputs->tinkerPatch目录下选择patch_signed_7zip.apk;并拷到指定手机目录(指定的运行目录,见步骤5)


333.png


4.在app中执行更新,退出后再进入app,就能看到修改后的效果。
5.图中path为指定目录,在执行TinkerInstaller.onReceiverUpgradePatch()修复时需要传入的path即为存放生成的补丁包的位置。


123.png
结语

以上介绍了Tinker的使用方法,作者是个菜鸟,难免有讲的不好的地方,请见谅。
示例Demo

这是Tinker的项目地址,也有很好的讲解,可以深入学习。

官方demo:tinker-sample-android 
注:官方demo 需要作为project单独打开

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值