운영체제 : 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 파일 생성
- Eclipse에서 프로젝트를 선택하고 마우스 우클릭을 하여 Export » Java » JAR file을 선택.
- Export할 파일중에서 AndroidManifest.xml는 선택 해제.
테스트한 JAR 파일의 경우 폴더 중에서는 src 폴더와 gen 폴더만 선택해도 정상동작했다.
다른 플러그인 타입의 경우 확인 필요.
src, gen 폴더는 선택 필수. gen 폴더를 누락하는 경우 com.example.mygame.R.java 클래스를 못 찾는 버그가 발생한다. - 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.
- 프로젝트를 선택하고 우클릭하여 Properties를 선택.
- Java Build Path로 가서.
- ***.jar파일을 상위로 끌어올리면 해결.
- 오류가 발생한 당시에는 classes.jar파일을 최상단으로 올려서 해결되었음.
- 특정머신에서는 오류가 발생하지 않는 이유는 궁금함. (윈도우즈PC에서는 오류가 발생하지 않았음. 맥에서는 오류 발생.)
'Programming > Android' 카테고리의 다른 글
[Android] 안드로이드 해상도 (0) | 2016.02.03 |
---|---|
[Android] Android에서 jsp로 데이터 요청하고 json으로 받기 (4) | 2016.02.03 |
[Android] 다음지도에서 모바일 화면 영역의 상단왼쪽 좌표를 구하는 방법 (0) | 2016.01.05 |
[Android] 한글 초성 검색 (0) | 2015.12.21 |
[Android] Android Custom View의 생성시 주의사항 (0) | 2015.10.21 |