블로그 이미지
Kanais
Researcher & Developer 퍼즐을 완성하려면 퍼즐 조각들을 하나 둘씩 맞춰나가야 한다. 인생의 퍼즐 조각들을 하나 둘씩 맞춰나가다 보면 인생이란 퍼즐도 완성되는 날이 오려나...?

calendar

1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Notice

2016. 1. 11. 15:47 Programming/Android

운영체제 : Windows 8.1 64bit

Android Develop Tool : Eclipse Luna

Uniuty : 5.0.4f1

작성날짜 : 2016-01-11



출처 : 기억의 조각조각 Android 문자열로 Resource 가져오기

          Northwind – Android Plugin

참고 : Teaching Machines - Custom Resources in a Unity Android Project

          WestwoodForever’s Dev Log – Unity3D GCM java.lang.NoClassDefFoundError:com.test.gcm.R$drawable

            DevKorea – 유니티에서 안드로이드 Activity로 이동하는 문제


문자열로 해당 Resource (혹은 레이아웃에 포함된 View) 의 ID 값을 가져온다;

-----------------------------------------------------------------
getResources().getIdentifier(파일명, 디렉토리명, 패키지명);
또는,
getResources().getIdentifier(패키지명:디렉토리/파일명, null, null);
으로도 가능하다.
-----------------------------------------------------------------

String resName = "@drawable/imgEnd";
String packName = this.getPackageName(); // 패키지명
int resID = getResources().getIdentifier(resName, "drawable", packName);

String viewName = "imgViewEnd";
String packName = this.getPackageName(); // 패키지명
int resID = getResources().getIdentifier(resName, "id", packName);


주로 리소스/ 뷰의 이름을 조합형식으로 만들어 가져와야 할 경우에
이 같은 코드를 사용하여 처리할 수 있다.



Android Plugin

Java JAR 파일 생성

  1. Eclipse에서 프로젝트를 선택하고 마우스 우클릭을 하여 Export » Java » JAR file을 선택.
  2. Export할 파일중에서 AndroidManifest.xml는 선택 해제. 
    테스트한 JAR 파일의 경우 폴더 중에서는 src 폴더와 gen 폴더만 선택해도 정상동작했다. 
    다른 플러그인 타입의 경우 확인 필요. 
    srcgen 폴더는 선택 필수. gen 폴더를 누락하는 경우 com.example.mygame.R.java 클래스를 못 찾는 버그가 발생한다.
  3. Finish 버튼 클릭.

UnityPlayerActivity

유니티의 안드로이드 플러그인 폴더

  • «UnityProject»/Assets/Plugins/Android/assets : 안드로이드 프로젝트의 assets 폴더와 일대일 대응.
  • «UnityProject»/Assets/Plugins/Android/res : 안드로이드 프로젝트의 res 폴더와 일대일 대응.
  • «UnityProject»/Assets/Plugins/Android/libs : 안드로이드 프로젝트의 libs 폴더와 일대일 대응.

Error 대응

android:configChanges 설정 관련 오류

  Error: String types not allowed (at 'configChanges' with value 'fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen')

위와 같이 오류가 발생하는 경우가 있었는데, API 버전이 너무 낮은 경우 발생할 수 있다고 한다. project.properties 파일을 열어서 target 버전을 올려주자.

android.content.res.Resources$NotFoundException

threadid=1: thread exiting with uncaught exception (group=0x40a461f8)
FATAL EXCEPTION: main
java.lang.Error: FATAL EXCEPTION [main]
Unity version     : 4.5.5f1
Device model      : samsung SHV-E210S
Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Test.unityandroid/com.myapp.MainActivity}: android.content.res.Resources$NotFoundException: Resource ID #0x7f030001

원인은 Layout을 찾지 못해서 생기는 오류이다. JAR파일에 있는 layout 관련 xml 파일을 참조하는 것이 아니라 별도로 유니티 프로젝트의 Plugins/Android 폴더에 안드로이드 플러그인 프로젝트의 res 폴더를 복사해서 넣으면 되는데 Plugins/Android/res 폴더에는 layout 폴더만 넣어도 되는 듯 하다.

Project 'xxx' is missing required library : '........./classes.jar'

특정 머신에서 생성시에는 빌드가 잘되었으나 다른 머신에서 오류가 발생하여 살펴봤더니 오류 내용중에 나타난 경로가 특정PC의 절대경로로 되어 있었다. .classpath 파일을 열어서 프로젝트 폴더 루트를 기준으로 서브 경로만 입력하면 오류가 해결된다.

The project cannot be built until build path errors ar resolved.

  1. 프로젝트를 선택하고 우클릭하여 Properties를 선택.
  2. Java Build Path로 가서.
  3. ***.jar파일을 상위로 끌어올리면 해결.
  • 오류가 발생한 당시에는 classes.jar파일을 최상단으로 올려서 해결되었음.
  • 특정머신에서는 오류가 발생하지 않는 이유는 궁금함. (윈도우즈PC에서는 오류가 발생하지 않았음. 맥에서는 오류 발생.)



posted by Kanais