파파비의 블로그

Unity ) 유니티에서 C#으로 Android Native Code 실행하기 - (3) 안드로이드 플러그인 만들기 본문

기타

Unity ) 유니티에서 C#으로 Android Native Code 실행하기 - (3) 안드로이드 플러그인 만들기

N. Dave 2020. 10. 10. 20:57
반응형

안드로이드 플러그인 만들기 자체는 하나도 어렵지 않습니다!

 

플러그인을 만드는 방법은 2가지가 있습니다.

 

arr 파일로 만드는 것과

jar 파일로 맏느는 것입니다.

 

제가 둘 다 해봤지만 arr이 훨씬 간편하다고 느껴져서, 

arr로 만드는 방법을 알려드리도록 하겠습니다.

 

1. 안드로이드 스튜디오에서 새로운 프로젝트를 만듭니다.

 - 네, 안드로이드 스튜디오가 없으신 분들은 까셔야합니다. 안드로이드 네이티브 코드는 안드로이드 스튜디오를 통해서 만들 수 있기 때문입니다.

 - 프로젝트 명은 아무거나하셔도 상관없습니다. 내부에 따로 모듈을 만들어서 할 것이기에 영향이 전혀 없습니다.

 

2. 새로운 프로젝트의 로딩이 완료되면, 새로운 모듈을 만듭니다.

좌측 상단 New > New Module 클릭

 

3. Android Library를 선택합니다.

 

4. 모듈 이름을 정하고, Minimum sdk는 유니티 프로젝트의 값과 맞춰줍니다. (21 이상 권장)

나중에 우리가 만들 arr파일이 모듈이름을 따라 만들어지게 됩니다. 그치만 만들고나서 파일의 이름을 수정해도 상관없기에 별로 중요하진 않습니다.

 

하지만, Minimum sdk는 유니티 프로젝트와 동일해야하며, 동시에 21 이상으로 해주는 것이 좋습니다.

이유는 21이상부터는 Multi dex가 자동으로 적용되어, 혹시나 파일이 커지더라도 따로 처리해줘야할 것이 없기 때문입니다. 만약 21 이하로 설정해두고, 프로젝트의 크기가 어느정도 이상이라서 single dex로 커버가 안된다면,

따로 처리를 해줘야할 것이 많은데, 저는 그 과정에서 native 기능이 제대로 작동하지 않는 경우도 있어서 21 이상으로 처리하고 자동으로 multi dex가 이루어지도록 하고 있습니다.

 

Multi dex의 개념은 이 분이 정리를 잘 해주셔서 링크를 남깁니다.

parkho79.tistory.com/m/101?category=724800

 

Multidex 적용하기

개발을 하다보면 규모도 커지고 라이브러리 사용량도 많아지게 되는데 어느순간 하단과 같은 빌드 오류를 만날 수 있다. 이번 포스팅에서는 Multidex 에 대해 알아보자. Cannot fit requested classes in

parkho79.tistory.com

 

5. 해당 모듈 안에 class를 만들어서 코드를 작성한다.

저는 music player 라는 모듈로 이름을 지었고 안에 Musicplayer라는 class를 만들었습니다.

제가 만들 plugin은 안드로이드의 media player를 통해 사운드를 재생시키는 native audio 를 만드는 것입니다.

 

유니티에서 Audio source를 이용하거나, 아니면 그외에 다른 사운드 재생 컴포넌트들은 화면이 꺼지게 되면,

즉 앱이 중지가 되면 소리가 멈춥니다.

 

하지만 화면이 꺼져도 계속 사운드가 재생되게끔하고 싶을 때는 

안드로이드 미디어플레이어를 이용하면 됩니다.

 

>> 참고로 말하면, 앱을 완전히 메모리에서 지워도 사운드가 재생되게 하려면 Service를 통해 구현해야 하지만,

제가 구현하려는 것은 단순히 Media Player를 통해서 구현하여 홈버튼을 누르거나 다른 앱들을 돌아다니거나, 화면이 꺼져도 다 사운드가 재생되지만, 앱을 완전히 끄는 경우에는 사운드가 중지됩니다.

public class Musicplayer {

    MediaPlayer mediaPlayer;
    int position = 0;

    public void playAudio(String url) {
        killMediaPlayer();

        try{
            mediaPlayer = new MediaPlayer();
            mediaPlayer.setDataSource(url);
            mediaPlayer.prepare();
            mediaPlayer.start();;
        } catch (Exception e){
            e.printStackTrace();
        }

    }

    private void killMediaPlayer() {
        if(mediaPlayer != null){
            try{
                mediaPlayer.release();
            }catch (Exception e){
                e.printStackTrace();
            }
        }
    }

제가 만든 코드의 일부분입니다.

혹시 코드가 필요하신 분들은 아래에 깃허브 링크를 남겨두었습니다.

 

 

6. 코드를 완성했으면 ARR파일로 빌드합니다.

상단에 Build > Make Module '모듈이름' 을 눌러줍니다.

그러면 알아서 빌드를 할 것입니다.

만들어진 파일은 해당 프로젝트 폴더 > 모듈폴더 > build > outputs > arr 안에 있습니다.

 

7. 해당 파일을 원하는 유니티 프로젝트 내에 Assets/Plugins/Android 폴더 안에 넣어줍니다.

이렇게 말이죠!

혹시나 폴더가 없으면 그냥 직접 폴더명을 저렇게 만들어서 그 안에 넣어두시면 됩니다.

 

이렇게 넣게 되면, 스크립트에서, AndroidJavaClass나, AndroidJavaObject 객체를 생성할 때, 안에 class 이름을 패키지명과 함께 잘 넣어주면, 유니티에서 잘 찾아서 실행될 것입니다.

 

직접 적용해보는 것에 대해서는

papabee.tistory.com/338

 

Unity ) 유니티에서 C#으로 Android Native Code 실행하기 - (1) C# 코드 원리편

유니티에서 안드로이드 java code를 실행할 수 있습니다. C#을 활용해서 말이죠! (물론 안드로이드 API를 좀 아셔야 합니다) 안드로이드 java code를 활용하게 되면. 1. 토스트, 카메라 등의 네이티브 기

papabee.tistory.com

papabee.tistory.com/339

 

Unity ) 유니티에서 C#으로 Android Native Code 실행하기 - (1) C# 코드 원리편

유니티에서 안드로이드 java code를 실행할 수 있습니다. C#을 활용해서 말이죠! (물론 안드로이드 API를 좀 아셔야 합니다) 안드로이드 java code를 활용하게 되면. 1. 토스트, 카메라 등의 네이티브 기

papabee.tistory.com

에 정리해두었으니 혹시 모르시는 분들은 참고하시면 도움이 될 것입니다.

 

 

 

 

 

예제 스크립트 & 코드 깃허브링크 github.com/papabee408/Unity_NativeMusicPlugIn

 

papabee408/Unity_NativeMusicPlugIn

UnityAndroidNativeMediaPlayer. Contribute to papabee408/Unity_NativeMusicPlugIn development by creating an account on GitHub.

github.com

 

 

사용방법 ▼

이 파일을 build하셔서 arr로 만들어서 사용하면 됩니다.

자세한 사용방법은 깃허브의 ReadMe를 참고하시면 됩니다.

 

 

 

 

반응형
Comments