gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 12:53:26 24 4
gpt4 key购买 nike

我在 Unity 中有代码,它使用 AndroidJavaClass 和 AndroidJavaObject 调用在 Java 中为 Android 编写的函数,我想将此代码传递给 C# .Net 中的 dll,但我找不到使用 C# .Net 调用 Java 函数的简单方法由于 AndroidJavaObject 和 AndroidJavaClass 类是 Unity dll 独有的,这里是我的代码示例:
Java(安卓):

public class DeviceManager {
public interface DeviceListener {
void DoSomething();
}

private DeviceListener deviceListener;

public DeviceManager(DeviceListener deviceListener){
this.deviceListener = deviceListener;
}

public String[] getSomeData(){
return new String[]{};
}
}
C#(统一):
public class DeviceListener : AndroidJavaProxy
{
DeviceManager deviceManager;

public DeviceListener(DeviceManager manager) : base("com.myapp.DeviceManager$DeviceListener")
{
this.deviceManager = manager;
}

public void DoSomething();
}

public class DeviceManager
{
private AndroidJavaObject jo;

public DeviceManager(){
jo = new AndroidJavaObject("com.myapp.DeviceManager", new DeviceListener(this));
}

public string[] GetData(){
AndroidJavaObject returnedData = jo.Call<AndroidJavaObject>("getSomeData");
return AndroidJNIHelper.ConvertFromJNIArray<string[]>(returnedData.GetRawObject());
}
}
在 C# .Net 而不是 Unity 中执行该示例的最佳方法是什么?
编辑:我的主要问题与了解如何从 .NET Framework 中的 .aar 文件获取对象和调用函数有关,该文件位于 Unity 的 dll C# 文件中
编辑 2:我找到了一些关于 Xamarin 的信息,也许这就是我要找的?: https://github.com/xamarin/monodroid-samples/tree/master/JavaIntegration/AarBinding但即使我可以将 .aar 文件链接到 C# 中的 dll,但它并不能以最佳方式回答我的问题,以创建与上述示例相同的代码
编辑 3:目前,为了解决这个问题,我在我的 Visual Studio 项目中使用 UnityEngine .dll,但我想生成一个用于其他图形引擎的 .dll,所以我希望能够找到与使用 Unity 自己的 .dll 不同的解决方案。 dll 来解决这个问题,因此我提到了 Xamarin,因为它是与 Android (Java) 进行通信的好方法,但我没有找到任何在 Visual Studio 中创建的移动应用程序之外使用它的示例,因为在我的情况下,我需要从 .aar 文件中获取对象和调用函数

最佳答案

似乎您正在寻找使用 AAR 插件,我自己没有做过,但 Unity 在 how to integrate it in your project 上有一个文档.
然后,一旦该库在 Android Studio 中编译并集成到 Unity 中,您可以查看 this example on how to call it from C# code .
我自己没有做过,但这个例子应该让你走上正轨。
关于脚本后端,我认为它不会对此产生任何影响。
编辑
添加了示例的摘录

Assets / Plugins / AndroidPlace your native android .AAR file inside this folder.Now let’s write some code to call the plugin.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NativeCodeRunner : MonoBehaviour
{
void Start(){
CallNativePlugin();
}
//method that calls our native plugin.
public void CallNativePlugin()
{
// Retrieve the UnityPlayer class.
AndroidJavaClass unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
// Retrieve the UnityPlayerActivity object ( a.k.a. the current context )
AndroidJavaObject unityActivity = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity");

// Retrieve the "Bridge" from our native plugin.
// ! Notice we define the complete package name.
AndroidJavaObject alert = new AndroidJavaObject("plugins.vsoft.com.library.Alert");

// Setup the parameters we want to send to our native plugin.
object[] parameters = new object[2];
parameters[0] = unityActivity;
parameters[1] = "Hello World!";

// Call PrintString in bridge, with our parameters.
alert.Call("PrintString", parameters);
}
}

关于java - 用于 C# .Net 框架的 AndroidJavaClass 和 AndroidJavaObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69361041/

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