使用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.i
和Log.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}},但在第一次构建之后,我从未看到这些调试消息再次...
答案 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");
}