在我的gradle脚本中,我已经配置为按架构拆分apks:
updateNameComponent.emit();
当我在Android Studio中运行时,android {
[...]
splits {
abi {
enable gradle.startParameter.taskNames.contains(":app:assembleRelease")
reset()
include "x86", "arm64-v8a", "armeabi", "armeabi-v7a"
universalApk true
}
}
}
一切都按预期工作。但是,只要我使用Build signed APK
,就不会生成拆分,只有通用apk才会生成。
使用过的命令:
gradlew
不幸的是,由于CI / CD工具,我无法使用Android Studio内置版。
我在./gradlew clean :app:assembleRelease
中使用此代码更改版本号,我不认为这会导致问题:
build.gradle
版本:
// dífferent version codes for different abis
// https://developer.android.com/studio/build/configure-apk-splits.html
ext.abiCodes = ['arm64-v8a': 3, armeabi: 1, 'armeabi-v7a': 2, x86: 4]
import com.android.build.OutputFile
android.applicationVariants.all { variant ->
variant.outputs.each { output ->
def baseAbiVersionCode = project.ext.abiCodes.get(output.getFilter(OutputFile.ABI))
if (baseAbiVersionCode != null) {
output.versionCodeOverride = baseAbiVersionCode + variant.versionCode
}
}
}
compileSdkVersion 26
buildToolsVersion '26.0.2'
它与 Gradle 2 完美配合,在更新到Gradle 3之后它似乎已经破解了。我怎样才能让它重新开始工作?
答案 0 :(得分:1)
使用Gradle 3.0,根据documentation进行了一些更改:
使用Variant API来操作变量输出 新的插件。它仍适用于简单的任务,例如更改APK名称 在构建期间。涉及访问 outputFile 的复杂任务 物体不再起作用。这是因为特定于变体的任务是否定的 在配置阶段创建的时间更长。这导致了 插件不知道它的所有输出,但它也意味着 更快的配置时间。
这意味着我们的插件能够获取AndroidManifest的outputFile,因此无法为正在构建的变体添加Build UUID。
Google表示他们会添加新的API以提供类似的功能,但不幸的是,目前还没有任何时间表。
在您的上下文中,问题在于您的 build.gradle 代码,您无法再使用 outputFile 对象。因此,这就是为什么它被Gradle 3打破了
此外,请参阅问题跟踪器上报告的issue。
希望这有帮助!!!
答案 1 :(得分:0)
试试这个,
splits {
abi {
enable true
reset()
include "x86", "arm64-v8a", "armeabi", "armeabi-v7a"
universalApk true
}
}
可能是gradle.startParameter.taskNames.contains(":app:assembleRelease")每次都返回false,因此它不会生成多个apks。