res
ディレクトリ内のファイルはR.class
からアクセスできますが、アセットはファイルシステムのように動作しますが、一般的に、どちらを使用するのが最適かを知りたいと思います。
解像度と資産の本当の違いを知るのに役立つ人はいますか?
here で説明されているように、リソースを使用すると、さまざまな言語、OSバージョン、画面の向きなどの代替を提供するための組み込みのサポートがあります。アセットでは利用できません。また、APIの多くの部分がリソース識別子の使用をサポートしています。最後に、リソースの名前はコンパイル時にチェックされる定数フィールド名に変換されるため、コードとリソース自体の不一致の可能性は低くなります。いずれも資産には適用されません。
では、なぜアセットフォルダーがあるのでしょうか?実行時に使用するアセットを計算する場合、それは非常に簡単です。リソースの場合、使用される可能性のあるすべてのリソースIDのリストを宣言し、リストへのインデックスを計算する必要があります。 (これはちょっと厄介で、開発サイクルでリソースのセットが変更されるとエラーが発生する可能性があります。)(編集: getIdentifier
を使用して名前でリソースIDを取得できますが、コンパイル時のチェック。)アセットはフォルダー階層に編成することもできますが、これはリソースではサポートされていません。データを管理する別の方法です。リソースはほとんどの場合をカバーしますが、アセットは時々使用されます。
もう1つの違い:ライブラリプロジェクトで定義されたリソースは、ライブラリに依存するアプリケーションプロジェクトに自動的にインポートされます。資産の場合、それは起こりません。アセットファイルは、アプリケーションプロジェクトのアセットディレクトリに存在する必要があります。 [編集:Androidの新しい Gradleベースのビルドシステム (Android Studioで使用)では、これは当てはまりません。ライブラリプロジェクトのアセットディレクトリは.aarファイルにパッケージ化されているため、ライブラリプロジェクトで定義されたアセットはアプリケーションプロジェクトにマージされます(したがって、参照ライブラリにある場合、アプリケーションの/assets
ディレクトリに存在する必要はありません)。
編集:カスタムフォントをアプリにパッケージ化する場合は、さらに別の違いが生じます。 API呼び出し があり、ファイルシステムまたはアプリのassets/
ディレクトリに保存されているフォントファイルからTypeface
を作成します。ただし、res/
ディレクトリに保存されているフォントファイルから(またはres/
ディレクトリの使用を許可するTypeface
から)InputStream
を作成するAPIはありません。 [注:Android O(アルファプレビューで利用可能)では、カスタムフォントをリソースとして含めることができます。この延滞機能の説明 here を参照してください。ただし、最小APIレベルが25以下である限り、リソースとしてではなくアセットとしてカスタムフォントをパッケージ化する必要があります。]
どちらもかなり似ています。 2つの間の主な違いは、res
ディレクトリで、各ファイルにプリコンパイルされたID
が与えられ、R.id.[res id]
から簡単にアクセスできることです。これは、画像、音声、アイコンにすばやく簡単にアクセスするのに便利です...
assets
ディレクトリはファイルシステムに似ており、自由にファイルを配置できます。その後、Javaを介して任意のファイルシステムの任意のファイルにアクセスする場合と同じように、そのシステムの各ファイルにアクセスできます。このディレクトリは、ゲームの詳細、辞書などに適しています。お役に立てば幸いです。
これは古いことは知っていますが、明確にするために、Androidの公式ドキュメントにそれぞれの説明があります。
from http://developer.Android.com/tools/projects/index.html
assets/
これは空です。これを使用して、未加工のアセットファイルを保存できます。ここで保存したファイルは、そのまま.apkファイルにコンパイルされ、元のファイル名が保持されます。 URIを使用して一般的なファイルシステムと同じ方法でこのディレクトリをナビゲートし、AssetManagerを使用してバイトのストリームとしてファイルを読み取ることができます。たとえば、これはテクスチャとゲームデータの適切な場所です。
res/raw/
任意の生のアセットファイル用。 asset /ディレクトリではなくここにアセットファイルを保存することは、それらにアクセスする方法のみが異なります。これらのファイルはaaptによって処理され、Rクラスのリソース識別子を使用してアプリケーションから参照する必要があります。たとえば、これはMP3やOggファイルなどのメディアに適した場所です。
重要なポイントは次のとおりです。
結論
Javaコードのどこかでそれらを参照する必要がある場合は、ファイルを「res」ディレクトリに配置します。
また、resフォルダー内のすべてのファイルはRファイルでインデックス付けされるため、ファイルの読み込みがはるかに高速に(そしてはるかに簡単に!)なります。
ファイルシステムのようなアセットを使用して、あらゆる種類のファイルをダンプします。そして、resを使用して、その目的、レイアウト、画像、値を保存します。
テッド・ホップはこれに非常にうまく答えました。 OpenGLテクスチャおよびシェーダーファイルにres/rawを使用しています。階層的な組織を提供するために、それらをアセットディレクトリに移動することを考えていました。
このスレッドは私にそうしないと確信させた。まず、一意のリソースIDの使用が好きだからです。 2つ目は、InputStream/openRawResourceまたはBitmapFactoryを使用してファイルを読み込むのが非常に簡単だからです。第三に、ポータブルライブラリで使用できることは非常に便利だからです。