我正在使用新的 gradle android 构建系统。
该项目由两个android库项目和一个主项目组成。
使用 ant 构建,必须在 project.properties 中启用清单合并。但是在使用 gradle 构建系统时,默认情况下会启用清单合并。如何禁用清单合并?
我正在使用新的 gradle android 构建系统。
该项目由两个android库项目和一个主项目组成。
使用 ant 构建,必须在 project.properties 中启用清单合并。但是在使用 gradle 构建系统时,默认情况下会启用清单合并。如何禁用清单合并?
编辑:这实际上是可能的,虽然是间接的,从 0.3 开始
您需要做的是禁用 processManifest 任务,使其不会运行并告诉 processResources 要使用的清单在哪里:
android.applicationVariants.all { variant ->
variant.processResources.manifestFile = file('src/main/AndroidManifest.xml')
variant.processManifest.enabled=false
}
请注意,如果您通过 DSL 自定义应用程序包名称,则应在默认位置保持默认清单不变,以便为 R 类提供一致的包名称,然后将手动合并的清单放在其他位置并指向每个变体 processResources交给他们的任务。
这可能会有所帮助。
android.applicationVariants.all{ variant ->
variant.outputs.each { output ->
output.processResources.manifestFile = file('AndroidManifest.xml')
output.processManifest.enabled=false
}
}
对于 0.6.+ 插件,您还必须从更改buildVariants
为applicationVariants
:
android.applicationVariants.all { variant ->
variant.processResources.manifestFile = file('src/main/AndroidManifest.xml')
variant.processManifest.enabled=false
}
看起来这些解决方案不适用于 1.0 插件:
在 com.android.build.gradle.internal.api.ApplicationVariantImpl_Decorated@774f1d0b 上找不到属性“processResources”。
有人有更新吗?我们的问题是 recyclerview-v7:21.0.3 的最终 apk 中出现了一个杂散活动:
<activity
android:label="RecyclerViewTestActivity"
android:name="android.support.v7.widget.TestActivity"/>
更新:看起来可以配置清单合并(请参阅http://tools.android.com/tech-docs/new-build-system/user-guide/manifest-merger)。在这种特定情况下,来自 recyclerview-v7 库的 TestActivity 可以通过以下方式删除:
<activity
android:name="android.support.v7.widget.TestActivity"
android:label="RecyclerViewTestActivity"
tools:node="remove"/>
谢谢菲利普。
对于 0.5.+ 插件,您必须从更改each
为all
:
android.buildVariants.all { variant ->
variant.processResources.manifestFile = file('src/main/AndroidManifest.xml')
variant.processManifest.enabled=false
}