在使用实验性gradle插件版本0.7.x时,我尝试更改AndroidManifest.xml文件的位置。这样做的原因是我生成了文件(因为实验插件中没有明显的合并/属性替换器)所以我不希望输出文件与源一起。
我的应用build.gradle:
apply plugin: "com.android.model.application"
def buildDir = project.buildDir
model {
android {
compileSdkVersion 23
buildToolsVersion "23.0.1"
defaultConfig {
applicationId "com.myapp.android"
minSdkVersion.apiLevel 9
targetSdkVersion.apiLevel 23
versionCode 1
versionName "1.0"
}
sources {
main {
manifest {
source {
srcDirs = ["$buildDir"]
}
}
}
}
}
}
task createManifest {
doLast {
buildDir.mkdirs()
new FileOutputStream(new File(buildDir, "AndroidManifest.xml"))
}
}
tasks.all { task ->
if (task.name.startsWith('check') && task.name.endsWith('Manifest')) {
task.dependsOn createManifest
}
}
以上配置很好,但是当我尝试构建时,我得到:
A problem was found with the configuration of task ':app:checkDebugManifest'.
> File '/home/the_jk/source/test/app/src/main/AndroidManifest.xml' specified for property 'manifest' does not exist.`
我似乎无法更改默认清单"属性"总之,谁都有运气?
答案 0 :(得分:0)
尝试
manifest { source { srcDirs = $buildDir } }
这似乎只用1个清单就可以了,但实验性的插件barfs如果你给它2个你要合并的目录。
(我也猜测你还有其他任务可以在$ buildDir中生成清单,因为它会被干净的任务所淹没......)
更新
次要问题,检查[Deubg | Release] Manifest任务要求文件在运行时存在。对于静态文件,上面的工作正常。对于从构建目录中的任务生成的内容,我必须添加一个看起来像
的依赖项task createManifest {
// code to create $buildDir if it did not exist
// code to generate AndrdroidManfest.xml in $buildDir
}
tasks.all {
task ->
if (task.name.startsWith('check') && task.name.endsWith('Manifest')) {
task.dependsOn createManifest
}
}
tasks.all循环只允许我添加它,如果checkDebugManifest和/或checkReleaseManifest任务将要发生(我有./gradlew干净没有找到没有它的checkDebugManifest任务。)
答案 1 :(得分:0)
我与com.android.tools.build:gradle-experimental:0.7.0-alpha4
有类似的问题。我解决它的方法是使用以下代码:
sources {
main {
manifest {
source {
srcDirs = [ "$buildDir" ]
}
}
}
}