문제 : Unity에서 .jar 파일을 사용함에 있어서 resource 문제 발생.

 - Android Studio로 블루투스 모듈을 프로그래밍한 후 .jar 파일로 추출

 - 블루투스 모듈은 페어링 목록을 불러오기 위한 Activity를 사용하도록 구현되어 있음.

 - 추출한 .jar 파일을 Unity에서 사용했을 시 다음과 같은 에러를 보게 됨. (앱 실행 중지됨)


java.lang.NoClassDefFoundError: Failed resolution of: Lcom/teraphonia/bluetoothforunity/R$layout


Android 프로젝트에는 res/layout 폴더에 activity xml 파일이 들어 있는데, Unity에서 사용하려니 찾을 수 없어서 생기는 에러다.


그래서 고민하던 중, aar 파일에 대해 알게 되었다.



해결 : .jar 파일 대신 .aar 파일을 사용하자.


설명 출처 : https://developer.android.com/studio/projects/android-library.html?hl=ko


즉, .jar파일 대신 .aar 파일을 사용하게 되면 리소스들도 포함하기 때문에, 이 문제를 해결할 수 있게 되는 셈이다.


.aar 파일을 추출하는 방법은 Android Library 프로젝트에서 Gradle 메뉴 > app > build / assemble Task를 실행하면 된다.


그럼 다음과 같은 경로에 .aar 파일이 생성됨을 볼 수 있다.


여기서 release.aar 파일을 Unity의 Assets/Plugins/Android 폴더에 옮긴다.




이제 블루투스 모듈이 Unity에서도 잘 작동한다.


다음은 Unity에서 bluetooth 모듈을 이용해 페어링 목록을 가져온 화면이다.



잘 작동해서 기분이 너무 좋당~!




*추가사항(Error of Android sdk or jdk version)


여기까지 하면 끝이지만, 다음 에러를 보는 사람도 있을 것이다.


<uses-sdk android:~~~version~~~~ 뭐시기 하는 에러


이 경우 보통 2가지가 있다.


min sdk version ~~~ 에러라면


player setting / other / minimum api 설정을 알맞게 변경하면 된다.


target  sdk version ~~~ 에러라면


그에 맞는 android sdk build tool 버젼을 설치해 주어야 한다.


이렇게 해결하면 되는데, 


Failed to compile resources with the 로 시작하는 에러 메시지를 보는 경우가 있다.


내용을 살펴 보면,


major version 52 is newer than 51, 뭐시기 하는 에러 메시지가 있는데,


jdk 버젼을 업그레이드 하라는 메시지였다.


맞는 버젼을 다운받은 후,


Unity 메뉴에서 Edit > Preferences > External Tools > jdk 경로를 설정해 주면 된다.


저작자 표시
신고

참고 :

http://sillyknight.tistory.com/27

http://yeonhong.blogspot.kr/2015/04/unity3d-native.html

http://blog.naver.com/PostView.nhn?blogId=linegamedev&logNo=220104074319




1) 새로운 Unity Project를 생성한다.


2) 유니티 프로젝트 폴더에 Android Studio Project를 생성한다.

-> 어차피 Library 모듈 프로젝트만 사용할 것이므로 그냥 다 확인 눌러서 만든다.


3) new -> module 해서 Android Library 프로젝트를 생성한다. 

-> 난 bluetoothforunity 라고 지었당.

-> 패키지명 자유롭게 짓는다.


4) Unity 안드로이드 버젼을 설치하면 생기는 classes.jar 파일을 모듈 경로의 libs 폴더에 옮긴다.


5) UnityPlayerActivity를 상속받는 Activity class를 만든다.  

- 난 BluetoothActivity라고 지었다.

- UnityPlayerActivity는 유니티 자체의 Main Activity이다. 이걸 상속받아서 확장한다.


6) BluetoothService라는 class를 만들어 Android/Java로 블루투스 코드를 작성한다.


7) 모듈 프로젝트의 build.gradle에 하단에 다음처럼 작성하고 sync를 맞추면 

우측 gradle task 목록에 exportJar task가 생성된다. 이걸 더블클릭하여 실행한다.


- 저렇게 하게 되면 경로에 AndroidPlugin.jar 파일이 생성된당.


