Gradle 3.0 Splits不起作用

时间:2018-01-25 21:09:12

标签: android gradle

在我的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之后它似乎已经破解了。我怎样才能让它重新开始工作?

2 个答案:

答案 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。