이전 글에서는 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 빌드 시 오류가 발생하는 경우 다음 단계를 따르세요:
- Android Studio 프로젝트의 values/styles.xml 파일을 찾습니다.
- 파일 내용을 모두 삭제하고 다음 내용만 남깁니다:
<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());
}
}
}