Tinker增量更新二

Android应用动态更新:Tinker热修复实战详解 Tinker作为腾讯开源的Android热修复框架,基于dex分包与类加载机制,实现线上Bug的动态修复。其核心采用全量Dex替换 + 增量更新策略,通过dexposed或在运行时合并补丁dex,避免了方法数溢出与Art底层限制问题。相比AndFix的即时方法替换,Tinker具备更好的兼容性与稳定性,支持代码、资源、So库的全面修复。// Tinker典型初始化入口补丁通过差分算法(bsdiff)生成极小体积patch包,经签名校验后由客户端合成并重启生效。 阅读详情

Tinker用gradle配置热修复:

在上文中的配置一样,把那些配置完后,执行以下的操作,完成grdle配置热修复:

在工程的gradle中添加:

dependencies {
    classpath ('com.tencent.tinker:tinker-patch-gradle-plugin:1.9.2')
}

在app的gradle中添加插件:

apply plugin: 'com.tencent.tinker.patch'

添加完后sync new一下,可能会出个错,别担心,下面还没做完,

在build文件夹下建个bakapk文件夹(这个在以后会有用)

在app的gradle中最下方添加各种属性配置:

def bakPath = file("${buildDir}/bakapk/")   //用到了上面创建的文件夹

ext{
    tinkerOldApkPath = "${bakPath}/"
    tinkerEnabled = true;
    //不开启混淆
    //tinkerApplyMappingPath = "${bakPath}/"
    tinkerApplyResourcePath = "${bakPath}/"
    //多渠道打包
    //tinkerBuildFlavorDirectory = "${bakPath}/app-1018-17-32-47"
}

def getOldApkPath() {
    return ext.tinkerOldApkPath
}
//是否使用Tinker
def buildWithTinker() {
    return ext.tinkerEnabled
}

def getApplyMappingPath() {
    return ext.tinkerApplyMappingPath
}

def getApplyResourceMappingPath() {
    return ext.tinkerApplyResourcePath
}

def getTinkerIdValue() {
    return "tinker_id_b168b32"
}
//多渠道打包
/*def getTinkerBuildFlavorDirectory() {
    return ext.tinkerBuildFlavorDirectory
}*/

tinkerPatch{
    tinkerEnable = buildWithTinker()
    oldApk = getOldApkPath()
    ignoreWarning = false
    useSign = true

    buildConfig{
        //不开启混淆不用他
        //applyMapping = getApplyMappingPath()
        applyResourceMapping = getApplyResourceMappingPath()
        tinkerId = getTinkerIdValue()
        keepDexApply = false                //分包 暂时不用 太小
        isProtectedApp = false              //加固  暂时不加
    }

    dex{
        dexMode = "jar"
        pattern = ["classes*.dex",
                   "assets/secondary-dex-?.jar"]
        //全路径Application,写自己的
        loader = ["com.bwie.dongchangqi.tinkertest.MyTinkerApplication"]
    }

    lib{
        pattern = ["lib/*/*.so"]
    }

    res{
        pattern = ["res/*", "assets/*", "resources.arsc", "AndroidManifest.xml"]
        ignoreChange = ["assets/sample_meta.txt"]
        largeModSize = 100
    }

    packageConfig{
        configField ("version_name","1")
        configField ("change_log","添加了一些新功能")
    }

}

继续往下添加:

/*------------此脚本在最下面复制 比较固定 用于生产老的apk文件--------------------*/
List<String> flavors = new ArrayList<>();
project.android.productFlavors.each { flavor ->
    flavors.add(flavor.name)
}
boolean hasFlavors = flavors.size() > 0
def date = new Date().format("MMdd-HH-mm-ss")

