One_KWS

Android Plugin 만들기 본문

Unity

Android Plugin 만들기

One-Kim 2023. 4. 25. 14:25

 

안드로이드 프로젝트 생성

안드로이드 플러그인을 만들기 위해 Android Studio 프로젝트를 생성한다. Empty Activity로 생성하고 Minimum SDK는 Unity Build Setting과 맞춰주었다.

 

Module 생성

프로젝트를 만들었으면 File - New - New Module로 Module을 생성한다. 

 

classes.jar 추가

다음으로 아래 위치에서 classes.jar 파일을 복사한다.

 

Window : C:\Program Files\Unity\Hub\Editor\(사용하고 있는 유니티 버전)\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp/Release\Classes

Mac : Applications/Unity/PlaybackEngines/AndroidPlayer/Variations/il2cpp/Release/Classes

생성한 Module의 libs 폴더에 classes.jar에 위의 파일을 복사해서 넣어준다.

 

build.gradle 파일을 열어 dependencies에 추가한 classes.jar를 가져올 수 있도록 코드를 추가하고 상단의 Sync Now 버튼이나 아이콘을 눌러 동기화해준다.

dependencies {
    // 아래 코드를 추가한다.
    compileOnly fileTree(dir: 'libs', include: ['*.aar', '*.jar'])
    
    implementation 'androidx.appcompat:appcompat:1.6.1'
    implementation 'com.google.android.material:material:1.8.0'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}

 

Java 코드 작성

Java Class 를 생성하고 Toast를 보여주는 코드를 입력한다. 

package com.unityplugin.toastplugin;

import android.app.Activity;
import android.widget.Toast;

import com.unity3d.player.UnityPlayer;

public class UnityPlugin {
    private static UnityPlugin instance;
    private static Activity context;

    public static UnityPlugin Instance(){
        if(instance == null){
            instance = new UnityPlugin();
            context = UnityPlayer.currentActivity;
        }

        return instance;
    }

    public void ShowToast(String message){
        context.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(context, message, Toast.LENGTH_LONG).show();
            }
        });
    }
}

 

.aar 파일 생성

우측 상단에 Gradle 탭을 눌러 열어주고 Tasks/build/assemble을 더블 클릭하면 해당 프로젝트 폴더의 build/outputs/aar에 .aar 파일이 생성된다. 

Unity에서 Plugin 사용하기

생성된 파일을 Unity 프로젝트의 Plugin 폴더에 넣어준다. 

 

테스트를 위해 버튼을 하나 만들고 스크립트를 생성하여 붙여주었다.

 

AndroidJavaClass를 가져오기 위해서는 생성자 안에 Package.Class 형식으로 string 값을 넣어준다. 현재 예제에서는 com.unityplugin.toastplugin Package의 UnityPlugin 클래스에 접근하기 위해 com.unityplugin.toastplugin.UnityPlugin을 넣어 주었다.

Unity에서 자바 클래스의 객체에 접근하기 위해서는 AndroidJavaObject를 사용한다. CallStatic<T>() 함수를 사용하여 UnityPlugin 클래스의 Instance() 함수를 실행시켜 AndroidJavaObject 타입으로 가져왔고 버튼을 누르면 Call(method name, params args)  함수를 이용하여 UnityPlugin 클래스의 ShowToast 함수를 실행시켜 주도록 구현했다. 

public class ToastTest : MonoBehaviour {
    private void Start() {
        var pluginClass = new AndroidJavaClass("com.unityplugin.toastplugin.UnityPlugin");
        var pluginInstance = pluginClass.CallStatic<AndroidJavaObject>("Instance");

        var button = GetComponent<Button>();
        button.onClick.AddListener(() => { pluginInstance.Call("ShowToast", "Hello World !"); });
    }
}

 

실행 결과

'Unity' 카테고리의 다른 글

스프라이트 아틀라스 (Sprite Atlas)  (0) 2023.04.22
Unity 최적화 - Asset  (0) 2023.04.19
Mono, IL2CPP  (3) 2023.04.01
Addressable System #5 - Build layout report  (0) 2023.03.24
Unity - Editor.Log  (0) 2023.03.24