gpt4 book ai didi

java - 为什么Unity3d导入jar插件失败?

转载 作者:搜寻专家 更新时间:2023-11-01 09:39:01 28 4
gpt4 key购买 nike

我有一个小型 Unity3d 项目,用于将 JAR 与其集成。我在 Android Studio 库项目 中的(简化的)java 类如下代码所示:

package com.playsqreen.library.api;

... imports ...

public class PlaysreenAPI {

private static PlayscreenAPI _api;

private PlayscreenAPI(Activity activity) {
this.activity = activity;
}

// static method to create singleton
public static PlayscreenAPI build(Activity activity, String key) {
if (_api == null) {
// post processing something
// before returning instance of this class
_api = new PlayscreenAPI(activity);
}
return _api;
}

public String doEchoThis(String msg) {
return "ECHO: " + msg;
}

}

因此,我从 Android Studio 生成了我的 JAR 并将其转储到 ../MyProject/Assets/Plugins/Android 中,然后从 Unity IDE 中我可以看到如下内容:

enter image description here

然后我创建一个如下所示的 C# 脚本来加载我的 java 类:

void Start () {
_builder = new StringBuilder();
try
{
_builder.Append(">>> Step 1\n");
AndroidJavaClass activityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
if (activityClass != null)
{
_builder.Append(">>> Step 2\n");
AndroidJavaObject activity = activityClass.GetStatic<AndroidJavaObject>("currentActivity");
if (activity != null)
{
_builder.Append(">>> Step 3\n");
AndroidJavaClass apiClass = new AndroidJavaClass("com.playsqreen.library.api.PlayscreenAPI");
if (apiClass != null)
{
_builder.Append(">>> Step 4\n");
object[] args = { activity, secretKey };
api = apiClass.CallStatic<AndroidJavaObject>("build", args);
}
}
}
}
catch (System.Exception e)
{
_builder.Append(e.StackTrace.ToString());
}
}

我在 Text UI 对象中打印我的 StringBuilder 以便我捕获我的代码在哪个 Step 停止,结果是在第 3 步,我的 Text UI 对象打印:

java.lang.ClassNotFoundException:com.playsqreen.library.api.PlayscreenAPI and etc...

我在这里找到的一个线程建议我使用 Java Decompiler 来检查 java 类是否真的包含在 Jar 中,来自 this地点。所以我这样做了,Java 反编译器显示我的 java 类确实存在(见下文)

enter image description here

所以我现在真的卡住了。如何从 Unity 加载我的 java 类?请帮忙。

谢谢。

在遵循下面的麦角酸 建议后,我包含了我的自定义 jar 所需的其余 jar,请参见下图。一切都很好:)

enter image description here

最佳答案

您没有发布在运行时收到的完整错误消息。此外,您没有提到打印了哪些调试打印,因此我将尝试提出一些您可以检查的不同问题。希望其中之一可以帮助解决问题:

  • JAR 名称包含“.”(句点字符)。不确定 Unity 如何解释这一点(我自己从未使用过这样的命名约定)。在 Unity 中选择 .JAR 文件并确保 Unity 将其标记为 Android 插件(应该在插件导入器中选择“Android”。为了安全起见,我还会尝试将其重命名为不带任何句点的名称边。
  • 错误调用 Java 方法:在您的示例中,Java 中的静态方法 build 接收单个参数(Activity),但是当您从Unity,您正在传递一个包含 2 个参数的数组。
  • 缺少依赖项:当您的 native Java 代码依赖于其他类(例如:来自其他库)时,如果您没有将这些库包含在您的 .JAR 文件中,您的类将不会被加载在运行时,它将失败并出现神秘错误,例如 NoClassDefFoundException。确保也包含所有依赖项。

**无耻宣传:**我提供服务来修复 Unity 中与 Android 相关的问题。 Check it out here ,以防你感兴趣:)

关于java - 为什么Unity3d导入jar插件失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41053059/

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