原理就是在Android Studio新建Activity继承UnityPlayerActivity,然后再Unity中修改启动页面。
一,Android Studio篇
首先新建一个项目,
新建完成之后基于新建的项目新建一个module,选择为Android Library类型
新建的Library再目录下新建lib文件夹,找到我们的Unity安装位置,找到classes.jar文件
"C:\Program Files\Unity\Hub\Editor\2022.3.57f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\classes.jar"
复制到lib文件夹下,然后在Android Studio中选中它,右键,加入到Library
接着在android studio新建com.unity.player包,找到UnityPlayerActivity.java文件
"C:\Program Files\Unity\Hub\Editor\2022.3.57f1c1\Editor\Data\PlaybackEngines\AndroidPlayer\Source\com\unity3d\player\UnityPlayerActivity.java"
复制到com.unity.player目录下,并新建MainActivity.java文件,继承UnityPlayerActivity
package com.unity.player;
import android.os.Bundle;
import android.widget.Toast;
import com.unity3d.player.UnityPlayerActivity;
public class MainActivity extends UnityPlayerActivity {
@Override protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
Toast.makeText(MainActivity.this, "更换启动界面成功!", Toast.LENGTH_LONG).show();
}
}
接着操作模块级的build.gradle,dependencies清空只保留我们引入的classes.jar,干净一点,防止出现各种问题
修改AndroidManifest.xml内容为
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application>
<activity
android:name="com.unity3d.player.MainActivity"
android:exported="true"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
把启动页面设置为MainActivity,其中android:exported="true"必须添加为显示声明,这是因为
Android 12的安全规范强制要求
显式声明组件可见性 从 Android 12 开始,任何包含 的组件(如 Activity、Service 等)必须显式声明 android:exported
属性,否则编译会失败 。 Unity 启动页的特殊性:Unity 生成的默认 Activity 通常包含
(如 MAIN 和 LAUNCHER),因此必须明确其导出状态。 默认值规则改变
旧版本默认逻辑:若组件包含 ,android:exported 默认为 true;否则为 false 。
Android 12+ 强制要求:即使默认逻辑存在,也必须显式写入 android:exported,否则会触发 Manifest
merger failed 错误
做好这一切,编译,获取到aar文件
二,unity 篇
新建工程,切换到Android 平台,在project settings/player/publishing settings中勾选costomMainManifest,
这个时候会发现unity工程多了Plugins/Android/AndroidMainfest.xml文件,把我们刚刚打包出来的aar文件也复制进去
接下来需要做散步操作,
1,删除libs文件,因为里面又unity自带的jar文件,打包的时候会又冲突,
2,继续打开classes.jar文件,删除最底层目录的UnityPlayerActivity,否则打包的收依然会冲突
3,复制AndroidMainfest.xml文件,并替换Plugins/Android/AndroidMainfest.xml文件
至此,所有都结束,打包。