带有风味的Android主题模块

所以这有点有趣,我不确定如何在 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')
}

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...