我知道res目录中的文件可以从R.class访问,而资产的行为就像一个文件系统,但我想知道,在一般情况下,什么时候最好使用一个和另一个。 谁能帮我了解一下资产和资产的真正区别?
当前回答
资产提供了一种在应用程序中包含任意文件(如文本、xml、字体、音乐和视频)的方法。如果你试图将这些文件作为“资源”,Android会将它们处理到它的资源系统中,你将无法获得原始数据。如果您希望不加改动地访问数据,Assets是一种方法。
其他回答
有了资源,就有了内置的支持,可以为不同的语言、OS版本、屏幕方向等提供替代方案,如下所述。这些资产都不具备。此外,API的许多部分支持使用资源标识符。最后,资源的名称被转换为常量字段名,在编译时进行检查,这样代码和资源本身之间不匹配的机会就会减少。这些都不适用于资产。
So why have an assets folder at all? If you want to compute the asset you want to use at run time, it's pretty easy. With resources, you would have to declare a list of all the resource IDs that might be used and compute an index into the the list. (This is kind of awkward and introduces opportunities for error if the set of resources changes in the development cycle.) (EDIT: you can retrieve a resource ID by name using getIdentifier, but this loses the benefits of compile-time checking.) Assets can also be organized into a folder hierarchy, which is not supported by resources. It's a different way of managing data. Although resources cover most of the cases, assets have their occasional use.
One other difference: 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). [EDIT: With Android's new Gradle-based build system (used with Android Studio), this is no longer true. Asset directories for library projects are packaged into the .aar files, so assets defined in library projects are merged into application projects (so they do not have to be present in the application's /assets directory if they are in a referenced library).]
EDIT: Yet another difference arises if you want to package a custom font with your app. There are API calls to create a Typeface from a font file stored in the file system or in your app's assets/ directory. But there is no API to create a Typeface from a font file stored in the res/ directory (or from an InputStream, which would allow use of the res/ directory). [NOTE: With Android O (now available in alpha preview) you will be able to include custom fonts as resources. See the description here of this long-overdue feature. However, as long as your minimum API level is 25 or less, you'll have to stick with packaging custom fonts as assets rather than as resources.]
我知道这是旧的,但只是为了让它更清楚,在官方的android文档中有一个解释:
从http://developer.android.com/tools/projects/index.html
资产/
这是空的。您可以使用它来存储原始资产文件。保存在这里的文件将按原样编译为.apk文件,并保留原始文件名。您可以以与使用uri的典型文件系统相同的方式导航此目录,并使用AssetManager将文件作为字节流读取。例如,这是纹理和游戏数据的好位置。
res - raw
对于任意原始资产文件。在这里保存资产文件而不是在assets/目录中保存资产文件的唯一不同之处在于您访问它们的方式。这些文件由aapt处理,应用程序必须使用R类中的资源标识符引用这些文件。例如,这是媒体的好地方,如MP3或Ogg文件。
两者都很相似。两者之间真正的主要区别是,在res目录中,每个文件都有一个预编译的ID,可以通过R.id轻松访问。(res id)。这是有用的快速和轻松地访问图像,声音,图标…
assets目录更像一个文件系统,提供了更大的自由,可以在其中放置任何您想要的文件。然后,您可以访问该系统中的每个文件,就像通过Java访问任何文件系统中的任何文件一样。这个目录可以存放游戏细节、字典等等。
资产提供了一种在应用程序中包含任意文件(如文本、xml、字体、音乐和视频)的方法。如果你试图将这些文件作为“资源”,Android会将它们处理到它的资源系统中,你将无法获得原始数据。如果您希望不加改动地访问数据,Assets是一种方法。
使用文件系统之类的资产来转储任何类型的文件。并使用分辨率来存储它所做的,布局,图像,值。
推荐文章
- 改变开关的“开”色
- 以编程方式将EditText的输入类型从PASSWORD更改为NORMAL,反之亦然
- 如何在隐藏和查看密码之间切换
- 在Android上调整一个大的位图文件到缩放输出文件
- 如何更改Android版本和代码版本号?
- Android Studio突然无法解析符号
- 应用程序重新启动而不是恢复
- 如何设置整个应用程序在纵向模式?
- Android中文本的阴影效果?
- 以编程方式设置TextView的布局权重
- Android -如何覆盖“后退”按钮,所以它不完成()我的活动?
- 如何从通知点击发送参数到一个活动?
- 导航目标xxx对于这个NavController是未知的
- 使用ConstraintLayout均匀间距的视图
- 文件google-services错误。模块根文件夹中缺少Json。谷歌服务插件没有它就不能正常工作。