提问人:ackh 提问时间:8/29/2020 最后编辑:ackh 更新时间:9/7/2020 访问量:907
如何将多个apk文件转换为一个统一的捆绑包
How to convert multiple apk files into a unified bundle
问:
我的 Android 应用程序使用自定义本机库(用 C++ 编写),我为每个体系结构、 和 编译。支持 64 位本机库 ( / ) 的最早 Android 版本是 API 级别 21,但使用 32 位本机库 ( / ),我能够支持低至 Android API 级别 16 的设备。armeabi-v7a
arm64-v8a
x86
x86_64
arm64-v8a
x86_64
armeabi-v7a
x86
由于这些不同的 API 级别,并且由于编译的库变得非常大,我为每个架构创建了一个特定的 apk 文件。因此,最终我有 4 个不同的 apk 文件,这使我的应用程序能够在几乎所有 Android 设备上运行,直到 API 级别 16。这种方法有效,并记录在这里。我构建这些 apk 文件的文件如下所示:build.gradle
android
{
...
defaultConfig
{
minSdkVersion 16
targetSdkVersion 29
...
}
flavorDimensions "abi"
productFlavors
{
"ARM7"
{
dimension "abi"
ndk.abiFilters 'armeabi-v7a'
versionCode 160000 + android.defaultConfig.versionCode
versionNameSuffix "-arm32"
}
"ARM8"
{
dimension "abi"
ndk.abiFilters 'arm64-v8a'
minSdkVersion 21
versionCode 210000 + android.defaultConfig.versionCode
versionNameSuffix "-arm64"
}
"x86"
{
dimension "abi"
ndk.abiFilters 'x86'
versionCode 160000 + android.defaultConfig.versionCode
versionNameSuffix "-x86"
}
"x86-64"
{
dimension "abi"
ndk.abiFilters 'x86_64'
minSdkVersion 21
versionCode 210000 + android.defaultConfig.versionCode
versionNameSuffix "-x64"
}
}
...
}
现在,Google 推送了新的 Android Bundle 格式,文档目前指出
重要提示:在 2021 年下半年,新应用必须与 Android App Bundle 一起在 Google Play 上发布。如果新应用的容量大于 150 MB,则必须使用 Play 功能配送或 Play 素材资源配送。
因此,在某些时候,我将不得不将我的多 apk 方法转换为新的 Android Bundle 格式,但我基本上不知道这应该如何工作。虽然我的每个 apk 文件都包含自己的清单和自己的版本号,而 Android Bundle 包含一个统一的清单。minSdkVersion
我如何能够创建一个最终与我现有的 4 个 apk 文件具有相同效果的 Android Bundle?
答:
首先,有一种更简单的方法可以实现你已经拥有的东西——splits-on-abi(见 https://developer.android.com/studio/build/configure-apk-splits)。此方法为您处理 versionCode 等。
如该页面上所述 - 现在最好将 app bundle 用于此目的。App bundle 有两个主要目的 - 缩小(/优化)下载,并允许动态模块。第一位使得 Google Play 基本上会占用包含所有内容的巨大应用程序包,并制作一个较小的 apk,仅包含请求的特定设备所需的内容。只有这个最小的apk才会下载到设备上。
因此,总结一下:您将一个大型应用程序包上传到 Google Play,其中包含适用于所有设备的所有内容。然后,Google Play 会构建仅包含所需内容的最小 apk,并仅将这些 apk 下载到设备上。从技术上讲,Google Play会创建一个下载的文件,这本质上是一个带有多个.apk文件的zip文件,遵循以下格式:但这主要只是一个您无需担心的实现细节。.apks
您可以使用 bundletool (https://github.com/google/bundletool/releases) 模拟和试用 app bundle 的工作方式(格式),根据 Google 的说法,这是 Google Play 用来处理 app bundle 文件的工具。.aab
此外,您可以删除口味。这些现在只会碍事。
评论
minSdkVersion
minSdkVersion
.apk
.aab
.apks
评论