我知道res目录中的文件可以从R.class访问,而资产的行为就像一个文件系统,但我想知道,在一般情况下,什么时候最好使用一个和另一个。 谁能帮我了解一下资产和资产的真正区别?


当前回答

以下是一些要点:

Raw files Must have names that are valid Java identifiers , whereas files in Assets Have no location and name restrictions. In other words they can be grouped in whatever directories we wish Raw files Are easy to refer to from Java as well as from xml (i.e you can refer a file in raw from manifest or other xml file). Saving asset files here instead of in the assets/ directory only differs in the way that you access them as documented here http://developer.android.com/tools/projects/index.html. Resources defined in a library project are automatically imported to application projects that depend on the library. For assets, that doesn't happen; asset files must be present in the assets directory of the application project(s) The assets directory is more like a filesystem provides more freedom to put any file you would like in there. You then can access each of the files in that system as you would when accessing any file in any file system through Java . like Game data files , Fonts , textures etc. Unlike Resources, Assets can can be organized into subfolders in the assets directory However, the only thing you can do with an asset is get an input stream. Thus, it does not make much sense to store your strings or bitmaps in assets, but you can store custom-format data such as input correction dictionaries or game maps. Raw can give you a compile time check by generating your R.java file however If you want to copy your database to private directory you can use Assets which are made for streaming.

结论

Android API包括一个非常舒适的资源框架 还针对各种移动应用程序的最典型用例进行了优化。 您应该掌握参考资料,并尽可能地使用它们。 然而,如果您的特殊情况需要更大的灵活性,Assets 有没有给你一个更低级的API来组织和 以更高的自由度处理资源。

其他回答

我知道这是旧的,但只是为了让它更清楚,在官方的android文档中有一个解释:

从http://developer.android.com/tools/projects/index.html

资产/

这是空的。您可以使用它来存储原始资产文件。保存在这里的文件将按原样编译为.apk文件,并保留原始文件名。您可以以与使用uri的典型文件系统相同的方式导航此目录,并使用AssetManager将文件作为字节流读取。例如,这是纹理和游戏数据的好位置。

res - raw

对于任意原始资产文件。在这里保存资产文件而不是在assets/目录中保存资产文件的唯一不同之处在于您访问它们的方式。这些文件由aapt处理,应用程序必须使用R类中的资源标识符引用这些文件。例如,这是媒体的好地方,如MP3或Ogg文件。

资产提供了一种在应用程序中包含任意文件(如文本、xml、字体、音乐和视频)的方法。如果你试图将这些文件作为“资源”,Android会将它们处理到它的资源系统中,你将无法获得原始数据。如果您希望不加改动地访问数据,Assets是一种方法。

使用文件系统之类的资产来转储任何类型的文件。并使用分辨率来存储它所做的,布局,图像,值。

Ted Hopp很好地回答了这个问题。我一直在使用res/raw为我的opengl纹理和着色器文件。我正在考虑将它们移动到一个资产目录,以提供一个分层组织。

这个帖子说服了我不要这么做。首先,因为我喜欢使用唯一的资源id。其次,使用InputStream/openRawResource或BitmapFactory读取文件非常简单。第三,在便携式图书馆中使用它是非常有用的。

以下是一些要点:

Raw files Must have names that are valid Java identifiers , whereas files in Assets Have no location and name restrictions. In other words they can be grouped in whatever directories we wish Raw files Are easy to refer to from Java as well as from xml (i.e you can refer a file in raw from manifest or other xml file). Saving asset files here instead of in the assets/ directory only differs in the way that you access them as documented here http://developer.android.com/tools/projects/index.html. Resources defined in a library project are automatically imported to application projects that depend on the library. For assets, that doesn't happen; asset files must be present in the assets directory of the application project(s) The assets directory is more like a filesystem provides more freedom to put any file you would like in there. You then can access each of the files in that system as you would when accessing any file in any file system through Java . like Game data files , Fonts , textures etc. Unlike Resources, Assets can can be organized into subfolders in the assets directory However, the only thing you can do with an asset is get an input stream. Thus, it does not make much sense to store your strings or bitmaps in assets, but you can store custom-format data such as input correction dictionaries or game maps. Raw can give you a compile time check by generating your R.java file however If you want to copy your database to private directory you can use Assets which are made for streaming.

结论

Android API包括一个非常舒适的资源框架 还针对各种移动应用程序的最典型用例进行了优化。 您应该掌握参考资料,并尽可能地使用它们。 然而,如果您的特殊情况需要更大的灵活性,Assets 有没有给你一个更低级的API来组织和 以更高的自由度处理资源。