Android主题模块与口味

Android主题模块与口味,android,android-studio,gradle,android-productflavors,Android,Android Studio,Gradle,Android Productflavors,所以这有点有趣,我不确定如何在android studio中设置它。我有几个模块,其中有一些我在各种应用程序中使用的可重用组件,但是使用flavors将某些主题注入到可重用组件中会很好。我没有为我写的每个应用程序的每个组件创建一个新的风格,而是考虑有一个主题模块,每个我写的应用程序都有一个风格,有颜色方案……等等。以下是我希望它的设置方式: App1: dependencies reusable lib1 reusable lib3 reusable lib4 theme - App1 flav

所以这有点有趣,我不确定如何在android studio中设置它。我有几个模块,其中有一些我在各种应用程序中使用的可重用组件,但是使用flavors将某些主题注入到可重用组件中会很好。我没有为我写的每个应用程序的每个组件创建一个新的风格,而是考虑有一个主题模块,每个我写的应用程序都有一个风格,有颜色方案……等等。以下是我希望它的设置方式:

App1: dependencies reusable lib1 reusable lib3 reusable lib4 theme - App1 flavor App2: dependencies reusable lib1 reusable lib2 reusable lib4 theme - App2 flavor App2 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')
}
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:22.1.1'
    compile project(path: ':Theme', configuration: 'app2Release')
    compile project(':Lib1')
    compile project(':Lib3')
    compile project(':Lib4')
}
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:22.1.1'
    compile project(path: ':Theme')
}
Lib1 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')
}
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:22.1.1'
    compile project(path: ':Theme', configuration: 'app2Release')
    compile project(':Lib1')
    compile project(':Lib3')
    compile project(':Lib4')
}
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'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:22.1.1'
    compile project(path: ':Theme', configuration: 'app1Release')
}
它将适用于app1,但我必须在构建每个应用程序之前不断地更改它,或者为我想要避免的每个库做很多修改。有人能做到这样吗


tl;dr一个模块是否可以引用另一个模块的风格,基于引用同一模块的应用程序构建的风格

我自己没有这样做,但根据我的理解,您是否可以在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')
}

请看清单合并:

要使您制作的每个应用程序的每个库具有相同的风格,请在XML文件中表示:

Intent可与
startActivity
一起使用,以启动
活动
broadcastIntent
将其发送给任何感兴趣的
BroadcastReceiver
组件,以及
startService(Intent)
bindService(Intent,ServiceConnection,int)
与后台服务通信

通过这种方式,您可以使用同一个应用启动多个应用,解决了必须更改每个应用的依赖关系的问题。有了意图,你就可以让应用程序自己用相同的代码启动


是的,一个模块引用一个基于该风格的另一个模块的风格可以由引用同一个模块的应用程序构建。

这是我迄今为止的工作,但要求我为我制作的每个应用程序都有一个单独的风格库,这是我试图避免的。或者你可以从库中分离主题,不是吗?似乎如果主题是库的组成部分,那么每个主题都会有这些库的“味道”。如果你制作的每个应用程序的主题都是1-1,那么同样的,你在库中也会有很多不同的风格。主题只是一般的东西,比如“原色”和“按钮样式”,它们将永远存在于主题项目中。我希望有一个解决方案,图书馆只是引入这些值,而不知道实际构建的主题项目的风格,它只知道所有这些键都会存在。要么图书馆需要知道主题风格,因此每个主题都有自己的风格,要么它们不需要知道,所以主题项目甚至不需要依赖于他们,不是吗?我想要一个解决方案,其中应用程序决定主题的风格,库只取决于其中的内容,为每个库制作一个风格是很麻烦的,并且有点违背了将主题相关的东西分开的目的。我不太明白你在说什么,你能举个例子,我如何做到这一点,给出我的问题示例吗?基本上,不是为每个库制作一个风格,使用
意图
定义每个应用程序的开始。看看这个:或者你为什么不在你的应用程序中使用实际的主题呢?您需要将什么样的值传递到模块中?如果在模块中使用主题属性,如
?colorPrimary
,则可以使用无风格的普通主题,也可以创建自定义值以包含在主题中