android.applicationVariants.all { variant ->

    def taskName = variant.name

    tasks.all {
        if ("assemble${taskName.capitalize()}".equalsIgnoreCase(it.name)) {

            it.doLast {
                copy {
                    def fileNamePrefix = "${project.name}-${variant.baseName}"
                    def newFileNamePrefix = hasFlavors ? "${fileNamePrefix}" : "${fileNamePrefix}-${date}"

                    def destPath = hasFlavors ? file("${bakPath}/${project.name}-${date}/${variant.flavorName}") : bakPath
                    from variant.outputs.first().outputFile
                    into destPath
                    rename { String fileName ->
                        fileName.replace("${fileNamePrefix}.apk", "${newFileNamePrefix}.apk")
                    }

                    from "${buildDir}/outputs/mapping/${variant.dirName}/mapping.txt"
                    into destPath
                    rename { String fileName ->
                        fileName.replace("mapping.txt", "${newFileNamePrefix}-mapping.txt")
                    }

                    from "${buildDir}/intermediates/symbols/${variant.dirName}/R.txt"
                    into destPath
                    rename { String fileName ->
                        fileName.replace("R.txt", "${newFileNamePrefix}-R.txt")
                    }
                }
            }
        }
    }
}

然后在android{}中添加:

android {
    /*------------配置一个正式的签名文件 (可以快捷生产)------------------------*/
    signingConfigs {
        config {
            keyAlias 'key0'   //钥匙编号
            keyPassword '123456'   //密码
            storeFile file('E:/BigOne/TinkerTest/app/tinkerdcq.jks')   //自己的jks文件地址
            storePassword '123456'   //密码
        }
    }
}
以上配置完后:


添加以上的东西,



添加如上东西,

完之后,配置就完成了,

在文档二中新建的bakapk文件夹用来放生成的apk和R文件的

,生成老的akp和R和新的apk和R

 

操作在下边


以上操作生成老的apk和R文件,双击选中的地方,会自动生成,

可以在Terminal(命令行)输入 gradle assembleRelease    代替双击操作

生成老的apk后还有R文件,


把老的apk名字和R的名字放入到如上位置.


如上操作,在添加了某些类,或者新的功能后,双击选中的地方,生成新的apk和R文件,

完成之后会自动比较老apk和新的apk生成补丁,补丁会自动放在


如上选中项是补丁,放入规定的文件夹下,如果是项目中的话,这个补丁会自动下载到规定的手机文件夹中.最后修复.


AutoSAR实战:手把手教你配置PNC(Partial Network Cluster)实现精准休眠与唤醒 本文详细介绍了如何在AutoSAR中配置PNC(Partial Network Cluster)实现精准休眠与唤醒,通过DaVinci Configurator工具逐步指导,结合ComM模块的协同调试,优化车载电子系统的能耗管理。文章包含实战步骤、常见错误排查及功耗优化数据,适合汽车电子开发工程师参考。 阅读详情

相关推荐

Rocky Linux 9.2:利用LVM动态调整/home与/根分区空间分配

本文详细介绍了在Rocky Linux 9.2系统中,如何利用LVM(逻辑卷管理器)动态调整/home与根分区(/)的空间分配。针对根分区空间不足而/home分区闲置的常见问题,文章提供了从检查磁盘布局、备份数据、卸载分区、调整逻辑卷大小到重建文件系统的完整操作步骤,并重点说明了XFS与EXT4文件系统在缩容时的不同处理方法,帮助系统管理员安全、在线地实现存储空间的灵活调配。

weixin_29271263的博客 177

Android 热修复 Tinker Gradle Plugin解析

一、概述 前面写了两篇分析了tinker的loader部分源码以及dex diff/patch算法相关解析,那么为了保证完整性,最后一篇主要写tinker-patch-gradle-plugin相关了。 (距离看的时候已经快两个月了,再不写就忘了,赶紧记录下来) 注意: 本文基于1.7.7 前两篇文章分别为: Android 热修复 Tinker接入及源码浅析 An

Hongyang 4万+

TJA1445/TJA1465 CAN收发器硬件设计与软件配置实战指南

控制器局域网(CAN)总线是汽车电子和工业控制领域实现电子控制单元(ECU)间可靠通信的核心技术。其工作原理是将数字信号转换为差分信号进行抗干扰传输,技术价值在于构建稳定、高效的分布式实时控制系统。随着汽车电子架构向域集中式演进,对CAN总线的通信速率、网络复杂度和静态功耗提出了更高要求,这催生了支持CAN FD协议和智能电源管理的新一代高速CAN收发器。在车载网关、域控制器及工业网络节点等应用场景中,NXP的TJA1445和TJA1465系列收发器凭借其部分组网(Partial Networking)和选

