加载补丁dex Tinker采用的是下发差分包,然后在手机端合成全量的dex文件进行加载。...而在build.gradle配置中的tinkerPatch dex.loader = ["com.tencent.tinker.loader.*", "tinker.sample.android.app.SampleApplication...他们两个的区别是TinkerInstaller只有在Tinker.install过之后才能使用,否则会抛出异常。...tinker = Tinker.with(context); libname = libname.startsWith("lib") ?...() && tinker.isTinkerLoaded()) { TinkerLoadResult loadResult = tinker.getTinkerLoadResultIfPresent
本系列 Tinker 源码解析基于 Tinker v1.9.12 自动生成TinkerApplication 接入 Tinker 第一步就是改造 Application 。...查看 Tinker 工程可以发现在 tinker-android-anno 下面有一个 AnnotationProcessor @Override public Set...{ public %APPLICATION%() { super(%TINKER_FLAGS%, "%APPLICATION_LIFE_CYCLE%", "%TINKER_LOADER_CLASS...() { super(7, "tinker.sample.android.app.SampleApplicationLike", "com.tencent.tinker.loader.TinkerLoader...那么 Tinker 是什么时候加载的呢?
文章目录 一、Tinker 简介 二、 源码资源 一、Tinker 简介 ---- https://github.com/Tencent/tinker/tree/dev/tinker-android 页面的...tinker-android 是 Tinker 的核心项目 , tinker-android-anno 是注解处理器 , 自定义 Application 时 , 不需要继承 Application...: https://github.com/Tencent/tinker Tinker 官方 Wiki 地址 : https://github.com/Tencent/tinker/wiki...Tinker 接入指南 : https://github.com/Tencent/tinker/wiki/Tinker-接入指南 Tinker 官方示例 : https://github.com/...Tencent/tinker/tree/master/tinker-sample-android
——维基百科 本文介绍了Tinker的接入方式,更加详细的内容可以查阅官方文档 介绍 Tinker是微信官方的Android热补丁解决方案,它支持动态下发代码、So库以及资源,让应用能够在不需要重新安装的情况下实现更新...当然,你也可以使用Tinker来更新你的插件。 Tinker所支持的功能如下 ? 来自官方Github Tinker热补丁方案·不仅支持类、So以及资源的替换,它还是2.X-7.X的全平台支持。...的其他库都无需再引用 provided("com.tencent.tinker:tinker-android-anno:1.7.7") compile("com.tinkerpatch.sdk...的其他库都无需再引用 provided("com.tencent.tinker:tinker-android-anno:1.7.7") compile("com.tinkerpatch.sdk...热修复 Tinker已知的问题: Tinker不支持修改AndroidManifest.xml,Tinker不支持新增四大组件; 由于Google Play的开发者条款限制,不建议在GP渠道动态更新代码
国际惯例先贴地址 Tinker开源地址:https://github.com/Tencent/tinker 玩过Dota的童鞋都知道 地精修补匠的大招,我们希望发版本可以像它一样做到无限刷新。...这里有个问题很关键,Tinker的亮点使用了QQ空间插桩的效果来规避Android的校验机制。NUWA分析里面有具体介绍。.../tree/dev/tinker-android/tinker-android-loader/src/main/java/com/tencent/tinker/loader ?...2016-10-08 09:51:30屏幕截图.png 从类名可以知道Tinker处理了类的加载,资源的加载以及so库的加载.我们的关注点在类加载上,根据经验判断,TinkerLoader类是类加载模块的入口...由于微信发布的Android_N混合编译与对热补丁影响解析,所以在tinker中完全使用了新的Dex,那样既不出现Art地址错乱的问题,在Dalvik也无须插桩。
本系列 Tinker 源码解析基于 Tinker v1.9.12 前一篇讲到了利用反射执行的是 TinkerLoader.tryLoad 方法 tryLoad @Override public...// 检查 tinker 是否开启 if (!...目录,检查目录是否存在 // tinker 获取 tinker 目录,/data/data/tinker.sample.android/tinker File patchDirectoryFile...注意,这里补丁文件的 tinker id 是当前补丁基准包的 tinker id ,也就是有 bug 的基准包 tinker id 。...另外一个 new tinker id 是补丁加载完成后的 tinker id ,就是 bug 修复后的 tinker id 。
基本步骤 1、注册Tinker账号并新建项目 2、配置gradle和代码 3、生成基准包 4、修复Bug 5、生成补丁包 6、发布补丁包 Tinker做了什么 1、1-2步是APP开发的基本步骤,完成1...-3步,那么你的APP就集成了Tinker。...集成Tinker后,Tinker会根据各个版本的配置信息去自动加载补丁。可配置强制更新,也可配置轮询更新。 2、第3步则是保留一个之前版本副本,用于后面生成补丁。为什么要这样做?...一、注册Tinker账号 这个就不说了,Tinker注册和新建项目都好简单,也没有什么需要注意的。...的其他库都无需再引用 annotationProcessor("com.tinkerpatch.tinker:tinker-android-anno:${TINKER_VERSION}")
Tinker的现状 首先在回顾过去之前,我想先简单的介绍一下Tinker的现状。 开源的现状 Tinker的开源地址为:https://github.com/Tencent/tinker。...不仅如此,在应用宝Top 1000的应用中,有60多个应用已经使用了Tinker,使用第三方平台接入Tinker并持续使用的应用也超过1000个。...此外我们也看到有一些基于Tinker衍生的开源项目,例如tinker-dex-dump 、tinker-manager、TinkerPatch等。...五、Oppo/Vivo 异步dex2oat问题 这个问题在Tinker 1.7.6版本发现,并在Tinker 1.7.7版本解决。...Tinker这个项目我们的确花了比较多的心血,特别是在2017年Tom和我都有其他一些高优先级的工作,很多Tinker的工作都会放到晚上或者周末。
Tinker的现状 首先在回顾过去之前,我想先简单的介绍一下Tinker的现状。 开源的现状 Tinker的开源地址为:https://github.com/Tencent/tinker。...不仅如此,在应用宝Top 1000的应用中,有60多个应用已经使用了Tinker,使用第三方平台接入Tinker并持续使用的应用也超过1000个。...此外我们也看到有一些基于Tinker衍生的开源项目,例如tinker-dex-dump 、tinker-manager、TinkerPatch等。...五、Oppo/Vivo 异步dex2oat问题 这个问题在Tinker 1.7.6版本发现,并在Tinker 1.7.7版本解决。...微信Tinker的一切都在这里,包括源码(一) Tinker Dexdiff算法解析 ART下的方法内联策略及其对Android热修复方案的影响分析 Tinker MDCC会议 slide DexDiff
Tinker的现状 首先在回顾过去之前,我想先简单的介绍一下Tinker的现状。 开源的现状 Tinker的开源地址为:https://github.com/Tencent/tinker。...不仅如此,在应用宝Top 1000的应用中,有60多个应用已经使用了Tinker,使用第三方平台接入Tinker并持续使用的应用也超过1000个。 ?...此外我们也看到有一些基于Tinker衍生的开源项目,例如tinker-dex-dump 、tinker-manager、TinkerPatch等。...五、Oppo/Vivo 异步dex2oat问题 这个问题在Tinker 1.7.6版本发现,并在Tinker 1.7.7版本解决。...微信热补丁Tinker分享 微信Tinker的一切都在这里,包括源码(一) Tinker Dexdiff算法解析 ART下的方法内联策略及其对Android热修复方案的影响分析 Tinker MDCC
前言 Tinker简介 Tinker是微信官方的Android热补丁解决方案,它支持动态下发代码、So库以及资源,让应用能够在不需要重新安装的情况下实现更新。...Tinker已知问题 1) Tinker不支持修改AndroidManifest.xml,Tinker不支持新增四大组件; 2) 由于Google Play的开发者条款限制,不建议在GP渠道动态更新代码...Tinker接入指南 2.1....:tinker-android-anno:1.7.7') //tinker的核心库 compile('com.tencent.tinker:tinker-android-lib:1.7.7...//apply tinker插件 apply plugin: 'com.tencent.tinker.patch' tinker参数配置 同样是在项目的app的gradle文件app/build.gradle
本系列 Tinker 源码解析基于 Tinker v1.9.12 前面讲到了 Tinker 安装补丁的流程,现在就详细地来看下 dex 合成的代码。...tryRecoverDexFiles protected static boolean tryRecoverDexFiles(Tinker manager, ShareSecurityCheck checker...TinkerLog.w(TAG, "patch recover, extractDiffInternals fail"); return false; } // 把 tinker...{ directory.mkdirs(); } //I think it is better to extract the raw files from apk Tinker...this.patchedDex.writeTo(out); } 而 DexPatchApplier 里面合流操作的代码是需要根据 Tinker 的 DexDiff 算法来的。
利用Tinker我们不仅可以用做 bugfix,甚至可以替代功能的发布。Tinker已运行在微信的数亿Android设备上。...Tinker原理图 1-2:原理图 Tinker流程图 1-3:Tinker 流程图 二、Tinker相关网站 微信Tinker Patch官网:Tinker Patch Github地址:tinker...三、接入Tinker步骤 基础步骤 注册Tinker账户、添加APP、记录AppKey,添加 APP 版本、 发布补丁。...配置Tinker版本信息 我们使用配置文件去配置Tinker版本信息,易于统一版本和后面更换版本,如图: 2-1 gradle.properties文件 代码如下: TINKER_VERSION=1.9.6...Tinker接入 一次集成使用Tinker热更新的体验 Tinker爬坑之路 Android实战——Tinker的集成和使用
本系列 Tinker 源码解析基于 Tinker v1.9.12 前面讲到了 Tinker 安装补丁的流程,现在就详细地来看下 dex 合成的代码。...tryRecoverDexFiles protected static boolean tryRecoverDexFiles(Tinker manager, ShareSecurityCheck checker...TinkerLog.w(TAG, "patch recover, extractDiffInternals fail"); return false; } // 把 tinker...this.patchedDex.writeTo(out); } 而 DexPatchApplier 里面合流操作的代码是需要根据 Tinker 的 DexDiff 算法来的。...另外,dodola 写了一篇 Tinker Dexdiff算法解析,有需要的同学可以看下。 那么 dex 合成的流程就到这吧。
看一下接下来的函数调用: public static void onReceiveUpgradePatch(Context context, String patchLocation) { Tinker.with...void onHandleIntent(Intent intent) { final Context context = getApplicationContext(); Tinker...tinker = Tinker.with(context); tinker.getPatchReporter().onPatchServiceStart(intent);//*****...中实现 public boolean tryPatch(Context context, String tempPatchPath, PatchResult patchResult) { Tinker...manager = Tinker.with(context); final File patchFile = new File(tempPatchPath); /
Tinker简单接入 Tinker 是微信官方的 Android 热补丁解决方案,它支持动态下发代码、So 库以及资源,让应用能够在不需要重新安装的情况下实现更新。...添加Tinker插件和库 在root项目根目录的build.gradle下 classpath 'com.tencent.tinker:tinker-patch-gradle-plugin:1.9.1...:tinker-android-lib:1.9.1") { changing = true } annotationProcessor("com.tencent.tinker:tinker-android-anno...:tinker-android-anno:1.9.1') compile('com.tencent.tinker:tinker-android-lib:1.9.1') } 2...., TINKER_ID_VALUE' 'NEW_TINKER_ID, NEW_TINKER_ID_VALUE' * package meta file gen. path is
本系列 Tinker 源码解析基于 Tinker v1.9.12 加载dex补丁流程 TinkerDexLoader.loadTinkerJars 判断一下 dexList 和 classLoader...文件都通过的话,加入到 legalFiles 集合中 legalFiles.add(file); } 如果是 art 虚拟机并且是 Android N 及以上的环境,会另外加上 tinker_classN.apk
walle的配置以及对应的结果 本文主要讲了Walle的多渠道打包,更多强大的功能出门左拐 ---- 续Tinker 还不知道什么是Tinker?怎么用?...请看【Android】热修复——Tinker(入门) 请看完以上内容 终于说到Tinker了。刚打完用来发布的渠道包,可是如果要打补丁包的话,好像还少了点什么。用来打补丁包的材料... 一个apk?...tinker需要用到的包 有了基包后,就可以打补丁包了。接下来 ? 我要开始装...额...打补丁包了 打补丁包 接下来内容跟上一篇的差不多,就不详细讲了。...明细过程请看【Android】热修复——Tinker(入门) 配置基包 ? 配置基包路径 生成补丁包 ?...印象中,发布的时候应该是可以过滤渠道的,回头我再去看看Tinker的文档。
一、多渠道打包 tinker官方文档推荐用walle或者packer-ng-plugin来辅助打渠道包。...发布补丁包 回到Tinker后台,选中我们开始新建的项目,补丁下发->添加APP版本。然后上传刚刚的patch_signed_7zip.apk。...当我们在正式环境需要混淆代码:设置 minifyEnabled true,添加混淆: -keep public class * implements com.tencent.tinker.loader.app.ApplicationLike...---- 到这里Tinker的多渠道集成成功。
本系列 Tinker 源码解析基于 Tinker v1.9.12 补丁合成流程 下发的补丁包其实并不能直接加载,因为补丁包只是差异包,需要和本地的 dex 、资源等进行合成后,得到全量的 dex 才能被完整地使用...tinker = Tinker.with(context); tinker.getPatchReporter().onPatchServiceStart(intent); if (intent...首先是对 Tinker 自身开关的校验,然后对补丁文件的合法性进行校验。...manager = Tinker.with(context); final File patchFile = new File(tempPatchPath); if (!...ShareConstants.DEFAULT_DEX_OPTIMIZE_PATH); } 再接下来,就是把补丁包复制到私有目录中 具体的路径也就是之前在加载补丁中遇到的 /data/data/应用包名/tinker
领取专属 10元无门槛券
手把手带您无忧上云