当前位置:首页 > 科技  > 软件

VasDolly服务端打渠道包教程

来源: 责编: 时间:2023-08-09 23:03:00 257观看
导读本文我将给大家介绍一个 apk 打包工具 VasDolly 的使用介绍、原理以及如何在服务端接入 VasDolly 进行服务端打渠道包操作。使用介绍图片VasDolly 是一个快速多渠道打包工具,同时支持基于 V1 和 V2 签名进行多渠道打包

本文我将给大家介绍一个 apk 打包工具 VasDolly 的使用介绍、原理以及如何在服务端接入 VasDolly 进行服务端打渠道包操作。22V28资讯网——每日最新资讯28at.com

使用介绍

图片图片22V28资讯网——每日最新资讯28at.com

VasDolly 是一个快速多渠道打包工具,同时支持基于 V1 和 V2 签名进行多渠道打包。插件本身会自动检测 Apk 使用的签名类别,并选择合适的多渠道打包方式,对使用者来说完全透明。22V28资讯网——每日最新资讯28at.com

项目地址:https://github.com/Tencent/VasDolly22V28资讯网——每日最新资讯28at.com

项目构建方式:gradle22V28资讯网——每日最新资讯28at.com

VasDolly 官方对于 VasDolly 的定位是安卓端多渠道打包工具,由安卓开发接入安卓项目中使用。VasDolly 官方还提供了 jar 包工具通过命令行方式进行打包操作。22V28资讯网——每日最新资讯28at.com

在安卓项目中要使用 VasDolly,你需要先在你的项目中添加对 VasDolly 插件和 helper 类库的依赖。具体步骤如下:22V28资讯网——每日最新资讯28at.com

  • 在根工程的 build.gradle 中,添加对打包插件的依赖:
dependencies {    classpath 'com.android.tools.build:gradle:7.0.3'classpath 'com.tencent.vasdolly:plugin:3.0.6'}
  • 在主 App 工程的 build.gradle 中,添加对 VasDolly 插件的引用:
apply plugin: 'com.tencent.vasdolly'
  • 在主 App 工程的 build.gradle 中,添加读取渠道信息的 helper 类库依赖:
dependencies {    api 'com.tencent.vasdolly:helper:3.0.6'}
  • 配置渠道列表。你可以通过两种方式配置渠道列表,一种是在 gradle.properties 文件中指定渠道文件名称,该渠道文件必须位于根工程目录下,一行一个渠道信息。例如:
channel_file=channel.txt

其中 channel.txt 文件内容如下:22V28资讯网——每日最新资讯28at.com

yingyongbaogamecenterxiaomihuaweioppovivo

另一种方式是在 channel 或者 rebuildChannel 属性中通过 channelFile 属性指定渠道文件,一行一个渠道信息。例如:22V28资讯网——每日最新资讯28at.com

