2017-06-19 35 views
0

使用$ adb logcat -s "app"$ adb logcat -s UnityTerminal看着我调试消息一次,我已经注意到,我的JAR文件只咨询一次当我第一建立我的应用程序Android.APK)但每次以后,我只是run我的应用程序,插件JAR文件没有咨询。这是为什么?统一的应用程序调用的jar只在第一款Android构建

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代码,我看到使用$ 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 
    } 
} 

每次我在平板电脑上运行我的应用程序的Debug.Log消息,脚本调用MyUnityMethod()然后调用我的JARMyMethod(),但在第一次构建之后,我再也看不到这些调试消息了......

回答

1

您必须使用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"); 
} 
+1

“你必须使用AndroidJavaClass而不是AndroidJavaObject” - 我不认为这是正确的。您可以使用AndroidJavaObject实例调用静态方法。 –

+1

是的,可以根据doc示例使用'AndroidJavaObject',但我个人也遇到了问题。当我切换到“AndroidJavaClass”时,问题就消失了。我从此一直使用'AndroidJavaClass'。这就是为什么我鼓励OP使用对我有用的东西。 – Programmer

+1

AndroidJavaClass是从AndroidJavaObject派生的。此外,它没有定义任何新的方法(构造函数除外)。当你调用CallStatic时,你正在有效地调用AndroidJavaObject方法。应该真的没有什么不同。 –

相关问题