Android热修复(微信tinker的集成)

  • 微信tinker的介绍:Tinker是微信前段时间开源的Android热补丁方案,它支持动态下发代码、So库以及资源,让应用能够在不需要重新安装的情况下实现更新。当然,你也可以使用Tinker来更新你的插件。
    同时,还有许多其他公司使用的热补丁方案,如比如QZone,AndFix,Dexposed等等;
  • 微信tinker的优缺点
/TinkerQZoneAndFixRobust
类替换yesyesnono
So替换yesnonono
资源替换yesyesnono
全平台支持yesyesyesyes
即时生效nonoyesyes
性能损耗较小较大较小较小
补丁包大小较小较大一般一般
开发透明yesyesnono
复杂度较低较低复杂复杂
gradle支持yesnonono
Rom体积较大较小较小较小
成功率较高较高一般最高
  • 微信已知的问题:
    由于原理与系统限制,Tinker有以下已知问题:
    1.Tinker不支持修改AndroidManifest.xml,Tinker不支持新增四大组件;
    2.由于Google Play的开发者条款限制,不建议在GP渠道动态更新代码;
    3.在Android N上,补丁对应用启动时间有轻微的影响;
    4.不支持部分三星android-21机型,加载补丁时会主动抛出”TinkerRuntimeException:checkDexInstall failed”;
    5.对于资源替换,不支持修改remoteView。例如transition动画,notification icon以及桌面图标。
  • 如何集成:
  • 在项目的build.gradle中添加 tinker-patch-gradle-plugin 的依赖:
   dependencies {
        classpath "com.tencent.tinker:tinker-patch-gradle-plugin:${TINKER_VERSION}"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
  • 然后在app的gradle文件app/build.gradle,我们需要添加tinker的库依赖以及apply tinker的gradle插件.

dependencies {
    // 依赖multiDex库
    compile 'com.android.support:multidex:1.0.1'
    //可选,用于生成application类
    provided ("com.tencent.tinker:tinker-android-anno:${TINKER_VERSION}"){changing = true}
    //Tinker的核心库
    compile ("com.tencent.tinker:tinker-android-lib:${TINKER_VERSION}"){changing = true}
}
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.写一个AppContextLike类继承自DefaultApplicationLike,并添加注解。使用注解生成application类AppContext,并且可以在这个类里面编写你原来Application需要实现的逻辑代码

@DefaultLifeCycle(
        application = ".AppContext",
        flags = ShareConstants.TINKER_ENABLE_ALL,
        loadVerifyFlag = false
)
public class AppContextLike extends DefaultApplicationLike {

    public AppContextLike(Application application, int tinkerFlags, boolean tinkerLoadVerifyFlag, long applicationStartElapsedTime, long applicationStartMillisTime, Intent tinkerResultIntent) {
        super(application, tinkerFlags, tinkerLoadVerifyFlag, applicationStartElapsedTime, applicationStartMillisTime, tinkerResultIntent);
    }

    @Override
    public void onBaseContextAttached(Context base) {
        super.onBaseContextAttached(base);
        //必须安装MultiDex的更新!
        MultiDex.install(base);
        //安装Tinker后加载multiDex
        TinkerManager.installTinker(this);

        ApplicationContext.application = getApplication();
        ApplicationContext.context = getApplication();

        TinkerManager.setTinkerApplicationLike(this);
        TinkerManager.initFastCrashProtect();
        TinkerManager.setUpgradeRetryEnable(true);
    }

    @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
    public void registerActivityLifecycleCallbacks(Application.ActivityLifecycleCallbacks callback) {
        getApplication().registerActivityLifecycleCallbacks(callback);
    }
}

2.添加到manifest中

  **android:name=".tinker.AppContext"**
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

3.先将你的app运行到手机上并修改gradle里面oldapk的路径

这里写图片描述

4.修改app的代码,例如修改文字,Toast等,在实际中即修复bug。

这里写图片描述

5.在android-studio右边点开gradle窗口,选择tinkerPatchDebug,并运行生成补丁包

这里写图片描述

6.将补丁包放到手机的SD中

这里写图片描述

好啦,到这里微信热修复的集成就完成啦,如果有疑问,可以在下方留言,或者加我的QQ844974121 ,注明:微信热修复!
最后提醒大家不要忘记添加权限哦!(7.0的系统需要手动设置权限!)

https://github.com/mengjingbo/TinkerApp 源码demo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值