我有一个带有flavorgroups和flavors的gradle项目。每个版本的AndroidManifest.xml放在哪里,以便它与主Manifest合并?现在举个例子我把AndroidManifest.xml放到'amazon'文件夹中。它拥有的权限比主要权限少。但这两个并没有合并。这只是Manifest问题。其他资源文件(如字符串和drawable)可以正确合并。
我的build.gradle文件是:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.5.6'
}
}
apply plugin: 'android'
dependencies {
compile fileTree(dir: 'libs', include: '*.jar')
}
android {
compileSdkVersion 17
buildToolsVersion "17.0.0"
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['resources']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
instrumentTest.setRoot('tests')
}
defaultConfig {
...
}
signingConfigs {
debug {
storeFile file("debug.keystore")
}
release {
...
}
}
buildTypes {
debug {
debuggable true
jniDebugBuild true
signingConfig signingConfigs.debug
packageNameSuffix ".debug"
versionNameSuffix ".debug"
}
release {
debuggable false
jniDebugBuild false
signingConfig signingConfigs.release
}
}
flavorGroups "version", "market"
productFlavors {
amazon {
flavorGroup "market"
buildConfig "public static final int COMPILATION = 1;"
}
google {
flavorGroup "market"
buildConfig "public static final int COMPILATION = 0;"
}
lite {
flavorGroup "version"
packageName = "package.name.lite"
}
full {
flavorGroup "version"
packageName = "package.name.full"
}
}
android.sourceSets.amazon {
res {
srcDir "amazon"
}
manifest {
srcFile "amazon/AndroidManifest.xml"
}
}
android.sourceSets.google {
res {
srcDir "google"
}
}
android.sourceSets.full {
res {
srcDir "full"
}
}
android.sourceSets.lite {
res {
srcDir "lite"
}
}
}
编辑:
Manifest似乎实际上正在合并(我没有注意到它,因为在文件的底部添加了持久性)。但它只适用于原始Manifest文件中缺少一个标记并存在于Manifest中。有时我想覆盖现有标签的属性,然后它不起作用。这是问题还是我做错了?
答案 0 :(得分:0)
你应该有各种口味的目录。每个flavor都可以在与默认目录相同的位置定义android.xml(树中自己的分支除外)。你应该能够只定义这些片段'你想要与风味不同。