有什么方法可以针对构建类型设置不同的产品 flavor versionNameSuffix吗?

以下代码对我有用:

buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            signingConfig signingConfigs.release
            verstionNameSuffix "-prod"
        }
}

但是,当我想为产品口味设置versionNameSuffix时,如下所示:
productFlavors {
        production {
            versionNameSuffix "-prod"
        }
        development {
            versionNameSuffix "-dev"
        }
}

我收到此错误:
Error:(48, 0) Could not find method versionNameSuffix() for arguments [-dev] on ProductFlavor_Decorated{name=development, dimension=null, minSdkVersion=null, targetSdkVersion=null, renderscriptTargetApi=null, renderscriptSupportModeEnabled=null, renderscriptNdkModeEnabled=null, versionCode=null, versionName=null, applicationId=null, testApplicationId=null, testInstrumentationRunner=null, testInstrumentationRunnerArguments={}, testHandleProfiling=null, testFunctionalTest=null, signingConfig=null, resConfig=null, mBuildConfigFields={BASE_URL=com.android.builder.internal.ClassFieldImpl@1630a8db}, mResValues={}, mProguardFiles=[], mConsumerProguardFiles=[], mManifestPlaceholders={}} of type com.android.build.gradle.internal.dsl.ProductFlavor.

还有其他方法可以设置产品 flavor 的versionNameSuffix吗?

最佳答案

没有直接的方法可以这样做。当前,com.android.application gradle-plugin不支持任何DSL,以便productFlavors具有versionNameSuffix

如果要执行此操作,则必须创建两个方法。

import java.util.regex.Matcher
import java.util.regex.Pattern

def getCurrentVersionSuffix() {
    def currentFlavor = getCurrentFlavor()
    if (currentFlavor.equals("prod")) {
        return "-prod"
    } else if (currentFlavor.equals("uat")) {
        return "-uat"
    } else if (currentFlavor.equals("dev")) {
        return "-dev"
    }
}

def getCurrentFlavor() {
    String taskRequestName = getGradle().getStartParameter().getTaskRequests().toString()

    Pattern pattern;

    if (taskRequestName.contains("assemble"))
        pattern = Pattern.compile("assemble(\\w+)(Release|Debug)")
    else
        pattern = Pattern.compile("generate(\\w+)(Release|Debug)")

    Matcher matcher = pattern.matcher(taskRequestName)

    if (matcher.find()) {
        return matcher.group(1).toLowerCase()
    } else {
        return "";
    }
}

并更新buildTypes DSL
buildTypes {
    debug {
        versionNameSuffix getCurrentVersionSuffix()
    }
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        versionNameSuffix getCurrentVersionSuffix()
    }
}

这是目前唯一的方法。可能在将来,他们可以提供一些DSL之类的东西。

我为此写了一个博客(http://www.pcsalt.com/android/product-flavors-android/),并将代码推送到了GitHub(https://github.com/krrishnaaaa/product-flavours/blob/master/app/build.gradle)上。

关于android - versionNameSuffix用于产品口味,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39043107/

10-09 07:02