channel {    //指定渠道文件    channelFile = file("/Users/leon/Downloads/testChannel.txt")}
  • 通过 Gradle 生成多渠道包。你可以选择直接编译生成多渠道包,或者根据已有基础包重新生成多渠道包。如果你选择直接编译生成多渠道包,你需要配置渠道文件、渠道包的输出目录和渠道包的命名规则。例如:
channel {    //指定渠道文件    channelFile = file("/Users/leon/Downloads/testChannel.txt")    //多渠道包的输出目录,默认为new File (project.buildDir,"channel")    outputDir = new File(project.buildDir,"xxx")    //多渠道包的命名规则,默认为:$ {appName}-$ {versionName}-$ {versionCode}-$ {flavorName}-$ {buildType}-$ {buildTime}    apkNameFormat ='$ {appName}-$ {versionName}-$ {versionCode}-$ {flavorName}-$ {buildType}'//快速模式:生成渠道包时不进行校验(速度可以提升10倍以上,默认为false)    fastMode = false//buildTime的时间格式,默认格式:yyyyMMdd-HHmmss    buildTimeDateFormat = 'yyyyMMdd-HH:mm:ss'//低内存模式(仅针对V2签名,默认为false):只把签名块、中央目录和EOCD读取到内存,不把最大头的内容块读取到内存,在手机上合成APK时,可以使用该模式    lowMemory = false}

然后,通过 gradle channelDebug 或 gradle channelRelease 命令分别生成 Debug 和 Release 的多渠道包。如果你选择根据已有基础包重新生成多渠道包,你需要配置渠道文件、基础包的路径和渠道包的输出目录。例如:22V28资讯网——每日最新资讯28at.com

rebuildChannel {    //指定渠道文件    channelFile = file("/Users/leon/Downloads/testReChannel.txt")    // 已有APK文件地址(必填),如new File (project.rootDir, "/baseApk/app_base.apk"),文件名中的base将被替换为渠道名    baseApk = new File (project.rootDir, "/baseApk/app_base.apk")    //默认为new File (project.buildDir, "rebuildChannel")    outputDir = new File(project.buildDir,"yyy")    //快速模式:生成渠道包时不进行校验(速度可以提升10倍以上,默认为false)    fastMode = false//低内存模式(仅针对V2签名,默认为false):只把签名块、中央目录和EOCD读取到内存,不把最大头的内容块读取到内存,在手机上合成APK时,可以使用该模式    lowMemory = false}

然后,通过 gradle rebuildChannel 命令生成多渠道包。22V28资讯网——每日最新资讯28at.com

原理

VasDolly 实现原理官方讲解地址:https://github.com/Tencent/VasDolly/wiki/VasDolly%E5%AE%9E%E7%8E%B0%E5%8E%9F%E7%90%8622V28资讯网——每日最新资讯28at.com

VasDolly 的原理是利用 APK 文件的特殊结构,将渠道信息写入到 APK 文件的空白区域,从而实现无损的多渠道打包。具体来说,VasDolly 根据 APK 文件使用的签名类别,选择不同的多渠道打包方式。22V28资讯网——每日最新资讯28at.com

如果 APK 文件使用的是 V1 签名,那么 VasDolly 会将渠道信息写入到 APK 文件的 Zip Comment 区域。Zip Comment 是 Zip 文件格式中的一个字段,用于存储一些注释信息,通常不会被解压缩工具或者系统解析。因此,将渠道信息写入到 Zip Comment 区域,不会影响 APK 文件的完整性和安全性。同时,由于 Zip Comment 区域位于 APK 文件的末尾,所以写入渠道信息的速度非常快,只需要修改一个字节的偏移量即可。22V28资讯网——每日最新资讯28at.com

如果 APK 文件使用的是 V2 或者 V3 签名,那么 VasDolly 会将渠道信息写入到 APK Signing Block 区域。APK Signing Block 是 V2 或者 V3 签名引入的一个新区域,用于存储签名相关的数据。每个数据都有一个 ID 来标识其类型,例如 0x7109871a 表示 V2 签名数据。VasDolly 会使用一个自定义的 ID(0x71777777)来标识渠道信息,并将其写入到 APK Signing Block 区域。由于这个区域不会被系统解析,所以不会影响 APK 文件的安全性。同时,由于这个区域位于中央目录和 EOCD 之前,所以写入渠道信息的速度也很快,只需要修改两个字节的偏移量即可。22V28资讯网——每日最新资讯28at.com

通过这种方式,VasDolly 可以实现在不重新签名和对齐的情况下,快速生成多个渠道包。在应用运行时,可以通过 VasDolly 提供的 helper 类库来读取渠道信息,并进行相应的处理。22V28资讯网——每日最新资讯28at.com

服务端接入 VasDolly 教程

安卓接入了 VasDolly 之后,就该我们服务端出手了,服务端如果能实现渠道打包的操作,运营每次上新渠道就不需要再找安卓进行新渠道打包,运营直接在后台上传母包,选定渠道后即可获取对应的渠道包,可以节约大家的时间,避免耗费人力在渠道打包这一步。由此可见,服务端进行渠道打包操作还是有必要的。22V28资讯网——每日最新资讯28at.com

意外发现

一开始我是想用官方提供的 jar 包工具,通过命令行调用的方式来实现服务端打渠道包的,官方提供的 readme 文档如下,22V28资讯网——每日最新资讯28at.com

图片图片22V28资讯网——每日最新资讯28at.com

但是由于博主项目是使用容器环境部署,要是用命令行打包的话,需要引入 VasDolly jar 包并且挂载都容器中,感觉比较麻烦。就想能不能直接引入 VasDolly 依赖来实现打包操作。22V28资讯网——每日最新资讯28at.com

于是我在 maven 中央仓库搜索了 com.tencent.vasdolly 关键字后,有了如下发现,22V28资讯网——每日最新资讯28at.com

图片图片22V28资讯网——每日最新资讯28at.com

可以看到 VasDolly 虽然是一个 Gradle 项目,但是官方也提供了部分模块的在 Maven 中的 pom 坐标。22V28资讯网——每日最新资讯28at.com

查看 VasDolly 仓库代码,发现官方定义了 write 模块,22V28资讯网——每日最新资讯28at.com

图片图片22V28资讯网——每日最新资讯28at.com

进入其中,发现了 readme 内容如下,22V28资讯网——每日最新资讯28at.com

图片图片22V28资讯网——每日最新资讯28at.com

Ok,到这里,我们发现其实官方提供了 pom 依赖接入,直接使用 ChannelWriter 即可实现渠道打包的操作。22V28资讯网——每日最新资讯28at.com

具体教程

  • 在后端 maven 项目中引入 VasDolly 的 pom 依赖,当前最新依赖版本如下,
<dependency>      <groupId>com.tencent.vasdolly</groupId>      <artifactId>writer</artifactId>      <version>3.0.6</version>  </dependency>  <dependency>      <groupId>com.tencent.vasdolly</groupId>      <artifactId>common</artifactId>      <version>3.0.6</version>  </dependency>  <dependency>      <groupId>com.tencent.vasdolly</groupId>      <artifactId>reader</artifactId>      <version>3.0.6</version>  </dependency>
  • 然后我们就可以利用 ChannelWriter 类实现渠道打包操作,ChannelWriter 类提供的 V2 签名打渠道包方法如下:
public static void addChannelByV2(File apkFile, String channel, boolean lowMemory) throws IOException, SignatureNotFoundException {      addChannelByV2(apkFile, apkFile, channel, lowMemory);  }

addChannelByV2 方法的 apkFile 参数是母包文件,channel 参数是需要打包的渠道名称,lowMemory 参数是 V2 签名打渠道包提供的参数,默认为 false。该方法会直接将我们传入的 apkFile 母包修改成 V2 签名的渠道包。如此一来,我们就获得了我们需要的渠道包了。22V28资讯网——每日最新资讯28at.com

  • 除了利用 ChannelWriter 类实现打渠道包操作,我们还可以利用 ChannelReader 类来实现读取渠道包的渠道参数,ChannelReader 类提供的 V2 签名渠道包参数读取方法如下:
public static String getChannelByV2(File channelFile) {      System.out.println("try to read channel info from apk : " + channelFile.getAbsolutePath());      return IdValueReader.getStringValueById(channelFile, -2012129793);  }

getChannelByV2 方法的 channelFile 参数就是打包后渠道包,该方法会返回渠道包中的渠道信息。22V28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-5156-0.htmlVasDolly服务端打渠道包教程

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: SpringBoot3进阶用法,你学会了吗?

下一篇: 图形编辑器开发:一些会用到的简单几何算法

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • K60至尊版狂暴引擎2.0加持:超177万跑分斩获性能第一

    K60至尊版狂暴引擎2.0加持:超177万跑分斩获性能第一

    Redmi的后性能时代战略发布会今天下午如期举办,在本次发布会上,Redmi公布了多项关于和联发科的深度合作,以及新机K60 Ultra在软件和硬件方面的特性,例如:“K60 至尊版,双芯旗舰
  • 石头智能洗地机A10 Plus体验:双向自清洁治好了我的懒癌

    石头智能洗地机A10 Plus体验:双向自清洁治好了我的懒癌

    一、前言和介绍专为家庭请假懒人而生的石头科技在近日又带来了自己的全新旗舰新品,石头智能洗地机A10 Plus。从这个产品名上就不难看出,这次石头推出的并不是常见的扫地机器
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • 一个注解实现接口幂等,这样才优雅!

    一个注解实现接口幂等,这样才优雅!

    场景码猿慢病云管理系统中其实高并发的场景不是很多,没有必要每个接口都去考虑并发高的场景,比如添加住院患者的这个接口,具体的业务代码就不贴了,业务伪代码如下:图片上述代码有
  • 阿里大调整

    阿里大调整

    来源:产品刘有媒体报道称,近期淘宝天猫集团启动了近年来最大的人力制度改革,涉及员工绩效、层级体系等多个核心事项,目前已形成一个初步的&ldquo;征求意见版&rdquo;:1、取消P序列
  • iQOO Neo8系列今日官宣:首发天玑9200+ 全球安卓最强芯!

    iQOO Neo8系列今日官宣:首发天玑9200+ 全球安卓最强芯!

    在昨日举行的的联发科新一代旗舰芯片天玑9200+的发布会上,iQOO官方也正式宣布,全新的iQOO Neo8系列新品将全球首发搭载这款当前性能最强大的移动平台
  • 朋友圈可以修改可见范围了 苹果用户可率先体验

    朋友圈可以修改可见范围了 苹果用户可率先体验

    近日,iOS用户迎来微信8.0.27正式版更新,除了可更换二维码背景外,还新增了多项实用功能。在新版微信中,朋友圈终于可以修改可见范围,简单来说就是已发布的朋友圈
  • 电博会上海尔智家模拟500平大平层,还原生活空间沉浸式体验

    电博会上海尔智家模拟500平大平层,还原生活空间沉浸式体验

    电博会为了更好地让参展观众真正感受到智能家居的绝妙之处,海尔智家的程传岭先生同样介绍了展会上海尔智家的模拟500平大平层,还原生活空间沉浸式体验。程传
Top