2016-08-19 4 views
0

Есть ли способ установить различные versionNameSuffix для различных ароматов продукта таким образом, что это можно сделать для типов сборки?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={[email protected]}, mResValues={}, mProguardFiles=[], mConsumerProguardFiles=[], mManifestPlaceholders={}} of type com.android.build.gradle.internal.dsl.ProductFlavor. 

Есть ли другой способ установить versionNameSuffix для аромата продукта?

ответ

0

Нет прямого способа сделать это. В настоящее время 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).

Смежные вопросы