Unity应用程序在第一个android构建时只调用jar一次

时间:2017-06-19 12:09:55

标签: android unity3d jar logcat

使用Terminal$ adb logcat -s "app"查看$ adb logcat -s Unity中的调试消息,我注意到我的JAR文件仅在一次时进行了咨询我首先将我的应用构建到Android.APK),但每次我只是run我的应用,插件JAR文件没有咨询。那是为什么?

public class MyClass
{
    public static void MyMethod()
    {
        Log.i("app", "MyMethod entered");

        if (blah)
        {
            Log.d("app", "If entered");
        }
        else
        {
            Log.e("app", "Else entered");
        }

        blah
    }
}

使用$ adb logcat -s "app"我看到了Log.iLog.d条消息,在我的Unity3D代码中,我看到了使用Debug.Log的{​​{1}}消息

$ adb logcat -s Unity

每次我在平板电脑上运行我的应用时,脚本会调用public class MyUnityClass : MonoBehaviour { public static void MyUnityMethod() { #if UNITY_ANDROID try { using ( AndroidJavaObject androidJavaObject = new AndroidJavaObject("com.example.unityplugin.MyClass") ) { if (androidJavaObject != null) { androidJavaObject.CallStatic("MyMethod"); Debug.Log("androidJavaObject != null SUCCESS!"); } } } catch (Exception e) { Debug.LogException(e); } #endif } } ,而MyUnityMethod()会调用MyMethod()的{​​{1}},但在第一次构建之后,我从未看到这些调试消息再次...

1 个答案:

答案 0 :(得分:1)

您必须使用AndroidJavaClass代替AndroidJavaObject。此外,不要每次都创建和销毁对象。请勿使用using语句将代码括起来。只需将变量声明为全局变量,然后重新使用它。

<强>爪哇

public class MyClass
{

    public static void MyMethod()
    {
        Log.i("app", "MyMethod entered");
    }
}

<强> C#

AndroidJavaClass customClass;

void Start()
{
    //Replace with your full package name
    customClass = new AndroidJavaClass("com.example.unityplugin.MyClass");

    //Call function
    MyMethod();
}

public void MyMethod()
{
    customClass.CallStatic("MyMethod");
}

如果您需要MyMethod函数是静态的,那么也可以customClass变量static

<强> C#

static AndroidJavaClass customClass;

void Start()
{
    //Replace with your full package name
    customClass = new AndroidJavaClass("com.example.unityplugin.MyClass");

    //Call function
    MyMethod();
}

public static void MyMethod()
{
    customClass.CallStatic("MyMethod");
}