2

Я пытаюсь сделать заявку для нескольких партнеров и для каждого партнера тестовую версию. Для каждого вкуса я создаю в нем определенную папку с res/values, как указано в документации.Android flavors, Gradle sourceSets merging

Моего Gradle взгляд файл, как это:

apply plugin: 'com.android.application' 

android { 
    packagingOptions { 
     exclude 'META-INF/LICENSE' 
     exclude 'META-INF/NOTICE' 
    } 
    compileSdkVersion 14 
    buildToolsVersion "21.1.2" 

    defaultConfig { 
      versionCode 1 
      versionName 1 
      minSdkVersion 14 
      targetSdkVersion 19 
     } 

    productFlavors { 
     prodPARTNER1 { 
      applicationId "com.PARTNER1" 
     } 

     testPARTNER1 { 
      applicationId "com.PARTNER1.test" 
     } 
     prodPARTNER2{ 
      applicationId "com.PARTNER2" 
     } 

     testPARTNER2{ 
      applicationId "com.PARTNER2.test" 
     } 
    } 
    sourceSets { 
     testPARTNER2 { 
      res.srcDirs = ["testPARTNER2/res", "prodPARTNER2/res"] 
     } 
    } 

} 

dependencies { 
    compile project(':ViewPagerIndicatorLibrary') 
    compile 'com.android.support:support-v4:19.0.0' 
    compile 'com.google.android.gms:play-services:+' 
    compile files('libs/achartengine-1.1.0.jar') 
    compile files('libs/android-async-http-1.4.4.jar') 
    compile files('libs/jackson-annotations-2.2.3.jar') 
    compile files('libs/jackson-core-2.2.3.jar') 
    compile files('libs/jackson-databind-2.2.3.jar') 
    compile files('libs/urlimageviewhelper-1.0.4.jar') 
} 

Я хочу для тестовой версии, чтобы взять папку реса в версии прода (как это я не дублировать ресурсы для обоего версий) и объединить его с тестовой версией , Проблема заключается в том:

Error:Error: Duplicate resources: C:\...prodPARTNER2\res\values\strings.xml:string/app_name,C:\...testPARTNER2\res\values\strings.xml:string/app_name

Любая идея? Невозможно слить также папку res для тех же самых ароматов?

EDIT: Я использую Gradle V 1.1.0 и Android Studio V 1.1.0 тоже

ответ

2

Внимание: этот подход изменился немного на Android Plugin for Gradle 3.0.0

Использование productFlavors для каждого приложения-партнера и определить тип сборки test для тестовых сборок.

productFlavors { 
    partner1 { 
     applicationId "com.partner1" 
    } 

    partnerN { 
     applicationId "com.partnerN" 
    } 
} 

buildTypes { 
    debug { 
     // use defaults 
    } 
    release { 
     // the 'prod' version, use defaults 
    } 
    test { 
     // config as you want! 
     applicationIdSuffix ".test" 
     versionNameSuffix " Test" 
     debuggable true 
     minifyEnabled false 
     signingConfig signingConfigs.debug 
    } 
} 

Вы можете использовать папки смешивания и источник матча как Android Plug-in for Gradle показывает:

Для создания каждой версии вашего приложения, система сборки объединяет исходный код и ресурсы из:

  • src/main/ - основной исходный каталог (стандартная конфигурация, общая для всех вариантов)
  • src/<buildType>/ - исходный каталог
  • src/<productFlavor>/ - источник каталог

Edit: Это руководство пользователя другой источник помощи: http://tools.android.com/tech-docs/new-build-system/user-guide

Edit 2: по ссылке выше:

Для разных вариантов также создаются дополнительные источники:

  • android.sourceSets.flavor1Debug Расположение src/flavor1Debug/
  • android.sourceSets.flavor1Release Расположение src/flavor1Release/
  • android.sourceSets.flavor2Debug Расположение src/flavor2Debug/
  • android.sourceSets.flavor2Release Расположение src/flavor2Release/

Затем вы можете использовать /src/partner1Test/, чтобы определить специфику ресурсов для partner1 аромата И Test build, то есть вариант сборки partner1Test.

+0

Отлично, мне не нужно создавать 2 аромата для одного партнера! но как я могу разделить ресурс (и слился с версией prod) для моей тестовой версии? Причина src//станет src/test и будет использоваться для всех партнеров, это не право конкретного партнера? – jaumard

+0

Например, я хочу изменить имя_приложения в файле string.xml для prod, это MyPartner1App, и для теста это MyPartner1TestApp, как я могу это сделать? – jaumard

+0

@jaumard comment1, question2: Да, 'src/test' будет использоваться для всех партнеров при построении типа' test', он не является специфичным для партнера. –

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