Unity 에서 빌드를 통해 만들어진 APK 파일을 실행시키면 가장 먼저 실행되는 디폴트 액티비티가
UnityPlayerActivity
로 고정되어 있다.
이번 포스팅에서는 Unity에서AndroidManifest.xml
파일 수정을 통해 디폴트 액티비티를 변경 또는 확장하는 방법에 대해 다룬다.
시작하기 앞서 나는 Unity 2021.3.1f1
를 사용하고 있다.
우선 새로운 프로젝트를 하나 생성한다.
Android 로 플랫폼 바꿔주고
Player Settings > Player > Settings for Android > Publishing Settings > Other Settings
에서 아래의 그림과 같이 세팅해준다.
다음 Publishing Settings > Custom Main Manifest
옵션을 체크하면 AndroidManifest 경로가 나타난다.
매니페스트 파일을 확인해보면 메인 액티비티가 UnityPlayerActivity
로 설정되어 있다.
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.unity3d.player"
xmlns:tools="http://schemas.android.com/tools">
<application>
<activity android:name="com.unity3d.player.UnityPlayerActivity"
android:theme="@style/UnityThemeSelector">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
</application>
</manifest>
AndroidManifest.xml
파일을 수정하기 전에 Development Build
로 빌드한다.
빌드가 완료되면 UnityProjectsPath\Library\Bee\Android\Prj\IL2CPP\Gradle\unityLibrary\build\intermediates\runtime_library_classes_jar\debug\classes.jar
파일과
UnityProjectPath\Library\Bee\Android\Prj\IL2CPP\Gradle\unityLibrary\libs\unity-classes.jar
파일이 생기는데 두 파일을 킵해둔다.
다음 유니티 메인 액티비티를 변경하기 위해 안드로이드 스튜디오에서 Unity 와 같은 SDK 버전으로 새로운 프로젝트를 하나 생성한다.
기존 포스팅을 참고해서 킵해둔 classes.jar
파일과 unity-classes.jar
파일을 임포트 해주고 build.gradle
파일을 수정해준다.
plugins {
id 'com.android.library'
}
android {
...
}
dependencies {
compileOnly files('libs\\classes.jar')
compileOnly files('libs\\unity-classes.jar')
}
그리고 UnityPlayerActivity
를 상속받도록 MainActivity
를 수정한다. 나는 Toast
를 띄우는 코드를 추가했다.
package com.example.testapplication;
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(this, "L3ts.Koo00 !", Toast.LENGTH_LONG).show();
}
}
그냥 빌드하면 에러나기 때문에 res
폴더를 지우고 AndroidManifest.xml
파일을 다음과 같이 수정해준다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.testapplication">
<application>
<activity
android:name=".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>
빌드 결과 나온 app-debug.aar
파일을 유니티 프로젝트의 Assets\Plugins
폴더에 추가해준다.
유니티 프로젝트의 AndroidManifest.xml
파일을 수정해준다.
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.unity3d.player"
xmlns:tools="http://schemas.android.com/tools">
<application>
<activity android:name="com.example.testapplication.MainActivity"
android:theme="@style/UnityThemeSelector">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
</activity>
</application>
</manifest>
빌드하고 앱을 실행시키면 메인 액티비티가 변경되어 Toast 팝업이 나타난다.
The most important piece of advice I received while using such a service was to pick the correct slope company.