如何使用实验性gradle插件0.7.x移动AndroidManifest.xml文件?

时间:2016-06-09 08:06:40

标签: gradle-experimental

在使用实验性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.`

我似乎无法更改默认清单"属性"总之,谁都有运气?

2 个答案:

答案 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" ]
                }
            }
        }
    }