본문 바로가기
개발/Unity

Unity)Android Native Plugin (AAR 만들기)

by 테샤르 2022. 4. 26.

Android용 Native(C++) 플러그인

 

Android Studio를 통해서 Unity Plugin을 작업하는 포스팅 이다.

Activity는 필요없으니 No Activity로 생성한다. 기본 Language는 Java로 코드를 작성한다.

New Module으로 Android Library를 생성한다.

반응형

 

반응형

 

Unity 에서 사용할 Library를 Import 한다 경로는 다음과 같다.

Unity -Preferences-External Tools 의 경로를 확인한다.

 

C:\Program Files\Unity\2020.3.2f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes

plugin / libs / classes.jar를 복사한다.

반응형

 

buildgradle을 열어서 libs의 경로의 classes.jar를 읽을수 있는 옵션을 추가한다.

compileOnly fileTree(dir: 'libs', include: ['*.jar'])

Sync Now를 누르게되면 적용된것을 확인할수 있다.

이제 실질적으로 기능을 구성해보자.

반응형

Java Class를 생성한다.

Android Native에서 처리할 기능을 구성한다.

간단하게 Toast 처리하는 코드를 작성한다.

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 _messag)
    {
        _context.runOnUiThread(new Runnable(){
            @Override
            public void run(){
                Toast.makeText(_context, _messag, Toast.LENGTH_SHORT).show();
            }
        });
    }

    public void unitySendMessage(String _objectName, String _methodName, String _param)
    {
        UnityPlayer.UnitySendMessage(_objectName,_methodName,_param);
    }
}

기능을 구현 이후에 Gradle -plugin ->Tasks -> build -> assemble을 더블클릭해서 빌드진행한다.

 

<환경 에러>

94: AAPT: error: resource android:color/system_neutral1_1000 not found.

위의 에러가 나와서 버전을 수정했다.

반응형
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'com.google.android.material:material:1.4.0'

상위 버전에서는 해당 리소스를 못찾는 이슈가 있어서 다운그레이드해서 진행했다.

 

다시 aseemble build 진행

빌드가 완료되면서 aar이 생성된것을 확인가능하다.

반응형

생성된 plugin-release.aar를 Unity에서 Import 한다.

 

Unity 에서 호출처리 코드로 진행한다.

public class AndroidTest : MonoBehaviour
{

    AndroidJavaObject _pluginInstance;

    void Awake()
    {
#if UNITY_ANDROID

        var pluginClass = new AndroidJavaClass("com.shc.unity.plugin.UnityPlugin");
        _pluginInstance = pluginClass.CallStatic<AndroidJavaObject>("instance");

#endif
    }

    public void ClickToast()
    {
        if (null == _pluginInstance)
            return;

        _pluginInstance.Call("showToast", "Hellow UnityPlugin Toast !!");
    }
}

 

참고 코드 : [ 링크 ]

 

-----------------------------------------------------------------------------------------------------------------------------------

C로 구현하는 방식도 존재한다.

 

 

Android용 Native(C++) 플러그인 : [ 링크 ]

 

Android용 Native(C++) 플러그인 - Unity 매뉴얼

Unity는 C/C++로 작성되고 공유 라이브러리(.so) 또는 정적 라이브러리(.a)로 패키지화된 Android용 네이티브 플러그인을 지원합니다. IL2CPP 스크립팅 백엔드를 사용하는 경우 C/C++ 소스 파일을 플러그

docs.unity3d.com

 

★☆☆☆☆

 

반응형

댓글