Blog
Unity와 Android Java Class
Unity에서 AndroidJavaClass 를 이용하여 Toast Message 띄우기
2023.06.15
🔸 Unity와 AndroidJavaClass
Unity에서 안드로이드 네이티브 기능에 접근하기 위해서는 보통 AndroidJavaClass와 AndroidJavaObject를 사용한다.
🔹 AndroidJavaClass:
- Java 클래스를 나타내는 Unity 클래스이다.
- 안드로이드 플랫폼에서 이미 존재하는 클래스를 사용하고자 할 때 사용된다.
- 안드로이드 SDK의 클래스를 직접 호출하여 정적 메서드나 필드에 접근할 수 있다.
- Java 클래스의 이름을 기반으로 생성되며, 해당 클래스의 정적 메서드 및 필드에 접근할 수 있다.
🔹 AndroidJavaObject:
- Java 객체를 나타내는 Unity 클래스이다.
- 새로운 Java 객체를 생성하거나, 기존에 생성된 Java 객체에 접근하고자 할 때 사용된다.
- AndroidJavaClass를 통해 생성된 Java 클래스의 인스턴스를 생성하여 사용한다.
- Java 객체의 인스턴스 메서드에 접근하고 호출할 수 있으며, 필드 값을 가져오거나 설정할 수도 있다.
이 두 클래스는 Unity에서 안드로이드의 네이티브 기능을 호출하기 위해 사용되며,
Java 클래스와 객체에 직접 액세스할 수 있는 기능을 제공한다.
정리하면,
AndroidJavaClass는 정적 메서드와 필드에 접근하기 위해 사용되고,
AndroidJavaObject는 인스턴스 메서드와 필드에 접근하기 위해 사용됩니다.
이를 이용하여, 간단하게 Toast Message를 띄우는 코드를 작성해보았다.
public static void ShowAlert (string message) {
AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaClass toastClass = new AndroidJavaClass("android.widget.Toast") ;
AndroidJavaObject unityActivity = unityPlayer.GetStatic<AndroidJavaObject> ("currentActivity");
unityActivity.Call ("runOnUiThread", new AndroidJavaRunnable( () =>
{
AndroidJavaObject toastObject = toastClass.Callstatic<AndroidJavaObject>("makeText", unityActivity, message, 0);
toastObject.Call("show");
}));
}
현재 실행되고 있는 액티비티를 가져와서, android.widget.Toast 패키지의 static 메서드인 makeText 를 호출하는 코드이다.

이런식으로 버튼을 눌렀을 때, ShowAlert("MessageMessage") 라고 호출한다면, 위와 같은 Toast 메세지가 쿨릭되는 것을 볼 수 있다.
🔸 오타가 난다면?
Callstatic이라는 메서드에 메서드 이름을 string으로 호출 하는 것을 볼 수 있는데,
그렇다면 이 Callstatic에 오타가 난 string을 집어 넣으면 어떻게 될까?
확인 결과 아무일도 일어나지 않는다. 코드를 아래처럼 변경하고 ( makeText -> makeText2 )
toastClass.Callstatic<AndroidJavaObject>("makeText2", unityActivity, message, 0);
빌드 후 실행한 후, 메서드를 실행하면….아무일도 일어나지 않는다. Logcat에서도 확인이 되지 않는다.
2023-03-20 17:50:43.955 28390-28390/? I/ViewRootImpl@750Id0e[UnityPlayerActivity]: ViewPostIme pointer 0
2023-03-20 17:50:44.029 28390-28390/? I/ViewRootImpl@7501d0e[UnityPlayerActivity]: ViewPostIme pointer 1