[Unity][AOS] Extend the Default Unity Activity

koo00·2022년 7월 5일
0

Unity Plugin

목록 보기
3/4

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 팝업이 나타난다.

profile
JFDI !

1개의 댓글

comment-user-thumbnail
2024년 5월 23일

The most important piece of advice I received while using such a service was to pick the correct slope company.

답글 달기