Android Studio 사용해보기
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를 선택해서 동기화 합니다.
위와 같은 메시지가 나오면 성공입니다.
경로를 잘 보고 위 사진과 같이 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);
}
}