게임프로그래밍 개발 수업/AndroidStudio

Android Studio 사용해보기

막뇌 2023. 5. 30. 14:22

05월 30일자 수업 Android Studio UI 테스트

 

첫 화면 입니다.

 

새로운 프로젝트 생성

No Activity 선택

UnityPlugin 으로 이름 변경.

Minimum SDK Android 7.0으로 설정

Finish 선택

 

생성한 프로젝트를 열기

뷰 모드를 Project로 설정

File > New > New Module...

Module name을 plugin 으로, Language를 Java로 변경

위와 같은 폴더 경로가 생성된 것을 확인 가능

해당 폴더에 classes.jar 파일을 복사해서 넣어야 합니다.

기본 경로는 아래와 같습니다.

C:\Program Files\Unity\Hub\Editor\2021.3.25f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Classes

해당 파일을 따로 백업 해두고,  복사합니다.

libs 폴더 하위 항목으로 붙여넣기 합니다.

Android 뷰에서 Gradle Scripts > build.gradle (Module :plugin) 소스파일을 열어 봅니다.

맨 아래쪽에

dependencies

항목 첫번째 란에 아래 내용을 추가합니다.

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

추가된 모습
Sync Now

Sync Now를 선택해서 동기화 합니다.

위와 같은 메시지가 나오면 성공입니다.

경로를 잘 보고 위 사진과 같이 Java Class를 생성합니다.

Class 명을 위와 같이 입력 하였습니다.

package com.example.plugin;
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 String getPackageName()
    {
        return _context.getPackageName();
    }

    public void showToast(String text)
    {
        _context.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(_context, text, Toast.LENGTH_LONG).show();
            }
        });
    }


    public void unitySendMessage(String objectName, String methodName, String param)
    {
        UnityPlayer.UnitySendMessage(objectName, methodName, param);
    }
}

위의 내용을 복사/저장합니다.

 

Gradle > Excute Gradle Task > 입력창에 gradle assemble 입력후 엔터

기다리면 빌드가 완료 됩니다.

프로젝트 폴더 > plugin > build > outputs > aar 폴더로 이동해보면 aar 파일이 생성된 것을 확인가능합니다.

위 파일의 확장자 명을 zip으로 변경 하여 압축을 해제 합니다.

 

압축을 해제한 폴더에서 3개의 파일을 Unity Project로 복붙합니다.

테스트를 위해 유니티에서 UI 텍스트와 버튼을 생성한 후 스크립트를 추가 합니다.

클래스명에 주의합니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class AndroidPluginSample : MonoBehaviour
{
    [SerializeField] Text _text;
    [SerializeField] Button _button;
    AndroidJavaObject _pluginInstance;

    private void Awake()
    {
        var pluginClass = new AndroidJavaClass("com.example.plugin.UnityPlugin");
        _pluginInstance = pluginClass.CallStatic<AndroidJavaObject>("instance");
        _text.text = _pluginInstance.Call<string>("getPackageName");
        _button.onClick.AddListener(() =>
        {
            _pluginInstance.Call("unitySendMessage", gameObject.name, "CallbyAndroid", "Hello Android Plugin!");
        });
    }

    void CallByAndroid(string message)
    {
        _pluginInstance.Call("showToast", message);
    }
}