1

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

В моем идеальном мире это whould быть только 7 вкусов:

  • С Объявления
  • Без объявления
  • С CustomJarSDK
  • Без CustomJarSDK
  • Для GooglePlay
  • Для AmazonStore
  • Для SamsungApps

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

  • с рекламой + SamsungApps + CustomJarSDK
  • без рекламы + GooglePlay
  • Etc ...

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

  • Для GooglePlay с объявлениями
  • Для GooglePlay с объявлениями и с CustomJarSDK
  • Для GooglePlay без рекламы
  • Для GooglePlay без рекламы и с CustomJarSDK
  • Для AmazonStore с объявлениями
  • Для AmazonStore с объявления и с CustomJarSDK
  • Для AmazonStore без рекламы
  • Для AmazonStore без рекламы и с CustomJarSDK
  • Для SamsungApps с объявлениями
  • Для SamsungApps с объявлениями и с CustomJarSDK
  • Для SamsungApps без рекламы
  • Для SamsungApps без рекламы и с CustomJarSDK
+0

Это зависит. Вы не можете объединять ароматы, но вы можете использовать ресурсы папки для обработки этого случая. Например, вы можете определить общие папки src. –

+0

вы можете объяснить это немного больше? если вы сможете продлить свой комментарий в ответ, пожалуйста, – NullPointerException

+0

Я добавил ответ. так легко ответить на ваш вопрос, это зависит от вашего конкретного случая. Однако вы можете найти несколько советов по улучшению структуры, чтобы уменьшить избыточные части. –

ответ

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 с объявлениями и с Пользовательскими JarSDK
  • Для 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'] 
     } 

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

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'] 
} 
+0

Спасибо. Проблема в том, что с этим образцом кода я не могу понять, как повторно использовать общий код, но добавляя новый код, присущий каждому аромату. Можете ли вы расширить немного больше своего ответа, используя прецедент, который я объяснил в своем вопросе? – NullPointerException

+0

Попробовал добавить более подробную информацию, но, как объяснялось ранее, для этого требуется более подробная информация о вашем проекте –

+0

, так что это будет сочетать два исходных кода? flavor1.java.srcDir = ['src/common/java', 'src/flavor1/java'] Я ищу документацию или образцы об этой комбинации, и я не могу найти никаких примеров об этом. Вы пробовали? Спасибо – NullPointerException

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