0

我在模块 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。

4

1 回答 1

0

最后找到解决方案:使用 gradle task name 来检查需要的flavor。对于编译类型的操作,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

于 2019-11-13T20:00:57.093 回答