Unity에서 Android AAR 패키지 호출 방법

이전 글에서는 Unity에서 JAR 패키지를 호출하는 방법에 대해 다루었습니다. 이번 글에서는 AAR 패키지를 생성하고 Unity에서 이를 호출하는 방법을 알아보겠습니다.

1. Android Studio를 이용한 AAR 생성

먼저 Android Studio에서 새 프로젝트를 생성합니다.

사용할 Android 버전을 선택하며, 이는 Unity와 일치해야 합니다.

Empty Activity를 선택합니다.

기본 activity 이름은 그대로 두고 Finish를 클릭합니다.

Unity 설치 경로에서 D:\\Unity\\Editor\\Data\\PlaybackEngines\\AndroidPlayer\\Variations\\mono\\Release\\Classes 폴더로 이동하여 class.jar 파일을 복사한 후 Android Studio 프로젝트의 app\\libs 폴더에 붙여넣습니다.

Android Studio에서 File > Project Structure...를 클릭합니다.

app > dependencies로 이동하여 오른쪽의 + 버튼을 클릭하고 두 번째 옵션인 "2 File Dependency"를 선택합니다.

방금 복사한 libs 폴더의 class.jar 파일을 선택하고 OK를 클릭합니다.

이제 MainActivity 인터페이스를 작성할 차례입니다.

MainActivity 클래스를 UnityPlayerActivity로 상속받고 setContentView(R.layout.activity_main); 코드를 제거합니다. UnityPlayerActivity를 상속받지 않아도 동작합니다.

다음과 같이 작성할 수 있습니다.

package com.example.unity;

import android.os.Bundle;
import android.util.Log;

import com.unity3d.player.UnityPlayerActivity;

public class MainActivity extends UnityPlayerActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    
    // 테스트 메서드
    public String getMessage()
    {
        Log.v("UnityTest", "AAR 호출 성공");
        return "AAR 테스트가 성공적으로 완료되었습니다";
    }
}

AndroidManifest.xml 파일에 다음 라인을 추가합니다:

<meta-data android:name="unityplayer.UnityActivity" android:value="true" />

이제 준비가 완료되었습니다. Build > Build APK을 클릭하여 AAR 패키지를 생성합니다.

Android Studio 우측 상단에 빌드 완료 메시지가 표시되면 outputs 폴더에 AAR 패키지가 생성된 것입니다. JAR 패키지 생성보다 훨씬 간단하죠.

2. Unity에서 AAR 호출하기

새 Unity 프로젝트를 생성하고 Android 플랫폼으로 전환한 후 Player Settings를 엽니다.

Unity의 패키지 이름과 Android 버전을 AAR 패키지와 동일하게 설정합니다.

Assets 폴더에 Plugins/Android 폴더를 생성합니다. (이름이 정확해야 합니다)

Android Studio에서 생성한 AAR 패키지를 이 Android 폴더로 복사합니다. AAR과 JAR 파일처럼 이름은 임의로 변경할 수 있습니다.

Android Studio 프로젝트의 AndroidManifest.xml 파일도 Unity의 Plugins/Android 경로로 복사합니다.

test라는 스크립트를 추가하고 장면을 test로 저장합니다.

다음 단계가 매우 중요합니다:

Unity에서 AAR 파일을 더블 클릭합니다. 열리지 않으면 압축 해제 도구를 사용하여 app-debug 파일을 열어주세요.

libs 폴더를 열어 내부의 class.jar 파일을 삭제합니다. 이 파일을 삭제하지 않으면 오류가 발생합니다.

test 스크립트에 다음 코드를 추가합니다:

using System.Collections;
using UnityEngine;

public class AARTest : MonoBehaviour 
{
    void OnGUI()
    {
        // 방법 1
        try {
            var javaObject = new AndroidJavaObject("com.example.unity.MainActivity");
            string result1 = javaObject.Call<string>("getMessage");
            GUI.Label(new Rect(10, 10, 500, 100), result1);
        } catch (System.Exception ex) {
            GUI.Label(new Rect(10, 10, 500, 100), "오류: " + ex.ToString());
        }
        
        // 방법 2
        try {
            AndroidJavaClass unityClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject currentActivity = unityClass.GetStatic<AndroidJavaObject>("currentActivity");
            string result2 = currentActivity.Call<string>("getMessage");
            GUI.Label(new Rect(10, 120, 500, 100), result2);
        } catch (System.Exception ex) {
            GUI.Label(new Rect(10, 120, 500, 100), "오류: " + ex.ToString());
        }
    }
}

장면을 빌드하면 작업이 완료됩니다.

추가 정보

Unity 빌드 시 오류가 발생하는 경우 다음 단계를 따르세요:

  1. Android Studio 프로젝트의 values/styles.xml 파일을 찾습니다.
  2. 파일 내용을 모두 삭제하고 다음 내용만 남깁니다:
<resources>
</resources>

새로운 AAR 패키지를 생성하고 Unity로 가져오면 문제없이 빌드될 것입니다.

최신 Unity 버전에서는 여러 AndroidManifest.xml 파일이 충돌하지 않을 수 있습니다. 이전에는 이 문제로 인해 많은 어려움을 겪었지만, 현재 버전에서는 해결된 것으로 보입니다.

AAR 패키지 호출 시 다음과 같은 방법도 사용할 수 있습니다:

using System.Collections;
using UnityEngine;

public class DirectAARCall : MonoBehaviour 
{
    void OnGUI()
    {
        try {
            AndroidJavaObject mainActivity = new AndroidJavaObject("com.example.unity.MainActivity");
            string result = mainActivity.Call<string>("getMessage");
            GUI.Label(new Rect(10, 10, 500, 100), result);
        } catch (System.Exception ex) {
            GUI.Label(new Rect(10, 10, 500, 100), "오류: " + ex.ToString());
        }
    }
}

태그: Unity Android AAR 통합 개발

6월 15일 23:21에 게시됨