gpt4 book ai didi

unity3d - 统一错误 : Unable to convert classes into dex format

转载 作者:行者123 更新时间:2023-12-01 11:20:25 26 4
gpt4 key购买 nike

我创建了一个 Android Unity 插件(.aar 文件),它为我的 Unity 游戏提供了一些自定义定位数据。在我的 Unity 脚本中,我使用
var x = customClass.CallStatic<float>("getHeadX");
为了得到一些位置数据。此方法每帧调用一次以获取更新的数据(轮询方法),这使其效率低下。相反,当更新的数据准备好时,我决定从我的 java 代码(插件端)调用 Unity 脚本中的 C# 方法。为此,在我的 java 插件中,我写道,

import com.unity3d.player.UnityPlayer;
...
UnityPlayer.UnitySendMessage("Manager", // gameObject name
"PluginCallback", // this is a callback in C#
"Hello from android plugin"); // msg which is not needed actually

但是,编译器提示包 com.unity3d.player.UnityPlayer 不存在。所以我从

C:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes \classes.jar



进入我的android插件项目的'libs'文件夹。我成功构建它并将生成的 .aar 文件(mylibrary-release.aar)复制到我的 Unity 项目的 Assets\Plugins\Android 文件夹中。

当我构建 Unity 项目(使用“内部”构建系统)时,它给了我这个错误:

IOException: Failed to Move File / Directory from 'Temp/StagingArea\android-libraries\mylibrary-release\classes.jar' to 'Temp/StagingArea\android-libraries\mylibrary-release\libs\classes.jar'. UnityEditor.Android.PostProcessor.Tasks.ProcessAAR.Execute ...



发生此错误是因为 classes.jar 依赖项与 classes.jar 名称冲突(由我的插件统一制作)。所以我把依赖名改成了 unity_classes.jar 这解决了这个问题,但现在我在构建我的统一应用程序时遇到了一个新错误:

CommandInvokationFailure: Unable to convert classes into dex format. C:/Program Files/Java/jdk1.8.0_102\bin\java.exe -Xmx2048M Dcom.android.sdkmanager.toolsdir="C:/Users/kamran.shamloo/AppData/Local/Android/Sdk\tools" -Dfile.encoding=UTF8 -jar "C:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\sdktools.jar"

stderr[ Uncaught translation error: java.lang.IllegalArgumentException: already added: Lbitter/jnibridge/JNIBridge; Uncaught translation error: java.lang.IllegalArgumentException: already added: Lbitter/jnibridge/JNIBridge$a; Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/unity3d/player/NativeLoader; Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/unity3d/player/ReflectionHelper; Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/unity3d/player/ReflectionHelper$1; Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/unity3d/player/ReflectionHelper$a; Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/unity3d/player/UnityPlayer; Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/unity3d/player/UnityPlayer$1; Uncaught translation error: java.lang.IllegalArgumentException: already added: Lcom/unity3d/player/UnityPlayer$10; ...

最佳答案

classes.jar(您后来将其重命名为“unity_classes.jar”)会自动包含在构建的.apk 中。通过团结 ,所以你不应该再自己包含它(在你的 Android 插件中),即使使用不同的名称 .

换句话说,首先你的 android 插件将这个 .jar 文件“嵌入”到自身内部。然后,当 Unity 将您的插件添加到游戏项目中时,它还会添加自己的 .jar 文件副本(它对所有 android 项目都这样做)。因此,Unity 最终在项目中拥有相同 .jar 文件的 2 个副本,并提示说“无法将类转换为 dex 格式”。

因此,尽管您必须在项目中使用此库(.jar 文件),但您不应将此库与您的项目捆绑在一起。怎么做?如果您使用的是 Android Studio,您可以通过使用 provided scope 将 .jar 文件标记为依赖项来实现此目的。 .

为此,您可以:

1)转到模块的“build.gradle”并更改:

compile files('libs/jars/unity_classes.jar')

对此:
provided files('libs/jars/unity_classes.jar')

或者

2) 您可以右键单击模块(在 Android Pane 中)并选择 打开模块设置 .那就去 依赖 标签。找到 Unity 模块(我将其重命名为 unity_classes.jar)并将其范围更改为 提供 .

关于unity3d - 统一错误 : Unable to convert classes into dex format,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44468420/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com