Управление множеством ароматов... экспоненциальный рост?

Представьте себе ситуацию, в которой мне нужно иметь версии моего APK с рекламой или без нее, с или без CustomJarSDK и для трех рынков: GooglePlay, AmazonApps и SamsungApps.

В моем идеальном мире всего 7 вкусов:

  • С рекламой
  • Без рекламы
  • С CustomJarSDK
  • Без CustomJarSDK
  • Для GooglePlay
  • Для AmazonStore
  • Для SamsungApps

И в моем идеальном мире был бы способ объединить вкусы в Gradle, например:

  • С рекламой + SamsungApps + CustomJarSDK
  • Без рекламы + GooglePlay
  • Так далее...

Это возможно? или ты проклят и разорен, чтобы иметь все эти ароматы...?????

  • Для GooglePlay с рекламой
  • Для GooglePlay с рекламой и с CustomJarSDK
  • Для GooglePlay без рекламы
  • Для GooglePlay без рекламы и с CustomJarSDK
  • Для AmazonStore с рекламой
  • Для AmazonStore с рекламой и с CustomJarSDK
  • Для AmazonStore без рекламы
  • Для AmazonStore без рекламы и с CustomJarSDK
  • Для SamsungApps с рекламой
  • Для SamsungApps с рекламой и с CustomJarSDK
  • Для SamsungApps без рекламы
  • Для SamsungApps без рекламы и с CustomJarSDK

1 ответ

Довольно сложно ответить на ваш вопрос. Это зависит от того, какие ресурсы отличаются в любом вкусе.

В настоящее время вы не можете расширять ароматы или объединять их.

Однако вы можете использовать некоторые советы для улучшения вашего проекта.

Например, вы можете использовать общие ресурсы с исходными текстами для разных вкусов.

Что-то вроде того:

+ App // module
|- src
   |- common // shared srcDir
      |- java
   + flavor1
      |- java
   + flavor2
      |- java
   + flavor3
   + flavor4

Тогда вы можете определить somenthing так:

 sourceSets {            
        flavor1.java.srcDir 'src/common/java'
        flavor2.java.srcDir 'src/common/java'
        flavor3.java.srcDir 'src/common/java'
    }

В вашем случае вы должны оценить, если вкусы:

  • Для GooglePlay с рекламой
  • Для GooglePlay с рекламой и с CustomJarSDK
  • Для GooglePlay без рекламы
  • Для GooglePlay без рекламы и с CustomJarSDK

можно использовать общий блок:

 sourceSets {
            flavor1.java.srcDir = ['src/common/java', 'src/flavor1/java']
            flavor2.java.srcDir = ['src/common/java', 'src/flavor2/java']
            flavor3.java.srcDir = ['src/common/java', 'src/flavor3/java']
        }

Каждый аромат может использовать один и тот же набор источников, определенный в другом аромате.
Вот так:

flavor2{
        java.srcDirs = sourceSets.flavor1.java.srcDirs
        res.srcDirs = sourceSets.flavor1.res.srcDirs
        resources.srcDirs = sourceSets.flavor1.resources.srcDirs
        aidl.srcDirs = sourceSets.flavor1.aidl.srcDirs
        renderscript.srcDirs = sourceSets.flavor1.renderscript.srcDirs
        assets.srcDirs = sourceSets.flavor1.assets.srcDirs
    }

Также каждый вариант может определять несколько папок ресурсов. Например:

android.sourceSets {
   flavor1.res.srcDirs = ['src/main/res', src/main/res2']
}
Другие вопросы по тегам