将 APK 拆分用于发布但不用于调试构建类型
Using APK Splits for Release but not Debug build type
我已成功实现 APK Splits,以便为不同的 ABI 生成单独的 APK。
但是,为了提高效率(并且因为我不需要在 Debug 中使用非 armeabi-v7a APK),我想将 Debug 构建限制为仅生成 armeabi-v7a APK。
如何做到这一点?
一个想法是:
abi {
enable true
reset()
include 'x86', 'armeabi-v7a', 'mips'
universalApk false
}
也许有一些方法可以根据构建类型设置enable
?
您可以根据命令行参数设置enable
。当我只想对发布版本使用拆分而不是对常规调试版本使用拆分时,我已经解决了类似的问题。
splits {
abi {
enable project.hasProperty('splitApks')
reset()
include 'x86', 'armeabi-v7a'
}
}
然后是 ./gradlew -PsplitApks assembleProdRelease
(产品对我来说是一种风味)。
您可以尝试对@Geralt_Encore 的答案进行修改,这样可以避免使用单独的gradlew
命令。就我而言,我只关心使用 APK 拆分来减小已发布的 APK 文件的大小,并且我想完全在 Android Studio 中完成此操作。
splits {
abi {
enable gradle.startParameter.taskNames.any { it.contains("Release") }
reset()
include 'x86', 'armeabi-v7a', 'mips'
universalApk false
}
}
据我所知,Build | Android Studio 中的生成签名 APK 菜单项使用 assembleRelease
Gradle 目标生成 APK。
我参加这个派对有点晚了,但遇到不同风格和任务名称的问题,我带来了这个:
ext.isRelease = { array ->
array.each { name ->
if (name.contains("Debug")) {
return false
}
}
return true
}
android {
...
splits {
abi {
enable isRelease(gradle.startParameter.taskNames)
reset()
include "x86_64", "x86", "arm64-v8a", "armeabi-v7a"
universalApk false
}
}
}
这只是对 Jeff P 的回答的一个小更新,但适用于不同的风格和构建配置。
更新 @Jeff P 的答案,使其基于应用名称更加灵活并支持 Android App Bundle (.aab) 格式
splits {
abi {
enable gradle.startParameter.taskNames.any { it.contains("Release") }
reset()
include 'x86', 'armeabi-v7a', 'mips'
universalApk false
}
}
我已成功实现 APK Splits,以便为不同的 ABI 生成单独的 APK。
但是,为了提高效率(并且因为我不需要在 Debug 中使用非 armeabi-v7a APK),我想将 Debug 构建限制为仅生成 armeabi-v7a APK。
如何做到这一点?
一个想法是:
abi {
enable true
reset()
include 'x86', 'armeabi-v7a', 'mips'
universalApk false
}
也许有一些方法可以根据构建类型设置enable
?
您可以根据命令行参数设置enable
。当我只想对发布版本使用拆分而不是对常规调试版本使用拆分时,我已经解决了类似的问题。
splits {
abi {
enable project.hasProperty('splitApks')
reset()
include 'x86', 'armeabi-v7a'
}
}
然后是 ./gradlew -PsplitApks assembleProdRelease
(产品对我来说是一种风味)。
您可以尝试对@Geralt_Encore 的答案进行修改,这样可以避免使用单独的gradlew
命令。就我而言,我只关心使用 APK 拆分来减小已发布的 APK 文件的大小,并且我想完全在 Android Studio 中完成此操作。
splits {
abi {
enable gradle.startParameter.taskNames.any { it.contains("Release") }
reset()
include 'x86', 'armeabi-v7a', 'mips'
universalApk false
}
}
据我所知,Build | Android Studio 中的生成签名 APK 菜单项使用 assembleRelease
Gradle 目标生成 APK。
我参加这个派对有点晚了,但遇到不同风格和任务名称的问题,我带来了这个:
ext.isRelease = { array ->
array.each { name ->
if (name.contains("Debug")) {
return false
}
}
return true
}
android {
...
splits {
abi {
enable isRelease(gradle.startParameter.taskNames)
reset()
include "x86_64", "x86", "arm64-v8a", "armeabi-v7a"
universalApk false
}
}
}
这只是对 Jeff P 的回答的一个小更新,但适用于不同的风格和构建配置。
更新 @Jeff P 的答案,使其基于应用名称更加灵活并支持 Android App Bundle (.aab) 格式
splits {
abi {
enable gradle.startParameter.taskNames.any { it.contains("Release") }
reset()
include 'x86', 'armeabi-v7a', 'mips'
universalApk false
}
}