我们需要为来自同一来源库的不同客户构建外观各异的应用程序。每个客户的应用都必须带有商标-即必须具有不同的图像,颜色等。大多数资源-例如布局,字符串-将在所有客户端之间共享。
我们正在考虑在sourceSet
中使用build.gradle
。例如:
android {
...
sourceSets {
Main {
// resources common to all clients
resSrcDirs = 'res'
// resources specific to client1
resSrcDirs += 'client1/res'
// resources specific to client2
//resSrcDirs += 'client2/res'
...
// The same approach taken for manifest that contains application theme
manifestSrcFile=client1/AndroidMainifest.xml
// manifestSrcFile=client2/AndroidManifiest.xml
...
}
}
}
在每次构建之前,我们将取消注释/注释build.gradle
中选定的行。
我们认为这可行,但是想知道是否有更好的方法。
答案 0 :(得分:2)
您可以使用flavorDimensions,
android {
flavorDimensions "version"
productFlavors {
commom
client1
client2
}
}
然后创建资源文件夹src / client1和src / client2。 在Build Variants窗口中,可以切换要运行或调试的样式。请参考下图。 如果选择client1Debug或client1Release,则client1 / res中的资源将覆盖main / res中相同名称的资源。
答案 1 :(得分:1)
您的方法正确,请按客户品牌划分来源集。
我们有相同的经验,我们通过以下方式解决了问题:
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
jniLibs.srcDirs = ['jniLibs']
}
brandA {
java.srcDirs = ['src_a']
res.srcDirs = ['res_a']
assets.srcDirs = ['assets_a']
}
brandB {
java.srcDirs = ['src_b']
res.srcDirs = ['res_b']
assets.srcDirs = ['assets_b']
}
brandC {
java.srcDirs = ['src_c']
res.srcDirs = ['res_c']
assets.srcDirs = ['assets_c']
}
}