android apk目录结构/AAR目录/资源目录/目录结构/依赖

APK的目录结构

更改APK的后缀后,可以看到APK的组成如下:
android apk目录结构/AAR目录/资源目录/目录结构/依赖_第1张图片

assets

其中assets中存放静态资源。
assets和res的区别如下,assets目录支持任意深度的子目录,用户可以根据自己的需求任意部署文件夹架构,而且res目录下的文件会在.R文件中生成对应的资源ID,assets不会自动生成对应的ID,访问的时候需要AssetManager类。

Res

应用资源可参考。
res中存放静态资源。
该文件夹下的所有文件都会映射到Android工程的R文件中,生成对应的ID,访问的时候直接使用资源ID,即R.id.filename。

anim 存放动画文件
drawable目录存放图像资源;
values目录中存在多种android程序内可引用的文件,colors.xml存放color颜色值,dimens.xml定义尺寸值,string.xml定义字符串的值,styles.xml定义样式对象;
xml文件夹存放任意xml文件,在运行时可以通过Resources.getXML()读取;
raw是可以直接复制到设备中的任意文件,他们无需编译。

raw

需以原始形式保存的任意文件。如要使用原始 InputStream 打开这些资源,请使用资源 ID(即 R.raw.filename)调用 Resources.openRawResource()。

但是,如需访问原始文件名和文件层次结构,则可以考虑将某些资源保存在 assets/ 目录(而非 res/raw/)下。assets/ 中的文件没有资源 ID,因此您只能使用 AssetManager 读取这些文件。

与assets不同之处,res文件夹下的所有文件会生成资源Id.

values

包含字符串、整数和颜色等简单值的 XML 文件。

其他 res/ 子目录中的 XML 资源文件会根据 XML 文件名定义单个资源,而 values/ 目录中的文件可描述多个资源。对于此目录中的文件, 元素的每个子元素均会定义一个资源。例如, 元素会创建 R.string 资源, 元素会创建 R.color 资源。

由于每个资源均使用自己的 XML 元素进行定义,因此您可以随意命名文件,并在某个文件中放入不同的资源类型。但是,您可能需要将独特的资源类型放在不同的文件中,使其一目了然。例如,对于可在此目录中创建的资源,下面给出了相应的文件名约定:

  • arrays.xml:资源数组(类型数组)
  • colors.xml:颜色值
  • dimens.xml:尺寸值
  • strings.xml:字符串值
  • styles.xml:样式

Res可能存在的目录结构

res/
    drawable/
        icon.png
        background.png
    drawable-hdpi/
        icon.png
        background.png

hdpi 限定符表示该目录中的资源适用于屏幕密度较高的设备。其中,每个可绘制对象目录中的图片均已针对特定的屏幕密度调整了大小,但文件名完全相同。如此一来,用于引用 icon.png 或 background.png 图片的资源 ID 始终相同,但 Android 会通过将设备配置信息与资源目录名称中的限定符进行比较,选择最符合当前设备的各个资源版本。

注意:定义备用资源时,请确保也在默认配置中定义该资源。否则,当设备更改配置时,您的应用可能会遇到运行时异常。例如,如果您仅向 values-en(而不是 values)添加字符串,则当用户更改默认系统语言时,您的应用可能会出现 Resource Not Found 异常。

限定符命名规则

  • 您可以为单组资源指定多个限定符,并使用短划线分隔。
  • 这些限定符必须遵循一定的顺序。
  • 不得嵌套备用资源目录。例如,您的目录不能为 res/drawable/drawable-en/。
  • 值不区分大小写。资源编译器会在处理之前将目录名称转换为小写形式,以避免在不区分大小的文件系统中出现问题。名称中使用的所有大写字母只是为了便于认读。
  • 每种限定符类型仅支持一个值。例如,如要针对西班牙语和法语使用相同的可绘制对象文件,则您不能拥有名为 drawable-es-fr/ 的目录,而是需要两个包含相应文件的资源目录,如 drawable-es/ 和
    drawable-fr/。但是,您并不需要真的在这两个位置复制同一文件,而是可以为资源创建别名。请参阅下文的创建别名资源。

lib

包括依赖的jar包库,so文件等。
so文件是利用c\c++代码实现的。

META-INF

签名文件。程序遍历APK包中的所有文件,对非文件夹非签名的文件,逐个用SHA1生成摘要。签名之后,可以判断文件是否被篡改。

AndroidManifest.xml

清单文件,android程序的配置文件。

dex文件

应用程序的可执行文件,如果当前的方法数超过了65535,就会进行分包处理。所以一个apk中会有多个dex文件。

传统的Java程序,首先先把Java文件编译成class文件,字节码都保存在了class文件中,Java虚拟机可以通过解释执行这些class文件。
而Dalvik虚拟机是在Java虚拟机进行了优化,执行的是Dalvik字节码,而这些Dalvik字节码是由Java字节码转换而来,一般情况下,Android应用在打包时通过AndroidSDK中的dx工具将Java字节码转换为Dalvik字节码。
dex相比于class文件的优点:
dx工具可以对多个class文件进行合并,重组,优化,可以达到减小体积,缩短运行时间的目的。

resources.arsc

资源索引表,用来描述具有ID值的资源的配置信息。
Android中,res用来存放资源文件,res文件夹下存放的所有文件,使用aapt命令工具会生成对应的R文件,包括color.xml中的各个color属性等。但是R文件只能保证编译程序不报错,实际程序运行时.

你可能感兴趣的:(android,java,android)