如果刚从旧系统切换到 Gradle 并从新系统导出 Android 项目,可能会遇到构建错误,尤其是在使用其他 Android 库或者添加了自定义 AndroidManifest.xml 的情况下。
Android Gradle 插件远比旧的 ADT/Ant 系统更挑剔。它不接受 任何它认为有错的内容,无论是重复的符号、对不存在资源的引用 还是与主应用程序设置相同属性的库项目。
在大多数情况下,修复此类问题涉及编辑 AndroidManifest.xml 文件;要么是主文件, 要么是项目使用的库中的文件。
在不寻常的项目中,或者如果项目有下方故障排除部分未描述的问题, 请将项目导出为 Gradle 项目(通过 __Build Settings__)并从命令行进行构建。从命令行进行构建可提供更详细的错误消息,并在应用更改时提供更短的周转时间。
一个 AndroidManifest.xml 文件(主文件或库中的文件)引用不存在的 资源。通常,该资源是由库设置的应用程序图标或标签字符串。如果 已将主清单复制到库项目但未删除这些引用,则会发生这种情况。
从其中一个 Android 清单(通常是库中的清单)中删除该属性。
AndroidManifest.xml
文件中将指定 android:minSdkVersion
属性。该属性可以在主清单文件中,也可以在被 Unity 视为 Android 库的目录之一中的文件中。.aar 插件应该不会造成此问题。
解决方案是从主清单中和/或库目录中的清单中删除 uses-sdk android:minSdkVersion
元素。然后,应该在 build.gradle
文件中指定最低 SDK 版本来取代该元素。如果没有自定义的 Gradle 模板,则 Unity 将自动处理此情况。如果有自定义的 Gradle 模板,请确保在该模板的 defaultConfig
部分中指定了 minSDK。
主应用程序和库项目之间或两个库项目之间存在 文件名冲突。请注意,所有文件都会复制到同一 APK 包中。
需要删除其中一个文件。
库不能使用与主应用程序或任何其他库相同的 Java 包。
通常,应将库的包名称更改为其他不同的名称。如果库 包含大量代码,可能更容易更改主包名称(通过 Player 设置)。
库无法自由覆盖主 AndroidManifest.xml
文件中的属性。通常,此错误是由设置应用程序图标或标签字符串的库引起的,类似于上面的__找不到资源__问题。
从库中删除属性,或者将 tools:replace 属性添加到 application 标签以指示应如何解决合并冲突。