【问题标题】:Android studio flavor dimensions processed all, not selected oneAndroid studio 风味维度全部处理,未选择一个
【发布时间】:2019-11-12 20:22:43
【问题描述】:

我在模块 build.gradle 文件中有一个风味维度,无论实际的构建变体是什么,gradle 构建过程都会贯穿所有构建变体。这是模块 build.gradle:

flavorDimensions 'type', 'jnitype'
    productFlavors {
        demo {
            dimension 'type'
            versionNameSuffix '.demo'
        }
        production {
            dimension 'type'
            versionNameSuffix '.production'
        }
        usejni {
            dimension 'jnitype'
            versionNameSuffix '.usejni'
            copy {
                from('../jnilib/data') {
                    include 'sdk_data.gpu'
                    .... 
                }
                into 'src/main/assets/data'
            }
        }
        nojni {
            dimension 'jnitype'
            versionNameSuffix '.nojni'
            delete('src/main/assets/data/*.*')
            packagingOptions {
                exclude 'lib/arm64-v8a/sdk.so'
                ...
            }
        }
    }

因此,无论选择什么构建变体,demoUsejni 或 demoNojni,gradle 都会运行“usejni”,然后是“nojni”变体——它会复制文件和库,然后删除它们。我使用 gradle debug 来确认这一点。

如何告诉 gradle 只使用选定的构建风格?

AS 3.5.2,gradle 插件 5.4.1,android 构建工具 3.5.2。

【问题讨论】:

  • 你能再解释一下吗?无论选择什么,它都会运行两种口味吗?
  • @vijaypalodes >无论选择什么,它都会运行两种口味吗?确切地。在构建时,它通过“usejni”风格运行并复制文件,然后通过“nojni”风格运行并删除文件和库。是的,一站式构建通行证。

标签: android android-studio build.gradle android-flavordimension


【解决方案1】:

终于找到了解决方案:使用 gradle 任务名称来检查所需的风味。对于编译类型的操作,gradle 任务名称将是“:module_name:assembleFlavor1Flavor2...FlavornBuildtype”。所以我会检查“assemble”和“Nojni”/“Usejni”。

String taskName = "";
if (gradle.startParameter.taskNames.size > 0)
    taskName = gradle.startParameter.taskNames.get(0)

usejni {
    dimension 'jnitype'
    versionNameSuffix '.usejni'
    if (taskName.contains("Usejni") && taskName.contains("assemble")) {
        copy {
            from('../jnilib/data') {
                include 'sdk_data.gpu'
                .... 
            }
            into 'src/main/assets/data'
        }
    }
}
nojni {
    dimension 'jnitype'
    versionNameSuffix '.nojni'
    if (taskName.contains("Nojni") && taskName.contains("assemble")) {
        delete('src/main/assets/data/*.*')
        packagingOptions {
            exclude 'lib/arm64-v8a/sdk.so'
            ...
        }
    }
}

就像一个魅力!

在此答案中找到解决方案的提示:How to get current buildType in Android Gradle configuration

【讨论】:

    猜你喜欢
    • 2016-08-29
    • 1970-01-01
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    • 2017-10-21
    • 2017-10-19
    相关资源
    最近更新 更多