weixin_29655587的博客 405

如何应对Android面试官 -> Android 如何实现增量更新,Tinker patch包生成核心原理

本章主要讲解 Dex 格式分析以及增量更新实现原理;

IT_Android的博客 1256

OpenClaw 快速安装与本地应用实战 —— 每一步都有截图加详细说明,本地AI助手,让打工人也有下属

《OpenClaw 2026开源智能体框架10分钟快速部署指南》摘要:本文提供OpenClaw最新版全平台部署方案,重点解决三大核心问题:1)环境配置优化,通过一键脚本实现3-8分钟快速安装(含国内镜像加速方案);2)初始化配置详解,包含大模型绑定(智普AI/本地模型)与5个高频技能安装;3)实战演示文件自动整理任务。同时总结6类常见故障解决方案,涵盖权限、端口占用等典型问题,确保用户从安装到首个自动化任务落地全程无障碍。特别强调Windows需管理员权限、禁用中文路径等关键注意事项,实现"安装即

weixin_43538316的博客 807

LS-DYNA中的流固耦合

在LS-DYNA中对流固耦合问题的求解提供了两种方法,ALE流固耦合和基于ICFD的流固耦合。本文将对两种方法的各自特点进行分析。 ALE方法的流固耦合 适用范围 ALE求解器主要用于层流。ALE求解器也不是完全的NS求解器,因此不考虑边界层的影响,比如阻力。流体粘性效应仅通过材料模型获得,也就是*mat_null的MU。ale求解器是为了求解高压高速度梯度的短时问题而开发的。该求解器并不适用于求解低压力梯度问题比如声学,也不适用于长时间问题(秒的尺度甚至更长)。时间的限制是显式时...

m0_69812055的博客 8556

Android Tinker 基本使用教程

转载:Android Tinker 基本使用教程 为什么使用Tinker 当前市面的热补丁方案有很多,其中比较出名的有阿里的AndFix、美团的Robust以及QZone的超级补丁方案。但它们都存在无法解决的问题,这也是正是我们推出Tinker的原因。 这个Tinker官方给出的一个图表: 1.怎么使用: Tinker 的使用还是比较简单的,这是Tinker官方的github链接 : https://github.com/Tencent/tinker. 官方上面的文档很久没更新了,可以直接下载他最新的de

明耀的博客 2080

有限时间 vs 固定时间 vs 预定时间滑模:稳定性分析与仿真验证方法对比(中)

有限时间滑模控制(FTSMC)和固定时间滑模控制(FixTSMC)是两种重要的控制策略,旨在实现系统状态的快速收敛。FTSMC通过设计滑模面和控制律,确保系统状态在有限时间内收敛到原点,但其收敛时间与初始状态相关。FixTSMC则进一步优化,使收敛时间与初始状态无关,适用于高动态环境,具有更强的鲁棒性和更平滑的控制信号。两种方法均通过李雅普诺夫函数证明其稳定性,并通过仿真验证其有效性。FixTSMC在工程应用中更为可靠,尤其适合安全关键系统。

Lyajpunov的博客 3224

Tinker热修复框架详解:Android应用补丁生成,提升应用稳定性

Tinker不仅可以修复代码中的 Bug,还可以进行资源、so 库等的热更新,从而避免频繁发布新的 APK 给用户带来的麻烦。Tinker是腾讯开源的Android热修复框架,通过动态更新 和修复 应用中的代码、资源和本地库文件,无需用户重新安装 APK,便可以及时修复应用中的 bug,优化用户体验。Tinker 是腾讯开源的Android热修复框架,通过动态更新和修复应用中的代码、资源和本地库文件,无需用户重新安装 APK,便可以及时修复应用中的 bug,优化用户体验。

刘 争 3266

海洋科学—物理海洋学 第五章 海洋环流

本章是基于《海洋科学导论》,但里面涉及到的重要的公式推导是专门拎出来推的,主要借鉴董昌明老师的《物理海洋学导论》,其中有一些多出来的推导,会在更新完整个物理海洋学之后重新拿出来一一讲解,最后开一个番外篇

qq_58518586的博客 1万+

