2

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

我似乎根本无法更改默认清单“属性”,有人有运气吗?

4

2 回答 2

0

我有一个类似的问题com.android.tools.build:gradle-experimental:0.7.0-alpha4。我解决它的方法是使用以下代码:

    sources {
        main {
            manifest {
                source {
                    srcDirs = [ "$buildDir" ]
                }
            }
        }
    }
于 2016-06-21T22:18:01.010 回答
0

尝试

      manifest { source { srcDirs = $buildDir } }

这似乎只需要 1 个清单就可以了,但是如果你给它 2 个你想要合并的目录,实验性插件会出错。

(我还猜测您还有其他任务要在 $buildDir 中生成清单,因为这会被干净的任务吹走......)

更新:

次要问题,check[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 clean 没有找到 checkDebugManifest 任务。)

于 2016-06-10T20:52:07.687 回答