Unity AndroidJavaObject 无法正常工作而不显示错误

Posted

技术标签:

【中文标题】Unity AndroidJavaObject 无法正常工作而不显示错误【英文标题】:Unity AndroidJavaObject not working without showing errors 【发布时间】:2020-06-29 05:06:38 【问题描述】:

我一直在尝试统一调用 Java 方法。不适合我,即使是文档中最简单的例子

using System.Collections;
using UnityEngine;

public class ExampleClass : MonoBehaviour 
    void Start () 
        androidJavaObject jo = new AndroidJavaObject ("java.lang.String", "some string");
        int hash = jo.Call<int> ("hashCode");
        Debug.Log ("hash=" + hash);
    

Unity 控制台打印hash=0,这不是提供的字符串的哈希码。即使我更改并使用java.lang.StringInvalidClass 作为类名,unity 仍然会向控制台报告相同的结果而不会通知错误。我什至可以尝试调用 toString、toStringa、toInvalid2,它们总是返回空字符串而不会显示错误。

这是一个全新的 2d 项目,上面仅显示脚本,附加到 camara 对象。我使用的是 Ubuntu,Unity 2019.4,项目平台是 Android。

感谢您的帮助。

【问题讨论】:

"fails without errors",要么有错误,要么没有失败。也许它没有做你期望它做的事情,但这并不意味着它失败了。更有可能是代码的问题。您可能想检查一下:codejava.net/coding/… 据我从统一文档中看到的AndroidJavaObject 类和Call 方法都期望第二个参数是array。不确定字符串在这种情况下是否符合字符数组的条件。 嗨@stultuske。如前所述,即使我使用 java.lang.StringInvalidClass,统一打印也是一样的。当然 StringInvalidClass 不存在,它应该抛出一个错误。因此,有些事情在控制台中没有实际抛出或显示错误就失败了。为了避免复杂性,我使用了一个简单的示例。 嗨@user3647971。是的,AndroidJavaObject 和 Call 使用数组作为第二个参数,但如果不需要参数或只需要一个参数,则可以不提供它而只提供一个。其实提供的代码是直接从uninty docs复制过来的:docs.unity3d.com/es/530/ScriptReference/… @Jhovanni 我注意到文档适用于旧版本的统一。 See here 应该包含在UnityEngine.AndroidJNIModule 中。可能不是问题,但值得一试。 【参考方案1】:

在与 unity 合作一段时间后回答自己。

web 和 unity 文档中的所有示例都没有提及它,这很奇怪,因为它很容易提及并且关于混淆:代码需要作为 android 应用程序运行。编辑器甚至unity remote都不起作用,为了使用AndroidJavaObject和相关类,您的代码需要作为安装在手机中的android应用程序运行

【讨论】:

以上是关于Unity AndroidJavaObject 无法正常工作而不显示错误的主要内容,如果未能解决你的问题,请参考以下文章

用于 C# .Net 框架的 AndroidJavaClass 和 AndroidJavaObject

Unity中调用Android jar包或arr包方法

Unity 接入Android SDK-小米sdk

Unity工程无代码化

unity 登录注册页面数据传递(无数据库)

[Unity 3d] 使用 Unity 开发无边框可拖拽缩放置顶最小化的应用