Androidアプリケーションリソースの事前コンパイル、コンパイル、およびパッケージ化の完全な分析-https://cloud.tencent.com/developer/article/1033926
Androidシステムは、強力なリソース管理フレームワークResourcesおよびAssetManagerを提供します。
-Androidアプリケーションリソースは、リソースディレクトリとリソースファイルの2つの部分で構成されています。
1.リソースディレクトリは、anim、drawable、drawable-hdpi、layout、menu、raw、valuesなど、resディレクトリの下のさまざまなサブディレクトリです。これらのディレクトリはシステムによって事前定義されている必要があります。つまり、res / drawableとres / layoutはすべて合法ですが、res / kinbosとres / abcdは合法ではなく、システムはそれらを認識できません。対応するデータをRクラスで生成することはできません。
2.リソースファイルは、.xml、画像、オーディオおよびビデオファイルなどのリソースディレクトリ内のデータファイルです。注:リソースファイルは、リソースディレクトリにのみ配置でき、resディレクトリには配置できません。
Androidアプリケーションは、コードロジックとインターフェイスリソースを分離します。Androidアプリケーションリソースは、アセットと解像度の2つのカテゴリに分類できます。アセットとresの違い:
1。resディレクトリ内のすべてのリソースはRクラスに登録され、Rクラスから直接呼び出すことができます。一方、アセット内のリソースはRクラスに登録されないため、ファイル名でのみ参照できます。 。
resリソースは、さまざまな目的に応じて、さらに次の9つのサブタイプに分類できます。animator、anim、color、drawable、layout、menu、raw、values、xml、
2。assetsディレクトリとres / rawのファイルは処理されないため、 apkファイルを解凍すると、元のファイルが表示されます。
これらのタイプのみが、res / animator、res / anim、res / color、res / drawable(ビットマップファイルではない、つまり.png、.9.png、.jpg、.gifファイルではない)、res / layout、res / menu、 res / valuesとres / xmlリソースファイルの両方が、テキスト形式のXMLファイルからバイナリ形式のXMLファイルにコンパイルされます。これらのリソースファイルは、Android Asset Package Tool(aapt)を介してAPKファイルにパッケージ化されます。パッケージ化する前に、テキスト形式のほとんどのXMLリソースファイルは、バイナリ形式のXMLリソースファイルにコンパイルされます。XMLリソースファイルをコンパイルおよびパッケージ化するプロセス。Androidシステムのリソース管理フレームワークを理解します。
アプリケーションが実行時に同時にさまざまなサイズと密度の画面をサポートできるようにし、国際化をサポートするため、つまり、さまざまな国、地域、言語をサポートするために、Androidアプリケーションリソースの編成には18のディメンションがあり、各ディメンションは構成情報の一部を表します。これにより、アプリケーションは、UIに表示するデバイスの現在の構成情報に基づいて最も一致するリソースを見つけ、ユーザーエクスペリエンスを向上させることができます。
- AndroidのリソースパッケージツールAAPTは:リソースコンパイルおよび包装の過程で、以下の二つの追加の操作を実行する
各非資産が定数の形でR.javaに定義されているID値を、リソース割り当てを1ファイル。
2. Resources.arscファイルを生成して、ID値を持つこれらのリソースの構成情報を記述します。その内容は、リソースインデックステーブルと同等です。
Androidリソース管理フレームワークは、リソースIDとリソースインデックステーブルを使用して、デバイスの現在の構成情報に基づいて、最も一致するリソースをすばやく見つけることができます。次に、Androidアプリケーションリソースのコンパイルとパッケージ化のプロセスを分析するときは、主にXMLリソースのコンパイルプロセス、リソースIDファイルR.javaの生成プロセス、およびリソースインデックステーブルファイルresources.arscの生成プロセスに焦点を当てます。
パッケージ化する前に、テキスト形式のほとんどのXMLリソースファイルは、バイナリ形式のXMLリソースファイルにコンパイルされます。
リソースIDは4バイトの符号なし整数で、最上位のバイトはパッケージIDを表し、2番目に上位のバイトはタイプIDを表し、最下位の2バイトはエントリIDを表します。
パッケージIDは、リソースのソースを定義する名前名と同等です。Androidシステムは現在、2つのリソースコマンドスペースを定義しています。1つはパッケージIDが0x01に等しいシステムリソースコマンドスペースで、もう1つはパッケージIDが0x7fに等しいアプリケーションリソースコマンドスペースです。[0x01、0x7f]の間にあるすべてのパッケージIDは有効であり、この範囲外のものは無効なパッケージIDです。前述のシステムリソースパッケージpackage-export.apkのパッケージIDは0x01に等しく、アプリケーションで定義されたリソースのパッケージIDの値は0x7fに等しくなります。これは、生成されたR.javaファイルによって確認できます。
Androidアプリケーションリソースをコンパイルおよびパッケージ化するプロセスは、次の4つのポイントを習得することが最も重要です
。1。Xmlリソースファイルをテキスト形式からバイナリ形式にコンパイルするプロセス。
2.Xmlリソースファイルのバイナリ形式。
3.リソースアイテムインデックステーブルresources.arscを生成するプロセス。
4.リソースアイテムインデックステーブルresources.arscのバイナリ形式。
-アプリケーションリソースのコンパイル、パッケージ化、検索プロセス