OpenClaw Docker 安装与部署教程,环境隔离不冲突技术指南

本文介绍了使用Docker容器化部署OpenClaw的完整教程。首先通过流程图详细说明了Docker环境检测流程,包括系统支持性检查、Docker安装状态验证、版本检测和服务配置等步骤。然后提供了Windows、macOS和Linux(Ubuntu/CentOS)系统下的Docker安装指南,涵盖从下载、安装到权限配置的全过程。最后介绍了OpenClaw官方镜像的拉取方法以及自定义镜像构建的Dockerfile示例。该教程适用于开发和生产环境,利用Docker实现环境隔离和快速部署。

一键难忘的博客 987

Android 集成Tinker的Gradle配置文件

Tinker

yturg的博客 533

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Android热更新实践:Tinker接入指南

Android热更新实践:Tinker接入指南在Android开发中,热更新是一种非常有用的技术,它允许开发者在不发布新版本的情况下修复bug或更新应用内容。Tinker是腾讯开源的Android热更新框架,它提供了一套完整的热更新解决方案。本文将详细介绍如何将Tinker集成到你的Android项目中。1. 准备工作在开...

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 1670

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Bugly热更新原理深度解析:Tinker框架与Bugly的完美结合

Android应用开发中,热更新技术一直是开发者关注的焦点。Bugly热更新作为腾讯推出的成熟解决方案,通过深度集成Tinker框架,为开发者提供了稳定、高效的热修复能力。本文将深入解析Bugly热更新的工作原理,帮助您理解这一强大工具的实现机制。 ## 🔍 Bugly热更新核心原理 Bugly热更新基于微信开源的Tinker框架,通过**差分补丁**技术实现应用的无缝更新。其核心思想是:当

gitblog_00913的博客 894

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

接入Tinker热修复和踩坑

前言 公司最近项目上线后总是遇见各种问题或bug,而我最近就一直在背黑锅,幸亏最近不用上Google Play了,赶紧加上热更新来脱离苦海吧,谁知道接入Tinker的过程中也踩了将近一周的坑,哎...一言难尽 为什么选择Tinker我就对比了也懒得说了(其实是因为隔壁阿里收费) 而且需要注意,中间很多版本不要使用最新的,要使用我写的,不然有问题了找都找不到(我在这中间查,试,测,中间用了不知道多长时间) 正文 此次接入Tinker是直接用的Tinker,没有使用Bugly的方式 官方地址 不多

lt的博客 2663

集成tinker热更新

前段时间尝试了一下增量更新,以及hotfix,今天写了一个demo集成腾讯bugly的tinker热更新https://bugly.qq.com/v2/index; step1、添加依赖: 1. 工程中的dependencies依赖:// tinker gradle插件 classpath ('com.tencent.tinker:tinker-patch-gradle-plu

lin_t_s的博客 1282

tinker-manager与Tencent Tinker深度整合:技术原理剖析

tinker-manager是微信Tinker补丁管理的核心解决方案,集成了后端代码与客户端SDK,为Android应用提供高效的热修复能力。通过与Tencent Tinker的深度整合,开发者可以轻松实现应用漏洞的快速修复,无需用户重新下载安装应用。 ## 一、Tinker热修复技术核心优势 Tencent Tinker作为业界领先的热修复框架,其核心优势在于支持全量Dex、Library和

gitblog_00096的博客 472

Tinker增量更新模版一

首先,使用Tinker的命令行工具类生成补丁,这个方式很简便. 在app的gradle中导入依赖: //可选,用于生成application类 provided 'com.tencent.tinker:tinker-android-anno:1.9.2' //tinker的核心库 compile 'com.tencent.tinker:tinker-android-lib:1.9.2' /

dongchangqi95的博客 456

Android热修复,热更新 ,增量更新,插件化之间的区别

感谢这位老哥:https://www.jianshu.com/p/704cac3eb13d 热修复: 强调的是修改线上版本的bug,用技术去实现不更新整个apk的条件下,修改掉bug。 涉及到类的加载。比如可以new 一个BaseDexClassLoader动态的去加载修复apk的dex文件,再合并到正在运行PathClassLoader中(这只是其中一种思路)目前主流的热修复框架阿里And...

