如何使用实验性 gradle 插件 0.7.x 移动 AndroidManifest.xml 文件?
How can I move the AndroidManifest.xml file with the experimental gradle plugin 0.7.x?
我试图在使用实验性 gradle 插件版本 0.7.x 时更改 AndroidManifest.xml 文件的位置。这样做的原因是我生成了文件(因为实验插件中没有清单 merger/property 替换器)所以我不想要输出文件和源代码。
我的应用程序 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.`
我似乎根本无法更改默认清单 "property",有人运气好吗?
尝试
manifest { source { srcDirs = $buildDir } }
这似乎只用 1 个清单就可以了,但是如果你给它 2 个要合并的目录,实验性插件就会 barfs。
(我还猜测您还有一些其他任务要在 $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 and/or checkReleaseManifest 任务将要发生时添加它(我在 ./gradlew clean 没有它的情况下找不到 checkDebugManifest 任务时遇到了麻烦。)
我遇到了与 com.android.tools.build:gradle-experimental:0.7.0-alpha4
类似的问题。我解决它的方法是使用以下代码:
sources {
main {
manifest {
source {
srcDirs = [ "$buildDir" ]
}
}
}
}
我试图在使用实验性 gradle 插件版本 0.7.x 时更改 AndroidManifest.xml 文件的位置。这样做的原因是我生成了文件(因为实验插件中没有清单 merger/property 替换器)所以我不想要输出文件和源代码。
我的应用程序 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.`
我似乎根本无法更改默认清单 "property",有人运气好吗?
尝试
manifest { source { srcDirs = $buildDir } }
这似乎只用 1 个清单就可以了,但是如果你给它 2 个要合并的目录,实验性插件就会 barfs。
(我还猜测您还有一些其他任务要在 $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 and/or checkReleaseManifest 任务将要发生时添加它(我在 ./gradlew clean 没有它的情况下找不到 checkDebugManifest 任务时遇到了麻烦。)
我遇到了与 com.android.tools.build:gradle-experimental:0.7.0-alpha4
类似的问题。我解决它的方法是使用以下代码:
sources {
main {
manifest {
source {
srcDirs = [ "$buildDir" ]
}
}
}
}