「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战」。
此分包非彼分包,此处指的是按照指定的维度分别打包不同的apk,如:分辨率、ABI、语言等。
当一个APP需要尽可能支持多的目标设备,通常需要许多文件来支持不同的屏幕分辨率、ABI等。如果打包APK不加以限制,就会导致APK文件特别大。所以gradle提供了splits工具,可以按照我们指定维度分别打包apk。
使用
在build.gradle文件的android代码块中添加:
android {
...
splits {
// Configures multiple APKs based on screen density.
density {
// Configures multiple APKs based on screen density.
enable true
// Specifies a list of screen densities Gradle should not create multiple APKs for.
exclude "ldpi", "xxhdpi", "xxxhdpi"
// Specifies a list of compatible screen size settings for the manifest.
compatibleScreens 'small', 'normal', 'large', 'xlarge'
}
}
}
针对屏幕密度配置多个APK
如需针对不同的屏幕密度创建单独的 APK,请在 splits 代码块内添加一个 density 代码块。
splits {
// 根据屏幕分辨率密度维度生成多个APK
density {
// 是否起作用,false可以关闭
enable true
// 不包含的屏幕密度,设置之后不会对此屏密度单独生成apk
exclude "ldpi", "xxhdpi", "xxxhdpi"
// reset()与include通常一起使用,reset清空屏密度列表
reset()
// 为指定屏密度生成apk
include "ldpi", "xxhdpi"
// Specifies a list of compatible screen size settings for the manifest.
compatibleScreens 'small', 'normal', 'large', 'xlarge'
}
}
针对 ABI 配置多个 APK
如需针对不同的 ABI 创建单独的 APK,请在 splits 代码块内添加一个 abi 代码块。
abi {
// 同上
enable true
// By default all ABIs are included, so use reset() and include to specify that we only
// want APKs for x86 and x86_64.
// 清空ABI列表,配合include使用
//默认会支持所有ABI列表,所以需要清空列表
reset()
// Specifies a list of ABIs that Gradle should create APKs for.
include "x86", "x86_64"
// 是否生成通用apk包,包含所以ABI目录
universalApk false
}
构建多个 APK
...
splits {
density {
enable true
reset()
include "mdpi", "hdpi"
}
abi {
enable true
reset()
include "x86", "x86_64"
}
}
上述示例配置的输出包括以下 4 个 APK:
app-hdpiX86-release.apk:仅包含适用于 hdpi 密度和 x86 ABI 的代码和资源。app-hdpiX86_64-release.apk:仅包含适用于 hdpi 密度和 x86_64 ABI 的代码和资源。app-mdpiX86-release.apk:仅包含适用于 mdpi 密度和 x86 ABI 的代码和资源。app-mdpiX86_64-release.apk:仅包含适用于 mdpi 密度和 x86_64 ABI 的代码和资源。
APK 文件名格式
该方案由下面几部分组成:
-
modulename指定正在构建的模块名称。
-
screendensity如果启用了针对屏幕密度的多 APK 构建,应指定 APK 对应的屏幕密度,如“mdpi”。
-
ABI如果启用了针对 ABI 的多 APK 构建,应指定 APK 对应的 ABI,如“x86”。如果启用了同时针对屏幕密度和 ABI 的多 APK 构建,Gradle 会将密度名称与 ABI 名称连接起来,例如“mdpiX86”。如果针对按 ABI 生成的 APK 启用了
universalApk,Gradle 会将“universal”用作通用 APK 文件名的 ABI 部分。 -
buildvariant指定正在构建的构建变体,如“debug”。
例如,为调试版本的“myApp”构建 mdpi 屏幕密度 APK 时,APK 文件名为 myApp-mdpi-debug.apk。对于配置为同时针对 mdpi 屏幕密度和 x86 ABI 构建多个 APK 的发布版本的“myApp”,APK 文件名为 myApp-mdpiX86-release.apk。