Android Gradle Manifest 合并失败

Posted

技术标签:

【中文标题】Android Gradle Manifest 合并失败【英文标题】:Android Gradle Manifest merger failed 【发布时间】:2015-09-12 19:12:42 【问题描述】:

我使用leanback 库为android TV 开发。我的应用程序将最小 API 声明为 16,但将leanback 声明为最小 API 16。 因此,正如文档所述,我在清单中声明了这一点:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:tools="http://schemas.android.com/tools"
          package="com.mypackage.package">

    <uses-sdk tools:overrideLibrary="android.support.v17.leanback" />

但是我仍然有错误:

错误:(6, 5) 任务 ':app:processAdhocProdManifest' 执行失败。

清单合并失败:uses-sdk:minSdkVersion 16 不能小于库 /thepathtotheapp/build/intermediates/exploded-aar/com.android.support/leanback-v17/22.2.0/AndroidManifest.xml 中声明的版本 17 建议:使用 tools:overrideLibrary="android.support.v17.leanback" 强制使用

在 Manifest 合并报告中我可以看到:

MERGED from io.fabric.sdk.android:fabric:1.0.2:7:5
    android:targetSdkVersion
        INJECTED from AndroidManifest.xml:0:0
        INJECTED from AndroidManifest.xml:0:0
    android:minSdkVersion
        INJECTED from AndroidManifest.xml:0:0
        INJECTED from AndroidManifest.xml:0:0
    tools:overrideLibrary
        ADDED from AndroidManifest.xml:21:15
    tools:ignore
        ADDED from com.mixpanel.android:mixpanel-android:4.5.4-RC1:14:9
application
ADDED from AndroidManifest.xml:23:5

所以看起来它正在添加 tools:overrideLibrary 但它仍然失败。

有人知道如何解决这个问题吗?

【问题讨论】:

好吧,tools:overrideLibrary 背后的重点是让您提供一个替换值:tools.android.com/tech-docs/new-build-system/user-guide/… 我看不出您在哪里这样做。 它在我的 build.gradle 文件中指定,我从 build.gradle 文件中删除它并指定: 直接在 AndroidManifest 但我仍然有完全相同的错误。 Hmmmm...我还没有使用过tools:overrideLibrary,所以我希望将值放在&lt;uses-sdk&gt; 中可能会有所帮助。您可以尝试从tools:overrideLibrary="..." 切换到tools:node="replace",理论上应该用您的&lt;uses-sdk&gt; 替换所有低优先级实例。我用过tools:node="replace",但没有用过&lt;uses-sdk&gt; 好主意,但不幸的是:uses-sdk 元素不能有“tools:node”属性。所以我也尝试了“合并”而不是“替换”,但仍然是与以前相同的问题。 好吧,我唯一的另一个想法是错误消息是错误的,并且库的包名是别的东西。但是this SO answer 看起来有这个价值,65 人认为它有帮助。也许自 12 月以来发生了一些变化/中断? 【参考方案1】:

问题来自 Mixpanel 库,Mixpanel 用这个标签定义了它的 AndroidManifest:

<uses-sdk
        android:minSdkVersion="9"
        android:targetSdkVersion="21"
        tools:ignore="GradleOverrides" />

所以我最终放弃了 Mixpanel,比起 10% 的用户,我更愿意放弃它们。

【讨论】:

遇到了同样的问题,但看起来 mixpanel 有一些更新可以解决这个问题? github.com/mixpanel/mixpanel-android/releases 显然是的,您应该更新并尝试一下。我不再使用 Mixpanel... 我可以确认他们的更新 4.8.0 修复了合并冲突。

以上是关于Android Gradle Manifest 合并失败的主要内容,如果未能解决你的问题,请参考以下文章

Android Gradle Manifest 合并失败

Gradle 重复输入错误:META-INF/MANIFEST.MF(或如何从 jar 中删除文件)

构建时 Android Manifest 出现错误

Android manifest 与 facebook 和 firebase 库合并

Android编译gradle 动态修改版本号

Android组件化开发(注意事项)