### Android 应用资源可分为两大类
- 官方介绍,[这里](https://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources),如果无法科学上网,请打开Google中国开发者网站,进入指南——[应用资源](https://developer.android.google.cn/guide/topics/resources/providing-resources)
- 无法通过R 资源清单类访问的原生资源, 保存在assets 目录下。
- 一般来说,assets 目录下存放的资源代表应用无法直接访问的原生资源, 应用程序需要通过AssetManager以二进制流的形式来读取资源
- 可通过R 资源清单类访问的资源, 保存在res 目录下。
- res 目录下的资源, Android SDK 会在编译该应用时, 自动在R.java 交件中为这些资源创建索引,程序可直接通过R 资惊清单类进行访问。
#### 资源的类型以及存储方式
- 使用Android studio工具,如下图所示
![res](https://box.kancloud.cn/ef59cff3b9881b71e7d6f6edd82277c8_704x438.gif =704x438)
从图中可以看到,当我们创建一个Android资源文件夹时,可以创建13个不同类型的资源分别是**anim、animator、color、drawable、font、interpolator、layout、menu、mipmap、raw、transition、values、xml**等不同类型的资源。(PS:使用Android studio2..3.3),具体每种资源的含义卡查阅[官网](https://developer.android.com/guide/topics/resources/providing-resources.html#AlternativeResources)
- 下表是Android疯狂讲义对不同资源的类型以及存储方式的描述,由于官网的更新,可能有些描述不正确或者过时,仅供参考
| 目录 |存放的资源 |
| --- | --- |
| /res/anim/ |存放定义补间动画的XML文件 |
| /res/animator/ |存放定义属性动画的XML文件 |
| /res/color / |存放定义不同状态下颜色列表的XML文件 |
|/res/drawable/ | 存放各种位图文件〈如*.png 、*.9.png、*.jpg、*.gif) 等. 除此之外,也可能是编译成如下各种Drawable 对象的XML 文件: BitmapDrawable 对象、NinePatchDrawable 对象、StateListDrawable 对、SbapeDrawable 对象、 AnimationDraw油le 对象、Drawable 的其他各种子类的对象 。注:官网目前已将.png的图片放在了mipmap的文件夹下。来作为启动图标 |
|/res/layout/ | 存放各种用户界丽的布局文件 |
| /res/menu/ | 存放为应用程序定义各种菜单的资源, 包括选项菜单、子菜单、上下文菜单资源 |
| /res/raw/ | 存放任意类型的原生资源(比如音频文件、视频文件等).在Java 代码中可通过调用Resource对象的openRawResource(int id)方法来获取该资源的二迸制输入流. 实际上,如果应用程序需要使用原生资源,也可把这些原生资源保存到/assets/ 目录下,然后在应用程序中使用AssetManager 采访问这些资源 |
| /res/xml/ | 存放任意的原生XML 文件, 这些XML 文件可以在Java 代码中使用Resources.getXML()方法进行访问 |
| /res/values/ | 存放各种简单值的XML文件,这些简单值包括字符串值,整数值、颜色值、数组等,这些资源文件的根元素都是<resources.. ./>,为该<resources../>元素添加不同的子元素则代表不同的资源,例如:string/integer/bool 子元素: 代表添加一个字符串值、整数值或boolean 值;color 子元素: 代表添加一个颜色值;array 子元素或string-array、int-array 子元素:代表添加一个数组; style 子元素: 代表添加一个样式;dimen : 代表添加一个尺寸等等。由于各种简单值都可定义在/res/values/ 目录下的资源文件中,如果在同一份资源文件中定义各种值,势必增加程序维护的难度. 为此, Android 建议使用不同的文件来存放不同类型的值,例如:arrays.xml : 定义数组资源;colors.xml : 定义颜色值资源;dimens.xml : 定义尺寸值资源;strings.xml : 定义字符串资源;styles.xml : 定义样式资源 |
- 官网目前的介绍如下表
| Directory| Resource Type |
| --- | --- |
| animator/ | XML files that define[ property animations](https://developer.android.com/guide/topics/graphics/prop-animation.html). |
| anim/ | XML files that define [tween animations](https://developer.android.com/guide/topics/graphics/view-animation.html#tween-animation). (Property animations can also be saved in this directory, but the animator/ directory is preferred for property animations to distinguish between the two types.) |
| color/ | XML files that define a state list of colors. See [Color State List Resource ](https://developer.android.com/guide/topics/resources/color-list-resource.html) |
| drawable/ | Bitmap files (.png, .9.png, .jpg, .gif) or XML files that are compiled into the following drawable resource subtypes:①Bitmap files②Nine-Patches (re-sizable bitmaps)③State lists④Shapes⑤Animation drawables⑥Other drawables。See [Drawable Resources](https://developer.android.com/guide/topics/resources/drawable-resource.html).|
| mipmap/ | Drawable files for different launcher icon densities. For more information on managing launcher icons with mipmap/ folders, see [Managing Projects Overview.](https://developer.android.com/studio/projects/index.html#mipmap) |
| layout/ | XML files that define a user interface layout. See [Layout Resource](https://developer.android.com/guide/topics/resources/layout-resource.html). |
| menu/ | XML files that define application menus, such as an Options Menu, Context Menu, or Sub Menu. See [Menu Resource](https://developer.android.com/guide/topics/resources/menu-resource.html). |
| raw/ | Arbitrary files to save in their raw form. To open these resources with a raw [InputStream](https://developer.android.com/reference/java/io/InputStream.html), call [Resources.openRawResource()](https://developer.android.com/reference/android/content/res/Resources.html#openRawResource(int)) with the resource ID, which is R.raw.filename.However, if you need access to original file names and file hierarchy, you might consider saving some resources in the assets/ directory (instead of res/raw/). Files in assets/ are not given a resource ID, so you can read them only using[ AssetManager.](https://developer.android.com/reference/android/content/res/AssetManager.html)|
| values/ | XML files that contain simple values, such as strings, integers, and colors.Whereas XML resource files in other res/ subdirectories define a single resource based on the XML filename, files in the values/ directory describe multiple resources. For a file in this directory, each child of the <resources> element defines a single resource. For example, a <string> element creates an R.string resource and a <color> element creates an R.color resource.Because each resource is defined with its own XML element, you can name the file whatever you want and place different resource types in one file. However, for clarity, you might want to place unique resource types in different files. For example, here are some filename conventions for resources you can create in this directory:①arrays.xml for resource arrays ([typed arrays](https://developer.android.com/guide/topics/resources/more-resources.html#TypedArray)).②colors.xml for [color values](https://developer.android.com/guide/topics/resources/more-resources.html#Color)③dimens.xml for [dimension values](https://developer.android.com/guide/topics/resources/more-resources.html#Dimension).④strings.xml for [string values](https://developer.android.com/guide/topics/resources/string-resource.html).⑤styles.xml for [styles](https://developer.android.com/guide/topics/resources/style-resource.html).See [String Resources](https://developer.android.com/guide/topics/resources/string-resource.html), [Style Resource](https://developer.android.com/guide/topics/resources/style-resource.html), and [More Resource Types.](https://developer.android.com/guide/topics/resources/more-resources.html) |
| xml/ | Arbitrary XML files that can be read at runtime by calling [Resources.getXML()](https://developer.android.com/reference/android/content/res/Resources.html#getXml(int)). Various XML configuration files must be saved here, such as a [searchable configuration](https://developer.android.com/guide/topics/search/searchable-config.html) |
| font/ |Font files with extensions such as .ttf, .otf, or .ttc, or XML files that include a <font-family> element. For more information about fonts as resources, go to [Fonts in XML](https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html). |
- 应用的/res/ 目录下不仅包含了drawable 子目录,而且还提供了drawable-ldpi (低分辨率)、drawable-mdpi (中等分辨率)、drawable-hdpi (高分辨率)、drawable-xhdpi (超高分辨率) 4 个子目录,其实这4个子目录的作用就相当于drawable子目录,这四个子目录下存放的图片文件的文件名完全相同,只是分辨率不同-----这种做法可以让系统根据屏幕分辨率来选择相应的图片。大部分程序、系统将会选择drawable-mdpi 目录下的图片文件,如果系统使用高分辨率屏幕,那么系统将会选择drawable-hdpi 目录下的图片文件。目前官网已建议将.png的图片放在mipmap的文件夹下。
#### 使用资源
1. 在Java 代码中使用资源清单项
- Java 代码中访问资源主要通过R 类来完成。其完整的语法格式为:`[<package_name> . ]R . <res 。urce_type> . <resource_name>`
- <package_name>: 指定R 类所在包,实际上就是使用全限定类名。当然,如果在Java程序中导入R 类所在包,就可以省略包名。
- <resource_name>: 指定资源的名称。该资源名称可能是无后缀的文件名〈如图片资源) , 也可能是XML 资源元素中由android: name 属性所指定的名称。
2. 在Java 代码中访问实际资源
- 为了通过资源清单项来获取实际资源,可以借助于Android 提供的Resources 类。把Resources 类称为“灿的id 资源访问总管家”
- Resources 主要提供了如下两类方法。
- getXxx(int id): 根据资源清单ID 来获取实际资源。比如getColor(int id) 、getDimension(int id) 、getDrawable(int id) 、getXml(int id) 、 getText(int id) 等等
- getAssets(): 获取访问/assets/目录下资源的AssetManager 对象。
- Resources (android.content.res)由Context 调用getResources()方法来获取。
3. 在XML 文件中使用资源
- 在XML 代码中使用资源的完整语法格式为:`@[<package name> : ]<resource type>/<resource name>`
- <package_name> : 指定资源类所在应用的包。如果所引用的资源和当前资源位于同一个包下,则<package_name>可以省略。
- <resource_name>: 指定资源的名称。该资源名称可能是无后缀的文件名(如图片资源〉,也可能是XML 资源元素中由android :name 属性所指定的名称。
- 资源文件位于/res/values/ 目录下,官网介绍,可以多种资源类型,除了上面表格介绍的资源类型之外,还可以有Bool、Color、Dimension、ID、Integer、Integer Array、Typed Array等
- 前言
- Android系统的体系结构
- Dalvik VM 和 JVM 的比较
- Android 打包应用程序并安装的过程
- Android ADB工具
- Android应用开发
- Android UI相关知识总结
- Android 中window 、view、 Activity的关系
- Android应用界面
- Android中的drawable和bitmap
- AndroidUI组件adapterView及其子类和Adapter的关系
- Android四大组件
- Android 数据存储
- SharedPreference
- Android应用的资源
- 数组资源
- 使用Drawable资源
- Material Design
- Android 进程和线程
- 进程
- 线程
- Android Application类的介绍
- 意图(Intent)
- Intent 和 Intent 过滤器(Google官网介绍)
- Android中关于任务栈的总结
- 任务和返回栈(官网译文)
- 总结
- Android应用安全现状与解决方案
- Android 安全开发
- HTTPS
- 安卓 代码混淆与打包
- 动态注入技术(hook技术)
- 一、什么是hook技术
- 二、常用的Hook 工具
- Xposed源码剖析——概述
- Xposed源码剖析——app_process作用详解
- Xposed源码剖析——Xposed初始化
- Xposed源码剖析——hook具体实现
- 无需Root也能Hook?——Depoxsed框架演示
- 三、HookAndroid应用
- 四、Hook原生应用程序
- 五、Hook 检测/修复
- Android 应用的逆向与加固保护技术
- OpenCV在Android中的开发
- Android高级开发进阶
- 高级UI
- UI绘制流程及原理
- Android新布局ConstraintLayout约束布局
- 关键帧动画
- 帧动画共享元素变换
- Android异步消息处理机制完全解析,带你从源码的角度彻底理解
- Android中为什么主线程不会因为Looper.loop()里的死循环卡死?
- 为什么 Android 要采用 Binder 作为 IPC 机制?
- JVM 中一个线程的 Java 栈和寄存器中分别放的是什么?
- Android源码的Binder权限是如何控制?
- 如何详解 Activity 的生命周期?
- 为什么Android的Handler采用管道而不使用Binder?
- ThreadLocal,你真的懂了吗?
- Android屏幕刷新机制