android - Gradle 3.0 拆分不起作用

标签 android gradle

在我的 gradle 脚本中,我配置了按架构拆分 apks:

android {

    [...]

    splits {
        abi {
            enable gradle.startParameter.taskNames.contains(":app:assembleRelease")
            reset()
            include "x86", "arm64-v8a", "armeabi", "armeabi-v7a"
            universalApk true
        }
    }
}

当我在 Android Studio 中运行时,Build signed APK 一切正常。但是,一旦我使用 gradlew 就不会生成拆分,只有通用 apk 才会构建。

Used command: ./gradlew clean :app:assembleRelease

不幸的是,由于 CI/CD 工具,我无法使用 Android Studio 内置生成。

我在我的 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'
  • com.android.tools.build:gradle:3.0.1

它与 Gradle 2 完美配合,更新到 Gradle 3 后它似乎坏了。我怎样才能让它重新工作?

最佳答案

根据 documentation,Gradle 3.0 有一些变化。 :

Using the Variant API to manipulate variant outputs is broken with the new plugin.It still works for simple tasks, such as changing the APK name during build time. The complicated tasks that involve accessing outputFile objects no longer work. That's because variant-specific tasks are no longer created during the configuration stage. This results in the plugin not knowing all of its outputs up front, but it also means faster configuration times.

这意味着我们的插件能够获取 AndroidManifest 的输出文件,因此无法为正在构建的变体添加构建 UUID。

Google 已声明他们将添加新的 API 以提供类似的功能,但遗憾的是似乎还没有任何时间表。

在您的上下文中,问题出在您的 build.gradle 代码上,您不能再使用 outputFile 对象。所以,这就是它在 Gradle 3 中被破坏的原因.

另请参阅此 issue在问题跟踪器上报告。

希望这有帮助!!!

关于android - Gradle 3.0 拆分不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48451949/

相关文章:

android - Unity 2020.1.3f1 won't build Android Project...完全卡住无法解决这些错误

gradle - gradle应用程序插件过程以非零退出值1完成

android - Android Studio Gradle依赖性检查

gradle - 错误 Gradle 同步失败 : Failed to find CMake

java - 横向模式下的预览方向使用 Camera2 api 顺时针旋转

android - 以编程方式启用/禁用 Activity

android - ListView - 在点击时显示详细信息,toast 不显示

android - 抽屉导航不适用于导航组件

从 Android 中的 URL 获取 HTML 源代码的 Java 代码不起作用

git - 是否可以通过grgit插件仅提交一个文件进行gradle。