해당 로그

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

위의 해당 파일을 추가.

 

그러면 다시 컴파일하고 확인하시면 아시겠지만, 해당 로그가 사라지는 것을 확인 할 수 있습니다.

이는 해당 리소스를 불러왔기 때문에, 로그가 찍히지 않는 것입니다.

+ Recent posts