1. ホーム
  2. アンドロイド

[解決済み】/resと/assetsのディレクトリの違いについて

2022-04-01 23:01:13

質問

のファイルが res ディレクトリからアクセスできます。 R.class 一方、assetsはファイルシステムのように動作しますが、一般的に、いつ、どちらかを使うのがベストなのか知りたいです。

どなたか、resとassetsの本当の違いを知りたいのですが、教えてください。

どのように解決するのですか?

リソースには、異なる言語、OSバージョン、画面の向きなどに対応した代替手段を提供するためのサポートが組み込まれており、以下のようになります。 こちら . アセットではそのようなことはありません。また、APIの多くの部分で、リソース識別子の使用がサポートされています。最後に、リソースの名前はコンパイル時にチェックされる定数フィールド名になっているので、コードとリソース自体の間でミスマッチが起こる可能性は低くなります。アセットには、そのいずれも適用されません。

では、なぜassetsフォルダを持つのでしょうか?実行時に使用したいアセットを計算するのであれば、かなり簡単です。リソースでは、使用される可能性のあるすべてのリソースIDのリストを宣言し、そのリストへのインデックスを計算する必要があります。(これはちょっと厄介で、開発サイクルの中でリソースのセットが変更された場合、エラーが発生する可能性があります)。(編集: リソースIDを名前によって取得するには getIdentifier しかし、これではコンパイル時のチェックの利点が失われます)。また、アセットをフォルダ階層に整理することもできますが、これはリソースではサポートされていません。データの管理方法が違うのです。リソースはほとんどのケースをカバーしますが、アセットには時折、その用途があります。

もうひとつの違いは、ライブラリプロジェクトで定義されたリソースは、そのライブラリに依存するアプリケーションプロジェクトに自動的にインポートされることです。アセットファイルは、アプリケーションプロジェクトのassetsディレクトリに存在する必要があります。[編集: Androidの新しい Gradleベースのビルドシステム (Android Studioで使用)、これはもはや真実ではありません。ライブラリプロジェクトのアセットディレクトリは .aar ファイルにパッケージされているため、ライブラリプロジェクトで定義されたアセットはアプリケーションプロジェクトにマージされます(したがって、アプリケーションの /assets 参照されるライブラリの中にある場合、そのディレクトリにある)] 。

EDIT: カスタムフォントをアプリに同梱する場合、さらに別の違いが生じます。このような場合 APIコール を作成し Typeface ファイルシステムに保存されているフォントファイルから、またはアプリの assets/ ディレクトリに格納されます。しかし Typeface に格納されているフォントファイルから res/ ディレクトリから(または InputStream を使用することができるようになります。 res/ ディレクトリ)を作成します。[ NOTE Android O(現在アルファ・プレビューで利用可能)では、カスタムフォントをリソースとして含めることができるようになります。説明を見る こちら この待望の機能の しかし、最小APIレベルが25以下である限り、カスタムフォントをリソースとしてではなく、アセットとしてパッケージングすることにこだわる必要があります]。