在我们将项目导出到Android项目之后,我们将其与我们正在启动游戏的现有项目集成。这工作正常,但Application.Quit()使整个应用程序退出而不仅仅是Unity活动。因此,我们通过将其添加到清单中来使其在不同的流程上启动:
android:process=":UnityKillsMe"
这解决了这个问题,然而,在使用Proguard来混淆代码后,事情就停止了。 Unity仍然正确启动,但是在退出时,应用程序显示Unity停止的崩溃错误,即使应用程序本身仍在工作。重新启动Unity甚至可以正常工作,但在Application.Quit()上,崩溃错误仍然显示。这是错误日志发生时:
12-02 15:01:35.112: E/AndroidRuntime(4342): FATAL EXCEPTION: UnityMain
12-02 15:01:35.112: E/AndroidRuntime(4342): Process: mobi.foo.touch:UnityKillsMe, PID: 4342
12-02 15:01:35.112: E/AndroidRuntime(4342): java.lang.Error: FATAL EXCEPTION [UnityMain]
12-02 15:01:35.112: E/AndroidRuntime(4342): Unity version : 5.2.3f1
12-02 15:01:35.112: E/AndroidRuntime(4342): at com.unity3d.player.UnityPlayer.nativeDone(Native Method)
12-02 15:01:35.112: E/AndroidRuntime(4342): at com.unity3d.player.UnityPlayer.f(Unknown Source)
12-02 15:01:35.112: E/AndroidRuntime(4342): at com.unity3d.player.UnityPlayer.g(Unknown Source)
12-02 15:01:35.112: E/AndroidRuntime(4342): at com.unity3d.player.UnityPlayer$15.run(Unknown Source)
12-02 15:01:35.112: E/AndroidRuntime(4342): at com.unity3d.player.UnityPlayer.executeGLThreadJobs(Unknown Source)
12-02 15:01:35.112: E/AndroidRuntime(4342): at com.unity3d.player.UnityPlayer$b.run(Unknown Source)
12-02 15:01:35.122: E/ActivityManager(890): App crashed! Process: mobi.foo.touch:UnityKillsMe
如何解决这个问题?是什么导致了这个问题?
答案 0 :(得分:1)
我刚刚遇到了确切的问题并设法解决了。
如果在Unity3D中调用Application.Quit(),则在单独进程中启动的Proguard + Unity3D将崩溃。解决方案:通过本机销毁Unity3D应用程序退出。
<强> Unity3D:强>
// Add this code in, replace Application.Quit() to AndroidQuit()
void AndroidQuit(){
AndroidJavaClass myClass = new AndroidJavaClass("com.yourpackagenamehere.UnityPlayerActivity");
AndroidJavaObject activity = myClass.GetStatic<AndroidJavaObject>("UnityActivity");
activity.Call("QuitUnity");
}
Android项目:
// In UnityPlayerActivity.java
// Declare static object for Unity to make calls from
public static Context UnityActivity;
// Instantiate it in the onCreate Method right after super.onCreate
UnityActivity = this;
// Add the following method for Unity3D function to trigger the Quit
public void QuitUnity() {
android.os.Process.killProcess(android.os.Process.myPid());
//finish();
//this.onDestroy();
}
修改强> 更新项目后,this.OnDestroy()和finish()将显示崩溃对话框。 android.os.Process.killProcess()效果很好。
然而直接杀死这个过程效果很好。
另一方面,崩溃的原因之一可能是由于我使用了渲染纹理和logcat中的以下统一错误表面。
Destroying active render texture. Switching to main context.