リソースは、未加工のアセットから、最適化されたイメージ、パッケージ化されたバイト データまで、さまざまな方法でパッケージ化できます。すべてが 1 つの APK に圧縮されます。Id
リソースの発見は、それを取り戻すのに役立ちます。開発中、ビルド ツール ( )は xml や画像などのディレクトリをaapt
継続的にスキャンし、 に数値定数を生成します。Android のビルド プロセスの詳細をお読みください。res
R.java
実行時に、Resources
どの get メソッドが呼び出されたかに応じて、インスタンスはどこを探すかを決定します。数値id
は、リソース マッピングを照会して正しいマッピングを見つけるのに役立ちます。実際のデータの読み込みは、ネイティブの低レベル コードによって処理されます。
デバッガーは、オブジェクトとそのフィールドを表示できます。何が欠けているかを調べるにはNotFoundException
、logcat のエラー メッセージ トレースを参照してください。リソース ID の 16 進値をリストします。
ApkToolを使用すると、apk
ファイルを圧縮してディレクトリを再構築できますres
。
アップデート:
リソースのパッケージ方法:
apk を持っていて、完全なリソース テーブルを表示したい場合はaapt
、SDK で次のようにツールを実行します。
aapt list -v myApp.apk
次のように詳細が表示されます。
Archive: ./myApp.apk
Length Method Size Ratio Offset Date Time CRC-32 Name
-------- ------ ------- ----- ------- ---- ---- ------ ----
468 Deflate 228 51% 0 11-07-12 23:25 29fb0660 res/color/abs__primary_text_disable_only_holo_dark.xml
468 Deflate 228 51% 332 11-07-12 23:25 bae4791a res/color/abs__primary_text_disable_only_holo_light.xml
2942 Stored 2942 0% 280417 10-27-12 16:52 9b5af43b res/drawable-xhdpi/ic_mus.png
2330 Stored 2330 0% 283418 10-27-12 16:52 21f5ba4d res/drawable-xhdpi/ic_pic.png
1556 Stored 1556 0% 285810 10-27-12 16:52 31c3402b res/drawable-xhdpi/ic_vid.png
リソースが格納されているバイナリ データのメソッド (deflate、stored など) とオフセット、およびそのリソースを取得するためにオフセットの後に読み取るバイト数を示す長さが表示されます。
何Resources.NotFoundException
を印刷しますか:
これを生成するコードは次のとおりです。
public void getValue(int id, TypedValue outValue, boolean resolveRefs)
throws NotFoundException {
boolean found = mAssets.getResourceValue(id, 0, outValue, resolveRefs);
if (found) {
return;
}
throw new NotFoundException("Resource ID #0x"
+ Integer.toHexString(id));
}
したがって、ロードが要求されId
たインスタンスの 16 進値が出力されます。Resources
の一部を次に示しR.java
ます。
public static int absForceOverflow=0x7f010039;
Id
同様の Hex 値が割り当てられていることがわかります。
このエラーを解決できますか?
ビルド ツールがプロジェクトを正常にコンパイルした場合、エラーはそもそも発生しないはずです。プロジェクトのクリーニングまたは再構築以外にできることはあまりありません。これは、ビルド ツールまたはリソース ローダーのバグ、またはデバイス上の apk のデータ破損を表しています。