Unity+Android替换默认启动类UnityPlayerActivity.java

*本文中的方案,适用于支持Java文件打包的Unity2018.2及以上版本。

Android项目都会有一个默认启动类,通过Unity打包成AndroidStudio项目后,可以看到,在主包下面会有一个文件UnityPlayerActivity.java,这个就是Unity打包的工程的默认启动类。

一般来说,这个类是不需要修改的,但是我就遇到了特殊情况...

在接入第三方平台SDK的时候,因为某些原因,需要设置Activity的启动模式为sigleTop(Unity默认设置为sigleTask)。然而在Unity工程中通过Manifest文件直接修改该设置是无法生效的,因为在打包的时候,unity会重置该设置。好气啊。

然而,Unity修改启动方式是根据启动类来设置的,所以,如果能够把默认启动类替换成Unity不认识的一个,该设置就不会被重写了。

首先在AndroidStudio中新建一个继承自UnityPlayerActivity的类,暂且命名为UnityPlayerActivityTest。

如果使用继承的方式会导致打包失败,可以改成直接修改文件名的方式。

直觉和经验告诉我,Android启动类、权限这种东西,肯定是要在Manifest文件中修改的。找打AndroidManifest.xml文件,可以找到关于启动类设置相关的略略略条目。

可能不同的版本打包出来的内容略有不同,但是UnityPlayerActivity的设置就在这个条目中。将UnityPlayerActivity修改为UnityPlayerActivityTest。

注意,这里的默认内容为

android:name="com.unity3d.player.UnityPlayerActivity"

如果只是简单的修改为

android:name="com.unity3d.player.UnityPlayerActivityTest"

打包的apk工程安装后是无法打开的。

一定要把包名修改为UnityPlayerActivityTest所在的包名。

将启动类文件和Manifest文件放到Unity项目中,启动类的Java文件可以放在自定义位置,Manifext文件必须放在Plugins/Android/目录下。

打包,运行,一切OK。

 

你可能感兴趣的:(unity,android,android,unity)