01-01 02:41:44.054 1188 1188 D installd: DexInv: --- END '/system/app/AngryBirds_samsungMID.apk' (success) --- 01-01 02:41:44.054 1292 1306 D PackageManager: scanPackage : /system/app/test.apk 01-01 02:41:44.062 1292
1306 W ResourceType: Failure getting entry for 0x7f070000 (t=6 e=0) in
package 0 (error -75) 01-01 02:41:44.062 1292
1306 W ResourceType: Failure getting entry for 0x7f020005 (t=1 e=5) in
package 0 (error -75) 01-01 02:41:44.062 1292
1306 W ResourceType: Failure getting entry for 0x7f070000 (t=6 e=0) in
package 0 (error -75) 01-01 02:41:44.062 1292 1306 I PackageManager: /system/app/test.apk changed; collecting certs 01-01 02:41:44.124 1188 1188 D installd: DexInv: --- BEGIN '/system/app/test.apk' --- 01-01 02:41:44.140 1504 1504 D dalvikvm: creating instr width table 01-01 02:41:44.156 1504 1504 D dalvikvm: DexOpt: load 4ms, verify+opt 2ms 01-01 02:41:44.218 1188 1188 D installd: DexInv: --- END '/system/app/test.apk' (success) --- 01-01 02:41:44.218 1292 1306 D PackageManager: scanPackage : /system/app/test2.apk 01-01 02:41:44.242 1292
1306 W ResourceType: Failure getting entry for 0x7f020002 (t=1 e=2) in
package 0 (error -75) 01-01 02:41:44.249 1292
1306 W ResourceType: Failure getting entry for 0x7f020097 (t=1 e=151)
in package 0 (error -75) 01-01 02:41:44.249 1292 1306 I PackageManager: /system/app/test2.apk changed; collecting certs 01-01 02:41:44.398 1292 1294 D dalvikvm: GC_CONCURRENT freed 777K, 53% free 6511K/13767K, external 1596K/2108K, paused 2ms+14ms 01-01 02:41:44.679 1292 1294 D dalvikvm: GC_CONCURRENT freed 1831K, 57% free 6027K/13767K, external 1596K/2108K, paused 2ms+5ms 01-01 02:41:44.749 1188 1188 D installd: DexInv: --- BEGIN '/system/app/test2.apk' --- 01-01 02:41:44.789 1505 1505 D dalvikvm: creating instr width table |
위의 빨간색 부분을 보면 Resource Type을 불러올 때 Error가 발생하는 것을 확인할 수 있습니다.
해당 문제에서 발생하는 원인은 Resource Type을 불러올 때, 해당 리소스가 존재하지 않아서 발생되는 문제입니다.
위의 로그를 분석해 보면 다음과 같습니다.
01-01 02:41:44.242 1292
1306 W ResourceType: Failure getting entry for 0x7f020002 (t=1 e=2) in
package 0 (error -75)
0x7f020002는 Resource의 Index를 뜻합니다. 여기서 보면 0x7f는 무시하시고 020002가 보이는데 이것은 리소스의 ID값입니다.
이 ID값을 확인하기 위해서는 다음의 폴더로 이동하여 파일을 열어보면, 위에서 호출한 ID값이 어떤 Resource인지 알 수 있습니다.
Android\out\target\common\obj\APPS\test2_intermediates\public_resources.xml
<!-- Declared at res/drawable-small-ldpi/test2_trayicon.png:0 --> <!-- Declared at res/drawable-small-land-ldpi/test2_trayicon.png:0 --> <!-- Declared at res/drawable-normal-mdpi/test2_trayicon.png:0 --> <!-- Declared at res/drawable-hdpi/test2_trayicon.png:0 --> <!-- Declared at res/drawable-normal-hdpi/test2_trayicon.png:0 --> <!-- Declared at res/drawable-large-xhdpi/test2_trayicon.png:0 --> <public type="drawable" name="test2_trayicon" id="0x7f020002" /> 이 파일이 생성되는 순서는 Resource 파일의 일정 규칙에 의해서 ID값이 생성이 됩니다. 따라서 새로운 리소스 파일이 추가되지 않는 이상은 해당 ID값은 변동되지 않습니다. |
위의 파일을 열어보면 해당 Resource의 ID값을 확인할 수 있습니다.
그러면 왜 ResourceType에서 해당 파일이 존재하는데도 왜 못찾을까요. 그 문제에 대한 답은 다음과 같습니다.
처음에 Package정보를 불러올 때, Manifest File에서 불러오게 됩니다.
이때, Menifest File에서 정의되어 있는 String이라던가 Drable의 이미지 파일들 같은 리소스가 존재할 경우, 해당 해상도 폴더에 존재하지 않게 되면, 위와 같은 현상이 발생되는 것입니다.
예를 들면, ABC라는 Project에서 res 폴더에 다음과 같이 정의 되어 있을 경우, 위와 같은 에러가 발생되는 것입니다.
Res
res/drawable-small-ldpi/test2_trayicon.png res/drawable-small-land-ldpi/ test2_trayicon.png res/drawable-normal-mdpi/ test2_trayicon.png res/drawable-normal-hdpi/ test2_trayicon.png res/drawable-large-xhdpi/ test2_trayicon.png res/values/strings.xml:4 res/values-normal-hdpi/strings.xml:4 res/values-normal-land-hdpi/strings.xml:4 |
위의 문제를 해결하기 위해서는 다음과 같이 사용하는 해상도와 관련된 폴더를 생성하여, Manifest에서 사용하는 파일들을 추가해 주시면 됩니다.
res/drawable-hdpi/ test2_trayicon.png res/values-hdpi/strings.xml:4 위의 해당 파일을 추가. |
그러면 다시 컴파일하고 확인하시면 아시겠지만, 해당 로그가 사라지는 것을 확인 할 수 있습니다.
이는 해당 리소스를 불러왔기 때문에, 로그가 찍히지 않는 것입니다.
'안드로이드' 카테고리의 다른 글
Device Administration (0) | 2012.01.28 |
---|---|
MIME-Type 의 종류 (0) | 2012.01.26 |
EditText에서 소스상으로 Select처리를 해주는 방법.(파란색 블록) (0) | 2011.12.28 |
Android TextView 문자단위로 개행하기 (0) | 2011.12.16 |
paint에서의 breaktext 함수의 기능. (0) | 2011.12.16 |