Unity 应用仅在第一个 android 构建时调用一次 jar

Unity app calling jar only once on the first android build

查看我在 Terminal 中使用 $ adb logcat -s "app"$ adb logcat -s Unity 的调试消息,我注意到我的 JAR 文件只被查询 一次 当我 首先 将我的应用程序构建到 Android (.APK) 但每次之后我只是 run 我的应用程序,插件-in 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 消息使用 $ 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(),它又调用我的 JARMyMethod(),但是在第一次构建之后,我再也看不到那些调试消息了...

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

Java:

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");
}