tinkerPatch {

/**

  • necessary,default ‘null’

  • the old apk path, use to diff with the new apk to build

  • add apk from the build/bakApk

*/

oldApk = getOldApkPath()

/**

  • optional,default ‘false’

  • there are some cases we may get some warnings

  • if ignoreWarning is true, we would just assert the patch process

  • case 1: minSdkVersion is below 14, but you are using dexMode with raw.

  •     it must be crash when load.
    
  • case 2: newly added Android Component in AndroidManifest.xml,

  •     it must be crash when load.
    
  • case 3: loader classes in dex.loader{} are not keep in the main dex,

  •     it must be let tinker not work.
    
  • case 4: loader classes in dex.loader{} changes,

  •     loader classes is ues to load patch dex. it is useless to change them.
    
  •     it won't crash, but these changes can't effect. you may ignore it
    
  • case 5: resources.arsc has changed, but we don’t use applyResourceMapping to build

*/

ignoreWarning = true

/**

  • optional,default ‘true’

  • whether sign the patch file

  • if not, you must do yourself. otherwise it can’t check success during the patch loading

  • we will use the sign config with your build type

*/

useSign = true

/**

  • optional,default ‘true’

  • whether use tinker to build

*/

tinkerEnable = buildWithTinker()

/**

  • Warning, applyMapping will affect the normal android build!

*/

buildConfig {

/**

  • optional,default ‘null’

  • if we use tinkerPatch to build the patch apk, you’d better to apply the old

  • apk mapping file if minifyEnabled is enable!

  • Warning:

  • you must be careful that it will affect the normal assemble build!

*/

applyMapping = getApplyMappingPath()

/**

  • optional,default ‘null’

  • It is nice to keep the resource id from R.txt file to reduce java changes

*/

applyResourceMapping = getApplyResourceMappingPath()

/**

  • necessary,default ‘null’

  • because we don’t want to check the base apk with md5 in the runtime(it is slow)

  • tinkerId is use to identify the unique base apk when the patch is tried to apply.

  • we can use git rev, svn rev or simply versionCode.

  • we will gen the tinkerId in your manifest automatic

*/

tinkerId = “1.0”/getTinkerIdValue()/

/**

  • if keepDexApply is true, class in which dex refer to the old apk.

  • open this can reduce the dex diff file size.

*/

keepDexApply = false

}

dex {

/**

  • optional,default ‘jar’

  • only can be ‘raw’ or ‘jar’. for raw, we would keep its original format

  • for jar, we would repack dexes with zip format.

  • if you want to support below 14, you must use jar

  • or you want to save rom or check quicker, you can use raw mode also

*/

dexMode = “jar”

/**

  • necessary,default ‘[]’

  • what dexes in apk are expected to deal with tinkerPatch

  • it support * or ? pattern.

*/

pattern = [“classes*.dex”,

“assets/secondary-dex-?.jar”]

/**

  • necessary,default ‘[]’

  • Warning, it is very very important, loader classes can’t change with patch.

  • thus, they will be removed from patch dexes.

  • you must put the following class into main dex.

  • Simply, you should add your own application {@code tinker.sample.android.SampleApplication}

  • own tinkerLoader, and the classes you use in them

*/

loader = [

//use sample, let BaseBuildInfo unchangeable with tinker

“tinker.sample.android.app.BaseBuildInfo”

]

}

lib {

/**

  • optional,default ‘[]’

  • what library in apk are expected to deal with tinkerPatch

  • it support * or ? pattern.

  • for library in assets, we would just recover them in the patch directory

  • you can get them in TinkerLoadResult with Tinker

*/

pattern = [“lib//.so”]

}

res {

/**

  • optional,default ‘[]’

  • what resource in apk are expected to deal with tinkerPatch

  • it support * or ? pattern.

  • you must include all your resources in apk here,

  • otherwise, they won’t repack in the new apk resources.

*/

pattern = [“res/", "assets/”, “resources.arsc”, “AndroidManifest.xml”]

/**

  • optional,default ‘[]’

  • the resource file exclude patterns, ignore add, delete or modify resource change

  • it support * or ? pattern.

  • Warning, we can only use for files no relative with resources.arsc

*/

ignoreChange = [“assets/sample_meta.txt”]

/**

  • default 100kb

  • for modify resource, if it is larger than ‘largeModSize’

  • we would like to use bsdiff algorithm to reduce patch file size

*/

largeModSize = 100

}

packageConfig {

/**

  • optional,default ‘TINKER_ID, TINKER_ID_VALUE’ ‘NEW_TINKER_ID, NEW_TINKER_ID_VALUE’

  • package meta file gen. path is assets/package_meta.txt in patch file

  • you can use securityCheck.getPackageProperties() in your ownPackageCheck method

  • or TinkerLoadResult.getPackageConfigByName

  • we will get the TINKER_ID from the old apk manifest for you automatic,

  • other config files (such as patchMessage below)is not necessary

*/

configField(“patchMessage”, “tinker is sample to use”)

/**

  • just a sample case, you can use such as sdkVersion, brand, channel…

  • you can parse it in the SamplePatchListener.

  • Then you can use patch conditional!

*/

configField(“platform”, “all”)

/**

  • patch version via packageConfig

*/

configField(“patchVersion”, “1.0”)

}

//or you can add config filed outside, or get meta value from old apk

//project.tinkerPatch.packageConfig.configField(“test1”, project.tinkerPatch.packageConfig.getMetaDataFromOldApk(“Test”))

//project.tinkerPatch.packageConfig.configField(“test2”, “sample”)

/**

  • if you don’t use zipArtifact or path, we just use 7za to try

*/

sevenZip {

/**

  • optional,default ‘7za’

  • the 7zip artifact path, it will use the right 7za with your platform

*/

zipArtifact = “com.tencent.mm:SevenZip:1.1.10”

/**

  • optional,default ‘7za’

  • you can specify the 7za path yourself, it will overwrite the zipArtifact value

*/

// path = “/usr/local/bin/7za”

}

}

List flavors = new ArrayList<>();

project.android.productFlavors.each {flavor ->

flavors.add(flavor.name)

}

boolean hasFlavors = flavors.size() > 0

/**

  • bak apk and mapping

*/

android.applicationVariants.all { variant ->

/**

  • task type, you want to bak

*/

def taskName = variant.name

def date = new Date().format(“MMdd-HH-mm-ss”)

tasks.all {

if (“assemble${taskName.capitalize()}”.equalsIgnoreCase(it.name)) {

it.doLast {

copy {

def fileNamePrefix = “ p r o j e c t . n a m e − {project.name}- project.name−{variant.baseName}”

def newFileNamePrefix = hasFlavors ? “ f i l e N a m e P r e f i x " : " {fileNamePrefix}" : " fileNamePrefix":"{fileNamePrefix}-${date}”

def destPath = hasFlavors ? file(" b a k

tinker热修复gradle接入,androidstudio开发app实例相关推荐

  1. tinker热修复gradle接入

    本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 2021-04-29更新,最近在复习热修复,发现我的老代码不行了,所以把这篇文章更新一下 本篇是gradle接入 tinker的gi ...

  2. tinker热修复gradle接入,app软件开发课程

    keyAlias 'china' keyPassword '123456' storeFile file('D:/work/release.jks') storePassword '123456' } ...

  3. Launcher3 安装App加载显示过程分析,androidstudio开发app实例

    "Initializing LauncherAppState in the absence of LauncherProvider"); } Log.v(Launcher.TAG, ...

  4. 【错误记录】集成 Tinker 热修复报错 ( No such property: variantConfiguration for class: .ApplicationVariantData )

    文章目录 一.报错信息 二.解决方案 一.报错信息 接入 Tinker 热修复 , 使用如下 Gradle 插件 , // Tinker 的 tinker-patch-gradle-plugin 插件 ...

  5. android Tinker 热修复 乐固加固后友盟打多渠道包之后的补丁失效

    继上一篇 android tinker 热修复使用及注意事项  生成了热修复的补丁; 现在的需求是这样的,我想把这个包用腾讯乐固加固,然后生成多渠道包,希望这个补丁能修复所有这些渠道的包,经过测试,直 ...

  6. 微信tinker 热修复

    Tinker 是微信官方的Android热补丁解决方案,它支持动态下发代码.So库以及资源,让应用能够在不需要重新安装的情况下实现更新.当然,你也可以使用Tinker来更新你的插件. github:h ...

  7. Tinker热修复初探

    听说热修复已经很久了,但这是第一次尝试去应用它.所以我对其它各种热修复也没什么了解,这里仅仅记下如何使用Tinker热修复. 对于Tinker热修复的介绍和问题这里也不写了,因为官方文档已经有了,戳这 ...

  8. 腾讯Tinker 热修复 Andriod studio 3.0 配置和集成(二)多渠道打包和补丁发布

    腾讯Tinker 热修复 Andriod studio 3.0 多渠道打包和发布补丁方式推荐 本文说明 在之前我已经分享了Tinker 热修复的 Andriod studio3.0 初次配置和集成,时 ...

  9. (十四)Tinker 热修复原理及手写实现

    版权声明:本文为博主原创文章,未经博主允许不得转载. 本文纯个人学习笔记,由于水平有限,难免有所出错,有发现的可以交流一下. 一.热修复 热补丁方案有很多,其中比较出名的有阿里的 AndFix.美团的 ...

最新文章

  1. 985 CV 找不到工作? 4 点诚恳建议
  2. Windows 8 / 8.1 禁用驱动签名最详细图文教程
  3. idea无法创建javaclass文件
  4. boost::log模块测试样板,用于检查每个公共标头是否都是独立的并且没有任何缺失的 #includes
  5. 上班骚扰男同事被抓到......
  6. 壁式框架内力计算_4种类型剪力墙的计算要点
  7. 数据库接口实验--php实现--
  8. lockdir 密码破解
  9. 国内外银行核心系统之间的差异
  10. 各位大佬,别再拿人工智能当春药了!
  11. jq chosen下拉列表被遮挡
  12. 2021ICPC网络赛第一场【A Busiest Computing Nodes】【D Edge of Taixuan】
  13. 笔记本联想(Lenovo)G40-70M加装内存和SSD固态硬盘
  14. 12个有趣的c面试题目
  15. STM32学习笔记---OLED页寻址方式
  16. Windows常用shell命令
  17. 空心三角形(图形的输出)c语言
  18. acwing算法基础课——差分
  19. 有意思的概率——似然值似然函数及最大似然估计讲解
  20. 如何让win XP实现自动登陆

热门文章

  1. 分布式架构的演变之路
  2. 进入MySQL的两种方法
  3. 【ChatGPT提问技巧案例】之影视分镜头脚本撰写
  4. 一、VS2015update2环境下DirectX11编程说明(2016.5.5更新)
  5. UE特效案例 —— 武器附魔
  6. iframe嵌套页面下载问题
  7. 解决vscode开发小程序的标签识别问题
  8. 无压工作艺术读书笔记
  9. HTML+CSS培训教案(一)
  10. 小波变换原理_小波变换教程(一):为什么需要小波变换