在 Android Studio 中构建期间如何使用不同的资源集(图像、主题等)?
How to use different set of resources (images, themes, etc.) during builds in Android Studio?
我们需要为来自同一源代码库的不同客户构建外观不同的应用程序。每个客户的应用程序都必须有品牌 - 即必须有不同的图像、颜色等。大多数资源 - 例如布局、字符串 - 将在所有客户之间共享。
我们正在考虑在 build.gradle
中使用 sourceSet
。例如:
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
...
}
}
}
在每次构建之前,我们将 uncomment/comment 在 build.gradle
中选择行。
我们认为这可行,但想知道是否有更好的方法。
您的方法是正确的,按客户品牌划分源集。
我们有同样的经历,我们解决了这个问题:
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']
}
}
您可以使用 flavorDimensions,
android {
flavorDimensions "version"
productFlavors {
commom
client1
client2
}
}
然后创建您的资源文件夹 src/client1 & src/client2。
在Build Variants window中可以切换哪个样式为运行或debug.Refer如下图。
如果选择client1Debug或client1Release,client1/res中的资源将覆盖main/res中的同名资源。
我们需要为来自同一源代码库的不同客户构建外观不同的应用程序。每个客户的应用程序都必须有品牌 - 即必须有不同的图像、颜色等。大多数资源 - 例如布局、字符串 - 将在所有客户之间共享。
我们正在考虑在 build.gradle
中使用 sourceSet
。例如:
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
...
}
}
}
在每次构建之前,我们将 uncomment/comment 在 build.gradle
中选择行。
我们认为这可行,但想知道是否有更好的方法。
您的方法是正确的,按客户品牌划分源集。
我们有同样的经历,我们解决了这个问题:
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']
}
}
您可以使用 flavorDimensions,
android {
flavorDimensions "version"
productFlavors {
commom
client1
client2
}
}
然后创建您的资源文件夹 src/client1 & src/client2。 在Build Variants window中可以切换哪个样式为运行或debug.Refer如下图。 如果选择client1Debug或client1Release,client1/res中的资源将覆盖main/res中的同名资源。