条目名称 'AndroidManifest.xml' 冲突(将 android gradle 插件更新到 3.6.0 后构建失败)
Entry name 'AndroidManifest.xml' collided (Build failed after updating the android gradle plugin to 3.6.0)
我最近将 Android Studio 从 3.5(稳定)更新到 3.6(稳定)。
然后我看到插件更新也可用,所以我将“com.android.tools.build:gradle”的版本从3.5.0更新到3.6.0,也更新了gradle 版本升级到 5.6.4.
现在,当我尝试构建项目时,问题就出现了;它失败并显示消息 Entry name 'AndroidManifest.xml' collided
我通过将此添加到应用的 build.gradle:
找到了解决方法
android {
packagingOptions {
exclude 'AndroidManifest.xml'
}
}
由于 Facebook 的 Audience Network,我用这个来解决在 Android Studio 3.5 上创建捆绑包的问题。
我收到类似的错误:条目名称 'resources.arsc' 发生冲突。正如@Marco Batista 所说的解决方法:
android {
packagingOptions {
exclude 'resources.arsc'
}
}
这是由 Android Gradle 插件 3.6
引起的
通过在您的 gradle.properties
文件中包含以下内容来恢复使用旧的打包工具将解决此问题
android.useNewApkCreator=false
更多信息请查看发行说明:
https://developer.android.com/studio/releases/gradle-plugin#zipflinger
我遇到了 AndroidManifest.xml
文件冲突的相同问题。首先,我尝试了 useNewApkCreator
解决方法,它适用于我正在处理的应用变体。但是当我切换到另一个变体时,构建仍然成功但应用程序拒绝从 Android Studio 安装。手动安装 .apk 也会在设备上出现解析错误。
最后,我分析了两个变体的 .apk,发现损坏的 .apk 中有错误的 AndroidManifest.xml。排除 packagingOptions
中的清单虽然有效。
根据 issue 当 JAR 依赖项包含 AndroidManifest.xml
文件时会发生这种情况。
对于我的项目,原因是这个旧的依赖项:
androidTestImplementation 'com.google.android:android-test:4.1.1.4'
它依赖于 com.google.android:android:4.1.1.4
,它在 JAR 中有一个 AndroidManifest.xml
。
我是怎么找到它的
我在 $HOME\.gradle\caches\modules-2\files-2.1
中搜索了包含 AndroidManifest.xml
的所有 .jar
个文件(我使用了 Total Commander)
然后我将结果与我的应用程序的依赖项交叉引用。
要获取依赖关系树,请使用 Gradle 工具 window 到 运行 Tasks/android/androidDependencies gradle 任务。
解决这个问题的方法很少。
将 build.gradle 版本还原为 3.5.3
dependencies {
// classpath 'com.android.tools.build:gradle:3.6.1'
classpath 'com.android.tools.build:gradle:3.5.3'
}
在app/build下添加包装选项。gradle
android {
...
packagingOptions {
exclude 'AndroidManifest.xml'
}
}
在 gradle.properties 下,将 useNewApkCreator 设置为 false。添加此标志可能会导致一些 apk 安装问题。
android.useNewApkCreator=false
最后的办法,通过第三方库进行扫描。检查 androidx.core:core-ktx 插件。尝试更新到 1.2.0 或更高版本。
我试过
android.useNewApkCreator=false
这是一个快速的胜利,因为我能够编译,但是 AndroidManifest.xml 仍然是错误的。我发现是因为我需要对 APK 应用强化过程并且该工具抱怨 AndroidManifest.xml.
这是因为,正如其他人所解释的那样,APK 没有其清单,而是来自依赖项的清单。
我发现通过使用 Android Studio (build/analize APK) 分析 APK,这让我找到了问题所在。
Marco Batista 的解决方案很有用,但我将其放在依赖项的 gradle 而不是应用程序的
android {
packagingOptions {
exclude 'AndroidManifest.xml'
}
}
我最近将 Android Studio 从 3.5(稳定)更新到 3.6(稳定)。
然后我看到插件更新也可用,所以我将“com.android.tools.build:gradle”的版本从3.5.0更新到3.6.0,也更新了gradle 版本升级到 5.6.4.
现在,当我尝试构建项目时,问题就出现了;它失败并显示消息 Entry name 'AndroidManifest.xml' collided
我通过将此添加到应用的 build.gradle:
找到了解决方法android {
packagingOptions {
exclude 'AndroidManifest.xml'
}
}
由于 Facebook 的 Audience Network,我用这个来解决在 Android Studio 3.5 上创建捆绑包的问题。
我收到类似的错误:条目名称 'resources.arsc' 发生冲突。正如@Marco Batista 所说的解决方法:
android {
packagingOptions {
exclude 'resources.arsc'
}
}
这是由 Android Gradle 插件 3.6
引起的通过在您的 gradle.properties
文件中包含以下内容来恢复使用旧的打包工具将解决此问题
android.useNewApkCreator=false
更多信息请查看发行说明: https://developer.android.com/studio/releases/gradle-plugin#zipflinger
我遇到了 AndroidManifest.xml
文件冲突的相同问题。首先,我尝试了 useNewApkCreator
解决方法,它适用于我正在处理的应用变体。但是当我切换到另一个变体时,构建仍然成功但应用程序拒绝从 Android Studio 安装。手动安装 .apk 也会在设备上出现解析错误。
最后,我分析了两个变体的 .apk,发现损坏的 .apk 中有错误的 AndroidManifest.xml。排除 packagingOptions
中的清单虽然有效。
根据 issue 当 JAR 依赖项包含 AndroidManifest.xml
文件时会发生这种情况。
对于我的项目,原因是这个旧的依赖项:
androidTestImplementation 'com.google.android:android-test:4.1.1.4'
它依赖于 com.google.android:android:4.1.1.4
,它在 JAR 中有一个 AndroidManifest.xml
。
我是怎么找到它的
我在 $HOME\.gradle\caches\modules-2\files-2.1
中搜索了包含 AndroidManifest.xml
的所有 .jar
个文件(我使用了 Total Commander)
然后我将结果与我的应用程序的依赖项交叉引用。 要获取依赖关系树,请使用 Gradle 工具 window 到 运行 Tasks/android/androidDependencies gradle 任务。
解决这个问题的方法很少。
将 build.gradle 版本还原为 3.5.3
dependencies { // classpath 'com.android.tools.build:gradle:3.6.1' classpath 'com.android.tools.build:gradle:3.5.3' }
在app/build下添加包装选项。gradle
android { ... packagingOptions { exclude 'AndroidManifest.xml' } }
在 gradle.properties 下,将 useNewApkCreator 设置为 false。添加此标志可能会导致一些 apk 安装问题。
android.useNewApkCreator=false
最后的办法,通过第三方库进行扫描。检查 androidx.core:core-ktx 插件。尝试更新到 1.2.0 或更高版本。
我试过
android.useNewApkCreator=false
这是一个快速的胜利,因为我能够编译,但是 AndroidManifest.xml 仍然是错误的。我发现是因为我需要对 APK 应用强化过程并且该工具抱怨 AndroidManifest.xml.
这是因为,正如其他人所解释的那样,APK 没有其清单,而是来自依赖项的清单。 我发现通过使用 Android Studio (build/analize APK) 分析 APK,这让我找到了问题所在。 Marco Batista 的解决方案很有用,但我将其放在依赖项的 gradle 而不是应用程序的
android {
packagingOptions {
exclude 'AndroidManifest.xml'
}
}