2017-06-19 32 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方法。應該真的沒有什麼不同。 –

相關問題