我对可能发生的情况有所了解,但没有立即测试此解决方案的方法。
您的构建中似乎包含两个 Google gson library 副本。检查mapbox-unity-sdk_v2.1.1,我看到有一个文件gson-2.8.5.jar包含在unity包中。由于构建显然包含 gson 作为副作用,因此删除此文件可能会很好。但我怀疑也包含在内的支持库可能会导致问题。
鉴于此,我会建议三种补救途径:
1) 您可能希望使用 Unity 的外部依赖管理器为您解析这些文件。这包含在 Firebase SDK 中(并且是一个完全开源的项目,因此您可能希望 MapBox 将来使用它)。
我会推荐reading this article 以完全了解正在发生的事情,但您要做的是在编辑器文件夹中创建一个MapboxDependencies.xml 文件(例如:Assets/Mapbox/Editor/MapboxDependencies.xml)并包含Mapbox/Core/Plugins/Android 下的所有依赖项:
<dependencies>
<androidPackages>
<androidPackage spec="com.google.code.gson:gson:2.8.6"/>
</androidPackages>
</dependencies>
完成后删除相关的 jar/aar 文件。
请注意,您必须为这些追踪 maven 存储库,否则我会为您包含一个完整的 xml 文件。
现在可能导致您出现问题的库都是支持库。看起来 Mapbox 可能仍在使用 Android Jetpack 之前的旧支持库。有mappings here,所以我会先为您检查一下他们的 Dependencies.xml 条目:
<dependencies>
<androidPackages>
<androidPackage spec="com.google.code.gson:gson:2.8.6"/>
<androidPackage spec="androidx.appcompat:appcompat:1.1.0"/>
<androidPackage spec="androidx.legacy:legacy-support-core-ui:1.1.0"/>
<androidPackage spec="androidx.legacy:legacy-support-core-utils:1.1.0"/>
<androidPackage spec="androidx.media:media:1.1.0"/>
<androidPackage spec="androidx.legacy:legacy-support-v4:1.1.0"/>
<androidPackage spec="androidx.vectordrawable:vectordrawable:1.1.0"/>
</androidPackages>
</dependencies>
您通常会遇到的另一个问题是,在正常情况下,您必须重新编译所有依赖旧支持库的库才能引用新的 androidx 库。 Jetpack 确实附带了一个名为 Jetifier 的工具,如果您在外部依赖管理器中启用它,它应该会自动执行此操作:
尽管您可能会在 Unity 2019.3 及更高版本的某些配置上遇到this issue(问题线程中的解决方法)。
2) 或者,您可以添加mainTemplate.gradle 来实现相同的目标。我建议使用 ExternalDependencyManager,但是通过删除 aar/jar 库并将它们作为依赖项添加到 mainTemplate 中,您将有效地实现相同的结果。
3) 如果您在没有 mainTemplate.gradle 的情况下解决依赖关系 - 所有 Firebase 的 aar/jar 文件都将添加到 Assets/Plugins/Android/Firebase。如果您删除了与 Mapbox 库的所有冲突,您可能会遇到相同的问题。这对我来说感觉有点危险,并且支持库可能更难使用(例如,您必须自己追踪 androidx 库) - 但如果依赖管理器是新的,则可能会删除一些移动部分给你。
希望对大家有所帮助!
--帕特里克