所以这有点有趣,我不确定如何在
android studio中设置它.我有几个模块,我在各种应用程序中使用了一些可重用的组件,但是使用flavor将某些主题注入可重用组件会很不错.我没有为我编写的每个应用程序的每个组件创建新的风格,而是考虑使用1个主题模块,每个我编写的应用程序都有一个风味,它有颜色方案等等.这是我想要它设置的方式:
App1: dependencies reusable lib1 reusable lib3 reusable lib4 theme - App1 flavor App2: dependencies reusable lib1 reusable lib2 reusable lib4 theme - App2 flavor
现在我更愿意,如果可重用的libs可以简单地依赖于主题而不需要知道要构建哪种风格,并且主要的应用程序proj依赖于主题可以引用该应用程序的风格(使用此答案https://stackoverflow.com/a/24316133/1316346).原因是每个可重用模块都不能在其build.gradle依赖项中使用单个应用程序,否则会破坏引用它们的其他应用程序.为每个我写的应用程序制作每个可重用模块的味道也很繁琐.有没有办法实现这样的事情?这是我试过的:
App1 build.gradle:
dependencies { compile fileTree(include: ['*.jar'],dir: 'libs') compile 'com.android.support:appcompat-v7:22.1.1' compile project(path: ':Theme',configuration: 'app1Release') compile project(':Lib1') compile project(':Lib2') compile project(':Lib4') }
App2 build.gradle:
dependencies { compile fileTree(include: ['*.jar'],configuration: 'app2Release') compile project(':Lib1') compile project(':Lib3') compile project(':Lib4') }
Lib1 build.gradle:
dependencies { compile fileTree(include: ['*.jar'],dir: 'libs') compile 'com.android.support:appcompat-v7:22.1.1' compile project(path: ':Theme') }
这个问题是,一旦Lib1尝试访问主题中的任何内容,它就会出错.事实上,它甚至没有首先构建主题,它将尝试在主题之前构建Lib1,即使Lib1具有依赖性(与味道有些奇怪).如果我将Lib1更改为:
dependencies { compile fileTree(include: ['*.jar'],configuration: 'app1Release') }
它适用于app1,但我必须在构建每个应用程序之前不断更改它,或者为我想避免的每个lib做很多味道.有人做过这样的事吗?
tl; dr模块可以根据引用相同模块的应用程序构建的风格引用另一个模块的风格
解决方法
我自己没有这样做,但根据我对
configuration injection的理解,您是否可以在Lib1项目中包含所有风格(具有相应的正确主题项目依赖项),然后在App1和App2中的Lib1依赖项中包含配置风格?
例如.,
dependencies { compile fileTree(include: ['*.jar'],dir: 'libs') compile 'com.android.support:appcompat-v7:22.1.1' compile project(path: ':Theme',configuration: 'app1Release') compile project(path: ':Lib1',configuration: 'app1Release') compile project(':Lib3') compile project(':Lib4') }