设为首页 加入收藏

TOP

服务端apk打包教程(一)
2023-08-06 07:49:32 】 浏览:72
Tags:apk 包教程

本文我将给大家介绍一个 apk 打包工具 VasDolly 的使用介绍、原理以及如何在服务端接入 VasDolly 进行服务端打渠道包操作。

使用介绍

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

项目地址:https://github.com/Tencent/VasDolly

项目构建方式:gradle

VasDolly 官方对于 VasDolly 的定位是安卓端多渠道打包工具,由安卓开发接入安卓项目中使用。VasDolly 官方还提供了 jar 包工具通过命令行方式进行打包操作。

在安卓项目中要使用 VasDolly,你需要先在你的项目中添加对 VasDolly 插件和 helper 类库的依赖。具体步骤如下:

  • 在根工程的 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 文件内容如下:

yingyongbao
gamecenter
xiaomi
huawei
oppo
vivo

另一种方式是在 channel 或者 rebuildChannel 属性中通过 channelFile 属性指定渠道文件,一行一个渠道信息。例如:

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 的多渠道包。
如果你选择根据已有基础包重新生成多渠道包,你需要配置渠道文件、基础包的路径和渠道包的输出目录。例如:

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 命令生成多渠道包。

原理

VasDolly 实现原理官方讲解地址:https://github.com/Tencent/VasDolly/wiki/VasDolly实现原理

VasDolly 的原理是利用 APK 文件的特殊结构,将渠道信息写入到 APK 文件的空白区域,从而实现无损的多渠道打包。具体来说,VasDolly 根据 APK 文件使用的签名类别,选择不同的多渠道打包方式。

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

如果 APK 文件使用的是 V2 或者 V3 签名,那么 VasDolly 会将渠道信息写入到 APK Signing Block 区域。APK Signing Block 是 V2 或者 V3 签名引入的一个新区域,用于存储签名相关的数据。每个数据都有一个 ID 来标识其类型,例如 0x7109871a 表示 V2 签名数据。VasDolly 会使用一个自定义的 ID(0x71777777)来标识渠道信息,并将其写入到 APK Signing Block 区域。由

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Sprint Boot学习路线6 下一篇JAVA SE基础《八》 ---- 面对对象..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目