我是gradle的新手,想要使用带有flavor,buildtypes和自定义源集的gradle android插件。有味道和建筑类型的建筑工程找到。不幸的是我有一个遗留的项目目录结构,所以我必须自定义buildtypes的res目录。
不知何故,buildtype的额外资源(基本上是一些字符串配置值)似乎没有合并到构建中,也没有从主树中替换资源键。
之前有人问过,我知道有 Gradle productflavors sourcesets and old project structure 和 How can I specify per flavor buildType sourceSets?
我想引用第一篇文章中的Xavier:“你需要首先声明你的口味,然后自定义sourceSets。”
据我所知,flavor配置会自动创建sourcesets,之后需要对其进行修改。这就是我在下面的build.gradle中尝试的内容,但我为每个构建类型添加的“res.srcDirs”似乎被忽略了,我无法弄清楚原因。
在第二篇文章中(带有github链接的最后一条评论),我在build.gradle中看到了复杂的源代码集修改。还有一种更简单的方法吗? (见这里:https://github.com/shakalaca/learning_gradle_android/blob/master/07_tricks/app/build.gradle)
这是我的gradle android插件的构建配置:
android {
compileSdkVersion 18
buildToolsVersion "18.0.1"
defaultConfig {
minSdkVersion 9
targetSdkVersion 17
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
}
productFlavors {
normal {
}
proguard {
proguardFile file("proguard-project.txt")
}
}
buildTypes {
dev {
packageNameSuffix ".dev"
debuggable true
signingConfig android.signingConfigs.debug
}
beta {
packageNameSuffix ".beta"
debuggable true
signingConfig android.signingConfigs.debug
}
live {
packageNameSuffix ".live"
debuggable true
signingConfig android.signingConfigs.debug
}
}
sourceSets.dev.res.srcDirs = ['variations/dev']
sourceSets.beta.res.srcDirs = ['variations/staging']
sourceSets.live.res.srcDirs = ['variations/live']
}
答案 0 :(得分:5)
如果您更改脚本的顺序,您可以拥有更好的结构并使其更易于阅读。
假设您有发布,测试版和调试类型,并且您想要一个不同的源目录,您可以这样做:
buildTypes {
release {
debuggable false
jniDebugBuild false
runProguard true
proguardFile 'proguard-android.txt'
// Links to signing config above.
signingConfig signingConfigs.release
}
debug {
packageNameSuffix ".debug"
versionNameSuffix ".debug"
}
beta {
// Import release code - avoid having the same code twice!
initWith release
packageNameSuffix ".beta"
versionNameSuffix ".beta"
}
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
release {
res.srcDirs = ['res', 'res-release']
}
beta {
res.srcDirs = ['res', 'res-beta']
}
debug {
res.srcDirs = ['res', 'res-debug']
}
}
请注意 buildTypes 和 sourceSets 的顺序!
答案 1 :(得分:4)
你的build.gradle应该没问题,检查你的变种目录,dev / stagin / live文件夹结构应该和res目录一样。
app/AndroidManifest.xml
app/src/com/...
app/res/values/strings.xml
app/res/layout/main_activity.xml
app/variations/dev/values/strings.xml
app/variations/staging/values/strings.xml
app/variations/live/values/strings.xml
BTW你定义了 proguardFile
,但没有 runProguard true