为 UnityPlayerActivity 设置 android:launchmode

Posted

技术标签:

【中文标题】为 UnityPlayerActivity 设置 android:launchmode【英文标题】:Setting android:launchmode for UnityPlayerActivity 【发布时间】:2018-11-25 10:47:10 【问题描述】:

我正在 Unity 上构建一个 android 游戏,它有一个用于打开新活动的按钮。

问题是在构建 APK 时,无论我在自定义 AndroidManifest.xml 中添加什么,Unity 都会覆盖它并将 com.unity3d.player.UnityPlayerActivity 的 android:launchMode 设置为 singleTask

这会导致以下情况:打开游戏,点击打开 Activity 的按钮,点击主页按钮进入后台,使用图标重新启动应用程序 - 新的 Activity 被破坏,而我看到的是相同的主UnityPlayerActivity(它与原来的相同 - 没有重新创建任何内容)。

为了修复它 - 我必须创建 apk,使用 apktool 对其进行反编译,将 android:launchMode=0 硬编码为 com.unity3d.player.UnityPlayerActivity(这意味着 standard 而不是 singleTask),重新编译它,退出它,并且只然后安装它。

这显然是一个完全的 hack,不能用作实际的解决方案。我需要自己想办法设置android:launchMode

我该怎么做?

【问题讨论】:

您是否尝试过将项目导出到 android studio? 请发布您的清单 【参考方案1】:

调查问题后发现,出现这种行为的原因是Unity在AndroidManifest.xml中将launchMode设置为UnityPlayerActivity为singleTask。

当应用启动一个新 Activity 时,即在 launchMode:singleTask 的实例中——在重新启动时关闭。

无论我们在自定义 AndroidManifest.xml 中设置什么,Unity 都会将其覆盖为 singleTask 并且根据 Unity 官方文档 - Unity 仅支持 launchMode:singleTask。

【讨论】:

以上是关于为 UnityPlayerActivity 设置 android:launchmode的主要内容,如果未能解决你的问题,请参考以下文章

UnityPlayerActivity:java.lang.RuntimeException:无法在未调用 Looper.prepare() 的线程内创建处理程序

Unity接入北斗探针(基于UnityPlayerActivity)丨五编写Unity代码,完成整个项目

Unity接入北斗探针SDK(基于UnityPlayerActivity)丨一效果展示与材料准备

Unity 中的回调侦听器 - 如何从 Android 中的 UnityPlayerActivity 调用脚本文件方法

Unity接入北斗探针SDK(基于UnityPlayerActivity)丨四编写Java代码,导出AAR

修改UnityPlayerActivity.java并编译为class文件