android - 集成到不同 Android 应用程序中的 Unity Android 在 Application.Quit() 上崩溃

标签 android unity-game-engine android-proguard

将项目导出到 Android 项目后,我们将其与我们从中启动游戏的现有项目集成。这工作正常,但 Application.Quit() 使整个应用程序退出而不仅仅是 Unity Activity 。所以我们通过将其添加到 list 中使其在不同的进程上启动:

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

如何解决?是什么导致了这个问题?

最佳答案

我刚刚遇到了确切的问题并设法解决了它。

如果在 Unity3D 中调用 Application.Quit(),Proguard + Unity3D 在单独的进程中启动将崩溃。

解决方案:通过 native 销毁它来退出 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.

关于android - 集成到不同 Android 应用程序中的 Unity Android 在 Application.Quit() 上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34044885/

相关文章:

android - 无法膨胀行为子类 android.support.design.widget.AppBarLayout$ScrollingViewBehavior

android - Proguard 剥离了实现接口(interface)。运行时引发 java.lang.IncompleteClassChangeError

android - 为 fragment 制作自定义 ListView ?

java - 使 Enum.toString() 本地化

android - 从 ListView 获取 EditText 值

unity-game-engine - 简单地获取 Cg 着色器内对象的缩放

java - 将回调作为参数传递给 Android 中的抽象 setOnClickListener

unity-game-engine - 如何在unity 5.3.x中控制oculus旋转和位置

c# - 使用协程循环

facebook - 梯度构建统一期间的 FB.Init() 错误