yang_niuxxx的博客 9063

Android热修复神器Tinker:无需重启即可更新UI资源的终极指南

在移动应用开发中,修复线上bug是个头疼的问题。传统方案需要重新打包、发布、用户下载安装,整个过程耗时耗力。而**Tinker热修复框架**的出现彻底改变了这一现状,让Android应用能够在不重启的情况下实现代码、资源和库文件的实时更新!🚀 ## 🔥 什么是Tinker热修复? Tinker是腾讯开源的一款Android热修复解决方案,它支持**dex文件**、**动态库**和**资源文

gitblog_00650的博客 789

Android使用腾讯Bugly中的Tinker进行热更新详解

前言:本人之前没有使用过和集成过热更新tinker,决定自己看文档尝试一下,在项目中配置一下。在看了文档之后,文档中介绍了两种集成实现热更新的方式,其中一对我来说就是比较麻烦的一种,要修改自己项目中的已经写好的Application类,由于一些原因,我不想修改这个类,而且觉得这种方式写起来麻烦,就选择了写更少的代码去实现。这里我是完全按照文档来的,但是对文档进行了多次热更新尝试中间有时成功有时失败...

文艺范的博客 625

Android So库热更新终极指南:Tinker Native代码动态替换完整解决方案

在Android应用开发中,Native代码(So库)的热更新一直是个技术难点。😅 Tinker作为腾讯开源的强大热修复框架,提供了完整的So库热更新解决方案,让你的应用能够在不重新安装APK的情况下动态替换Native代码!🚀 ## 什么是So库热更新? So库(Shared Object)是Android平台上使用C/C++编写的动态链接库。当你的应用需要修复Native代码中的bug

gitblog_00197的博客 748

android热更新框架nuwa,Android热更新技术——Tinker、nuwa、AndFix、Dexposed

一、热修复技术作用线上app BUG紧急修复,不重新发版,不重新安装,在线远程修复问题二、局限性与适用场景补丁只能针对单一客户端版本,随着版本差异变大补丁体积也会增大;补丁不能支持所有的修改,例如AndroidManifest;补丁无论对代码还是资源的更新成功率都无法达到100%。既然补丁技术无法完全代替升级,那它适合使用在哪些场景呢?1.轻量而快速的升级2.远端调试3.数据统计4.其他(Inst...

weixin_33304686的博客 1360

增量升级,热更新/动态部署- 如微信 Tinker研究与集成(差分算法)

  热更新、热修复、增量升级、热补丁等。   动态部署的方案被提了出来,比如iOS下的JSPatch, waxPatch,Android下的Dexpose, AndFix, ClassLoader,都是比较成熟Hot Patch动态部署解决方案。这些方案的思路都是通过下载远程服务器的代码来动态更新本地的代码行为。  React-Native则属于另一种动态部署的方案,其核心原理在于通过JavaSc...

ShareUs的专栏 2034

android热补丁作用,Android热补丁更新 Tinker 接入详细教程

前言相信不少Android的小伙伴们都会遇到过APP上线之后才发现还有Bug,或者哪个地方还需要小改动,难道这个时候为了一点小改动重新编译,重新发布新版本吗?使用Tinker来解决Android APP的热补丁更新,实现修改.java代码、替换.so、替换资源后免发布版本,更新APP的代码。Tinker是什么?为什么选择Tinker?Tinker 是一个开源项目(Tinker GitHub链接),...

weixin_29790285的博客 560

JNI基础之基于bsdiff库的增量更新

前言 传统的APP更新,每一次产品迭代,都需要用户下载新的完整apk安装包后,重新安装。当apk的体积达到一定程度时,这种更新就会特别的浪费时间和流量,同时也影响用户体验。针对这一问题,目前市场上出现了很多热更新、热修复等技术如阿里的Anfix、腾讯的Tinker框架等。其中,腾讯的Tinker框架实现原理上,就用到了开源的文件差分工具bsdiff/bspatch。我们今天就来介绍一下基于bsd...

青风飘雨的博客 841
上一篇: Tinker增量更新模版一
下一篇: gradle中的
百分之99的爱
博客等级 码龄9年 19粉丝 95原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值