前言

最近项目集成了Tinker,开始认为集成会比较简单,但是在实际操作的过程中还是遇到了一些问题,本文就会介绍在集成过程大家基本会遇到的主要问题。
考虑一:后台的选取
目前后台功能可以通过三种方式实现:
1、自己搭建后台布丁下发系统
2、第三方提供的服务,目前如原微信simsun大神的个人tinkerpatch平台,目前出于内测阶段,暂时免费。后期应该会按下发量对app进行收费。
3、腾讯Bugly提供的服务,提供了热更新的下发后台,集成到了bugly的升级sdk中。免费。
根据公司的精神,我们选择了Bugly作为我们的方案,这个大家都懂得。
考虑二:多渠道打包的问题
我们有将近100个渠道,每个渠道需要一个不同的渠道号,按product flavor的方式打出来的包的dex都有差异。这样就造成100个渠道包的热更新就需要100个补丁,这对管理简直是一个灾难。Tinker也对这种问题给出了推荐的方案,那就是使用开源项目packer-ng-plugin,它的原理是将渠道信息写在apk文件的zip comment中,这样在多渠道打包时就不会影响dex的内容。
考虑三:资源混淆所造成的问题
目前项目使用了资源混淆项目AndResGuard,关于AndResGuard的介绍,可以参考文档AndResGuard[Android混淆工具AndResGuard]。
也正是引入了资源混淆,热更新和多渠道打包都必须依赖资源混淆后生成的apk包才行。所以我们对编译流程进行了整合。
**整合前**
编译:编译直接使用AndResGuard提供的命令resguardRelease生成即可。resguardRelease生成的apk文件是没有资源混淆的。
./gradlew resguardRelease
Tinker生成补丁:直接调用tinkerPatchRelease任务生成的Release文件没有进行资源混淆
./gradlew tinkerPatchRelease
多渠道打包:使用packer-ng的命令apkRelease生成多渠道文件没有进行资源混淆
./gradlew apkRelease
**整合后**
主要解决两个问题:
1、Tinker生成补丁的原始和新的apk,需要使用资源混淆后的apk
2、多渠道打包所使用的原始apk,需要使用资源混淆后的apk
针对问题1:
当使用resguardRelease进行编译,在编译完成后,将生成的apk文件、R文件、map文件和resouce map文件拷贝到${buildDir}/bakApk/resguard目录下;
当使用tinkerPatchRelease生成补丁时,在tinkerPatchRelease任务前加入resguardTask任务,这样生成补丁时使用的新旧apk都是资源混淆过的。核心的gradle代码如下:
android.applicationVariants.all { variant ->
/**
* task type, you want to bak
*/
def taskName = variant.name
tasks.all {
if (variant.buildType.name == 'release') {
if ("tinkerPatch${taskName.capitalize()}".equalsIgnoreCase(it.name)) {
// find resguard task
def resguardTask
tasks.all {
if (it.name.startsWith("resguard")) {
resguardTask = it
}
}
it.doFirst({
// change build apk path
it.buildApkPath = "${buildDir}/outputs/apk/AndResGuard_${project.getName()}-${taskName}/${project.getName()}-${taskName}_signed.apk"
})
// change task dependence to resguard task
it.dependsOn resguardTask
}
if ("resguard${taskName.capitalize()}".equalsIgnoreCase(it.name)) {
it.doLast {
copy {
def date = new Date().format("MMdd-HH-mm-ss")
from "${buildDir}/outputs/apk/AndResGuard_${project.getName()}-${taskName}/${project.getName()}-${taskName}_signed_7zip_aligned.apk"
into file(bakPath.absolutePath + "/resguard")
rename { String fileName ->
fileName.replace("${project.getName()}-${taskName}_signed_7zip_aligned.apk", "${project.getName()}-${taskName}-${date}.apk")
}
from "${buildDir}/outputs/mapping/${taskName}/mapping.txt"
into file(bakPath.absolutePath + "/resguard")
rename { String fileName ->
fileName.replace("mapping.txt", "${project.getName()}-${taskName}-${date}-mapping.txt")
}
from "${buildDir}/intermediates/symbols/${taskName}/R.txt"
into file(bakPath.absolutePath + "/resguard")
rename { String fileName ->
fileName.replace("R.txt", "${project.getName()}-${taskName}-${date}-R.txt")
}
from "${buildDir}/outputs/apk/AndResGuard_${project.getName()}-${taskName}/resource_mapping_${project.getName()}-release.txt"
into file(bakPath.absolutePath + "/resguard")
rename { String fileName ->
fileName.replace("resource_mapping_${project.getName()}-release.txt", "${project.getName()}-${taskName}-${date}-resource_mapping.txt")
}
}
}
}
}
}
针对问题2、在AS中使用apkRelease任务打包的方式不再适用,可直接使用packer-ng所提供的命令行方式进行生成渠道包,经过测试,100个渠道包的确在10s左右就能打完,速度相当之快。考虑到市场推广人员会打不同渠道包,后期可做一个简易工具提供给市场推广人员。
整合后操作:
编译:
./gradlew resguardRelease
生成的apk文件放在${app}\build\bakApk\resguard\目录下
打补丁包:
./gradlew tinkerPatchRelease ./gradlew generateManifestForReleaseTinkerPatch
最终生成的补丁放在${app}\build\outputs\patch\目录下
多渠道打包:
针对编译后生成的包,使用packer-ng提供的命令行操作即可
java -jar PackerNg-x.x.x.jar apkFile marketFile outputDir
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# android
# 热更新
# tinker开源
# tinker集成
# 微信Android热更新Tinker使用详解(星空武哥)
# Android微信Tinker热更新详细使用
# Android热修复Tinker接入及源码解读
# 放在
# 新和
# 目录下
# 命令行
# 市场推广
# 后期
# 都是
# 是一个
# 就会
# 都有
# 出了
# 大家都
# 就能
# 腾讯
# 可以通过
# 大神
# 这对
# 三种
# 考虑到
# 时就
相关文章:
如何快速搭建高效WAP手机网站?
如何通过wdcp面板快速创建网站?
重庆网站制作公司哪家好,重庆中考招生办官方网站?
Android使用GridView实现日历的简单功能
平台云上自主建站:模板化设计与智能工具打造高效网站
网站制作壁纸教程视频,电脑壁纸网站?
网站制作公司,橙子建站是合法的吗?
宝塔建站教程:一键部署配置流程与SEO优化实战指南
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
C++如何编写函数模板?(泛型编程入门)
定制建站策划方案_专业建站与网站建设方案一站式指南
seo网站制作优化,网站SEO优化步骤有哪些?
如何续费美橙建站之星域名及服务?
建站主机默认首页配置指南:核心功能与访问路径优化
南平网站制作公司,2025年南平市事业单位报名时间?
如何选择美橙互联多站合一建站方案?
黑客如何利用漏洞与弱口令入侵网站服务器?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
建站之星在线客服如何快速接入解答?
如何快速搭建高效简练网站?
如何将凡科建站内容保存为本地文件?
广德云建站网站建设方案与建站流程优化指南
建站主机无法访问?如何排查域名与服务器问题
建站主机选择指南:服务器配置与SEO优化实战技巧
如何制作算命网站,怎么注册算命网站?
网站制作服务平台,有什么网站可以发布本地服务信息?
建站之星后台密码遗忘或太弱?如何重置与强化?
大连 网站制作,大连天途有线官网?
建站之星×万网:智能建站系统+自助建站平台一键生成
如何在橙子建站中快速调整背景颜色?
建站之星安装提示数据库无法连接如何解决?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
如何在企业微信快速生成手机电脑官网?
制作网站的模板软件,网站怎么建设?
C#如何在一个XML文件中查找并替换文本内容
网站按钮制作软件,如何实现网页中按钮的自动点击?
如何用已有域名快速搭建网站?
建站之星多图banner生成与模板自定义指南
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
建站之星与建站宝盒如何选择最佳方案?
建站主机如何安装配置?新手必看操作指南
,柠檬视频怎样兑换vip?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
桂林网站制作公司有哪些,桂林马拉松怎么报名?
如何快速生成橙子建站落地页链接?
如何在Golang中实现微服务服务拆分_Golang微服务拆分与接口管理方法
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
如何在景安云服务器上绑定域名并配置虚拟主机?
*请认真填写需求信息,我们会在24小时内与您取得联系。