2016-07-15 2 views
2

Мне нужно включить Fabric для разных сред сборки, а также принять во внимание, был ли apk построен с использованием Android Studio или CI-сервера (jenkins) в нашем случае. подход, что я имею в виду использование является:Как вызвать задачу градиента из productflavor

defaultConfig { 
    applicationId "com.pack.proj" 
    minSdkVersion 19 
    targetSdkVersion 23 
    versionCode 12 
    ext.buildNumber = System.getenv("BUILD_NUMBER") ?: "dev" 
    versionName "1.2.$buildNumber" 
    signingConfig signingConfigs.inspection 
} 

productFlavors { 
     dev1 { 
      resValue 'string', 'app_name', 'App Name' 
      resValue 'string', 'base_url', 'http://dev1.server.in/' 
      buildConfigField 'boolean', 'USE_FABRIC', 'true' 

     } 
     dev2 { 
      resValue 'string', 'app_name', 'App Name' 
      resValue 'string', 'base_url', 'http://dev2.server.in/' 
      // ********HOW DO I CALL THE TASK 'enableFabric' FROM HERE********* 
     } 
} 

task enableFabric{ 
    if(versionName.contains('dev')) 
     buildConfigField 'boolean', 'USE_FABRIC', 'false' 
    else 
     buildConfigField 'boolean', 'USE_FABRIC', 'true' 
} 

Теперь мои вопросы

  1. Как вызвать задачу enableFabric из dev1 и DEV2 продукта вкусами?
  2. И когда я запускаю скрипт градиента, я получаю ошибку, что versionName является непризнанным свойством в task enableFabric?
  3. также buildConfigField 'boolean', 'USE_FABRIC', 'true' при использовании в defaultConfig не работает для меня. когда я использую

    если (BuildConfig.USE_FABRIC == верно) { // сделать что- }

в коде Java.

ответ

1

положите if else прямо в dev2. или если вы планируете использовать его несколько раз повернуть его в функцию вместо задачи

пример:

productFlavors { 
    dev1 { 
     resValue 'string', 'app_name', 'App Name' 
     resValue 'string', 'base_url', 'http://dev1.server.in/' 
     buildConfigField 'boolean', 'USE_FABRIC', 'true' 

    } 
    dev2 { 
     resValue 'string', 'app_name', 'App Name' 
     resValue 'string', 'base_url', 'http://dev2.server.in/' 
     buildConfigField 'boolean', 'USE_FABRIC', useFabric() 
    } 
} 

за пределами вашего android блока, сделать что-то вроде

def useFabric() { 
    if (versionName.contains('dev')) 
     return false; 
    else return true; 
} 
+0

Я не захотите сделать это в dev2 напрямую, потому что у меня еще 20 других сред. Кроме того, если вы можете объяснить использование примера/образца кода. – Ichthyocentaurs

+0

см. Edit please – eriuzo

+0

извините за более поздний ответ, но BuildConfig.USE_FABRIC показывает неизвестную ошибку компиляции переменной. – Ichthyocentaurs

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