비콘 신호를 감지하여, 특정 동작을 하기 위한 앱을 만들기 위해 Android beacon library 를 이용해, 유니티에서 쓰려고 한다. 

 

일단 AAR 파일을 빌드해야 하기 때문에, AAR 파일을 만들기 위해서 어떻게 해야하는지부터 정리를 하려고 한다.

 

본문보다 아래 참고로 링크를 붙은 일본쪽 블로그가 더 잘 정리가 되어 있으니, 해당 블로그를 보는 것을 더 추천한다.

Android Studio에서 프로젝트를 만듭니다.

No Activity로 선택하여 진행합니다.

프로젝트에서 새로운 모듈을 하나 추가한다.

추가할 모듈은 안드로이드 라이브러리로 선택합니다.

app 을 선택 후 삭제하고 나서 Apply 버튼을 누릅니다.

Unity 클래스 라이브러리를 추가하여 Unity 관련 API를 사용할 수 있습니다.

classes.jar 파일을 libs 폴더에 추가합니다.

해당 파일은 설치한 유니티 경로에서 아래의 경로에 위치해 있습니다.

/PlaybackEngines/AndroidPlayer/Variations/mono/Release/Classes

 

이제 Unity 관련 API를 Java에서 사용할 수있게되었지만 classes.jar플러그인에 포함 된 상태로 두면 Unity 측 빌드에서

오류가 발생하므로 classes.jarJava 코드 컴파일로 만 사용하도록합니다.

 

apply plugin: 'com.android.library'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"

    defaultConfig {
        minSdkVersion 29
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        consumerProguardFiles 'consumer-rules.pro'
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    // implementation fileTree(dir: 'libs', include: ['*.jar'])
    compileOnly fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'androidx.appcompat:appcompat:1.1.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
}

위와 같이 수정을 합니다. 수정할 파일은 build.gradle(module:xxxxxxxx) 이다.

지금까지 완료되면 오른쪽 상단의 Sync Now을 클릭하여 Gradle 변경 사항을 적용합니다.

package com.xxxx.xxxxxx;

import android.content.Context;
import android.widget.Toast;

public class xxxxxx
{
	private Context context;
    
    public void setContext(Context _context)
    {
    	context = _context;
    }
    
    private void ShowToast(String msg)
    {
    	Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
    }
}

빌드를 하게 되면 아래와 같은 경로에 aar 파일이 생성됩니다.

/build/outputs/aar

 

다음에는 이 aar 파일을 사용하여, 유니티 프로젝트에서 사용하는 것을 진행해보도록 하겠습니다.

 

- 참고 -

https://gaprot.jp/2020/03/30/unity-android-native-plugin/

 

Unity向けAndroidネイティブプラグインの作り方 | ギャップロ

はじめに UnityでMLKitを使う記事を書いていたら、Androidプラグインの準備の段階だけで1つ記事になりそうなくらいだったので分割しました。UnityでMLKitを使う記事は次回にしたいと思います。

gaprot.jp

유니티에서 스크립트를 생성 후 비쥬얼 스튜디오로 열었을때 빨간 줄이 뜨면서 저런 에러 문구를 띄울 때가 있을겁니다.


이에 대한 원인은 컴파일러에 대한 오류가 가장 많은데 


대표적으로 전체 시스템 네임스페이스를 정의 하는 mscorlib.dll 를 프로젝트로 가져 오지 않은 경우에 발생한다고 합니다.


이걸 해결 하는 방법은 여러가지가 있으나 가장 쉬운 방법은 닷넷 프레임 워크를 다시 설치 하거나 비쥬얼 스튜디오 커뮤니티(설치 프로그램)


을 통해서 업데이트 혹은 재설치를 하는 것입니다.


다들 즐거운 코딩을 하시길 o//

작업 중에 "TypeLoadException: Could not load type 'UnityEngine.VR.VRSettings' from assembly 'Stores." 라는 메시지를 보게 되었다.(이 메시지는 logcat을 통해서 확인한 것이다.)


이 메시지가 끝 구간은 유니티 IAP를 통한 구글 인앱 결제의 해당 아이템 구매를 콜하는 부분에서 나온 것인데, 유니티 포럼을

이리저리 둘러보다보니 본인과 같은 일을 겪은 (서양)형들이 꽤나 많다는 것을 알게 되었다.


결론을 말하자면, 해당 유니티 프로젝트의 엔진 버전업을 하게 되면 로우 레벨단에서 처리하는 과정이 있는데, 그때 처리하는 과정에서

사용하는 플러그인(에셋)등에 문제가 있으면 그 작업이 제대로 안된다는 것이다. 그게 안되서 막상 IAP 플러그인을 넣고 실테스트를 하게 되면 IAP가 동작하는 도중에 저런 메시지를 띄운다는 것이다.


그러면 어떻게 해야하는가.


일단 프로젝트를 ReImport ALL을 해줘야한다.


참고로 이 작업을 하기 전에 프로젝트를 백업해두길 바란다.


자세하게 아는건 아니지만 메타데이터를 새로 작성하는 작업 같은데, 이 작업 도중에 잘못되서 프로젝트가 아작나면....


암튼 백업을 미리 해두고 Assets -> ReImport ALL 을 해주면 진행하다가 팝업이 하나 뜨게 될 것이다.


백업을 만들어 둔게 있냐 라는 식으로 경고 팝업이 뜰텐데, 우리는 이미 백업을 미리 해두었다. 진행하도록 하자.


싹 진행 후.


에러가 뜰 것이다.



이런 에러와 또 다른 추가 에러가 뜰 것인데, 이게 뜨는 이유는 위와 같이 불안정한 프로젝트 상태에서 IAP 플러그인을 임포트 후,

작업했다가 프로젝트 안정화 작업을 시행했을때 뜬다. 쉽게 말해서 네가 이전에 임포트 한 IAP 플러그인이 불안정한 상태이거나, 혹은 IAP 서비스가 오프라인이 되어 있거나 둘 중 하나이다. 물론 둘 다 일 수 있다.


본인은 일단 서비스를 재활성화 시킨 후, IAP 플러그인을 업데이트 하라는 것이 보여서 업데이트도 다 해주고, 혹시나 싶어서 ReImport 도 해주었다.


그리고 나서 APK를 만들어서 구글 콘솔을 통해 업로드 해주고, 구글 앱스토어에서 업뎃이 되길 기다렸다.


업데이트가 되고 나서 인앱 결제를 시도 해보니까. 문제없이 구글 결제 팝업이 뜨는걸 확인했다.


참고한 포럼 링크


https://forum.unity.com/threads/typeloadexception-could-not-load-type-unityengine-vr-vrsettings-from-assembly-stores.539915/

https://forum.unity.com/threads/could-not-load-type-unityengine-vr-vrsettings-from-assembly-stores.521484/

- https://answers.unity.com/questions/1320738/unity-iap-plugin-is-installed-but-unity-iap-is-dis.html

- https://answers.unity.com/questions/1131981/unhandled-exception-systemreflectionreflectiontype-1.html





+ Recent posts