8) AndroidManifest.xml 파일을 작성해야 한다.

- [package명 / activity명] 은 자신이 정했던 이름으로 작성해 주어야 한다.

- 최하단에 Bluetooth 사용 권한을 허가해 주는 명령어가 있다.


9) 유니티 프로젝트 폴더의 Plugin/Android 폴더에 AndroidManifest.xml 파일을 복사&붙여넣기 한다.

- 이제 이 폴더에는 AndroidManifest.xml과 AndroidPlugin.jar 파일이 존재하게 된다. 이로써 준비 끝!


- 이렇게 블루투스 테스트를 하기 위한 UI를 제작해 준다.


10) C# code 작성

- 이렇게 Plugin의 클래스 코드를 사용한다.

* AndroidJavaObject : 객체로써 불러온다. Call() 함수 사용 가능

* AndroidJavaClass : 클래스로써 불러온다. 이걸로 생성하게 되면 객체가 아닌 상태로 사용하게 된다. 즉 CallStatic() 함수로 static 변수나 함수 등만 이용 가능하다.


11) C# code와 UI를 연결해 준다.

12)  Player Setting 메뉴에서 사용할 package명을 입력한다.


13) Scene을 등록하고 build & run을 한다.

- 당연히 Android 스마트폰은 연결되어 있어야 한다.


14) 버튼을 눌러 확인해 본다.

- 블루투스 페어링 리스트를 가져와 출력한 모습. 글자가 너무 크당.




이런 식으로 Unity Android에서 블루투스 사용하는 방법을 알아 보았다.


저작자 표시
신고


Github를 이용해서 블로그처럼 간단하게 한번 만들어 볼까 하며 찾아보다가


DB를 쓸 수 없다는 게 좀 안타까워서 알아보던 중


Google의 Firebase라는 서비스를 알게 되었다.


기본적으로 무료로 시작할 수 있고, DB도 제공해 주고, 대용량 파일 저장소도, Analitics 기능도 있고..


이것저것 지원해 주니까 좋아 보인다. 한번 사용해 봐도 좋을 듯 싶다.


자세한 것은 차차 알아봐야겠다.


대략적으로는 http://cocomo.tistory.com/487 이 글을 참고해서 알아보았다.



개발환경

- nodejs npm이 설치되어 있어야 함

- nodejs express 사용



시작

1. Firebase 접속해서 프로젝트 추가

- 프로젝트 이름 짓고 나라 설정


 2. Firebase CLI 설치

  - 이걸 설치해야 터미널(cmd)에서 명령어를 사용할 수 있게 된다.

  - npm install -g firebase-tools 를 입력해 설치해 준다.


3. Firebase project 생성

 1) 터미널(windows에서는 cmd)을 열고 원하는 폴더 생성한 후, 그 폴더로 이동한다.

 2) firebase init을 한다.

  - 호스팅 성향 3가지를 선택할 수 있는데, 모두 선택할 수도 있다.

  - 어떤 프로젝트에 할당할 것인지를 묻는데, 1에서 생성한 프로젝트를 선택한다. (혹은 그냥 추가할 수도 있다.)

  - 완료하면 firebase.json 파일과 public 폴더 등이 생성된다. function을 선택했을 시에는 functions 폴더가 추가로 생성된다.



functions 폴더에서는 nodejs 서버 코드를 작성할 수 있다.


4. nodejs 서버 코드 작성과 firebase.json 파일 수정

 - npm install express --save 명령으로 express 설치

 - 위 사진처럼 코드 작성 후 exports.app으로 'app'이라는 이름 등록

 - firebase.json에서 'rewrites' 옵션 등록.

   function 항목에는 exports에 등록된 function 이름을 작성해 줌. 위의 그림에서는 'app' 이라는 이름.


5. 터미널에서 firebase deploy 입력하면 호스팅 완료.

요렇게 등록이 완료됨.


이제 teraphonia.firebaseapp.com/timestamp 로 접속해 보면 사이트를 확인할 수 있다.


호스팅 완료!


이제 이것저것 해보면서 꾸며 봐야겠다. ㅎㅎㅎ

저작자 표시
신고

'Web > Web Hosting' 카테고리의 다른 글

[Firebase] Web hosting on Firebase 1. 호스팅 해 보기.  (0) 2017.08.17