我已经成功实现了APK Splits,以便为不同的ABI生成单独的APK。
但是,为了提高效率(因为我在调试中不需要非armeabi-v7a APK),我想限制Debug版本只生成armeabi-v7a APK。
如何才能做到这一点?
一个想法是这样的:
abi {
enable true
reset()
include 'x86', 'armeabi-v7a', 'mips'
universalApk false
}
也许有一些方法可以根据Build类型设置enable
?
您可以尝试@ Geralt_Encore的答案的变体,这避免了单独的gradlew
命令。在我的情况下,我只关心使用APK拆分来减少已发布的APK文件大小,我想在Android Studio中完全执行此操作。
splits {
abi {
enable gradle.startParameter.taskNames.contains(":app:assembleRelease")
reset()
include 'x86', 'armeabi-v7a', 'mips'
universalApk false
}
}
您可能需要将:app
前缀替换为应用程序模块的名称(如果它不是字面上命名为app
)。
从我所见,Build |在Android Studio中生成签名的APK菜单项使用assembleRelease
Gradle目标生成APK。
请注意,如果您使用构建版本生成APK,或者您的版本构建未命名为release
,则需要相应地更改assembleRelease
目标,例如如果你的构造味道是assemblePaidRelease
,paid
。
您可以根据命令行参数设置enable
。当我只想为发布版本使用拆分时,我已经解决了类似的问题,但不适用于常规的调试版本。
splits {
abi {
enable project.hasProperty('splitApks')
reset()
include 'x86', 'armeabi-v7a'
}
}
然后./gradlew -PsplitApks assembleProdRelease
(在我的情况下prod是一种味道)。
我参加这个派对有点晚了,但是对于不同的口味和任务名称有问题,我来这里:
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的答案的一个小小的更新,但适用于不同的风格和构建配置。