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.i
和 Log.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()
,它又调用我的 JAR
的 MyMethod()
,但是在第一次构建之后,我再也看不到那些调试消息了...
您必须使用 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");
}
查看我在 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.i
和 Log.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()
,它又调用我的 JAR
的 MyMethod()
,但是在第一次构建之后,我再也看不到那些调试消息了...
您必须使用 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");
}