APKAndroid PacKage的缩写,即Android安装包。将APK文件直接传到Android模拟器或Android手机中执行即可安装。APK文件其实是zip格式,但后缀名被修改为apk,在windows上可以通过winrar等程序直接解压查看。

解压apk后,一般的可看到的目录结构如下:

文件或目录

作用

META-INF/

也就是一个manifest,从java jar文件引入的描述包信息的目录

res/

存放资源文件的目录

libs/

如果存在的话,存放的是ndk编出来的so

AndroidManifest.xml

程序全局配置文件

classes.dex

最终生成的dalvik字节码

resources.ars

编译后的二进制资源文件

这里资源文件时相对比较重要的,sdk 文档(中文指南)上有相关的详细介绍:

目录Directory

资源类型Resource Types

res/anim/

Define pre-determined animations.
Tween animations are saved in res/anim/ and accessed from the R.anim class.
Frame animations are saved in res/drawable/ and accessed from the R.drawable class.

定义的是预置的动画对象。一般是逐帧动画(Frame animations)或补间动画(Tween animations)。而实际使用上,都是一些淡入淡出、缩放和移动等的补间动画居多。

res/color

Define a color resources that changes based on the View state.
Saved in res/color/ and accessed from the R.color class

定义一些android view状态变化时,使用的颜色值。这通常是绑定到一个界面元素上的,比如一个button被按下,弹起或disable时的颜色。

res/drawable/

res/drawable-hdpi

res/drawable-land-hdpi

res/drawable/mdpi

res/drawable/ldpi

res/drawable/port

Define various graphics with bitmaps or XML.
Saved in res/drawable/ and accessed from the R.drawable class.

定义要被用到的位图资源文件。这些位图资源可以是bitmap,也可以是用xml描述的bitmap

注意:文件后缀为9.png是一种特殊的位图,一般是通过draw9patch生成的,是一种可自动伸缩的位图资源。

Drawable的其他目录形势,land是横屏的,port是竖屏的;hdpi是高分辨率的,ldpi是低分辨率的,hdpi是高分辨率的。这里可以放置为特定情况下的界面优化资源。

res/layout/

Define the layout for your application UI.
Saved in res/layout/ and accessed from the R.layout class.

定义的UI layout,被aapt parser后,可由android直接renderview界面。

这里也有横竖屏和dpi之分。

res/values/

可以被编译成很多种类型的资源的XML文件。

注意: 不像其他的res/文件夹,它可以保存任意数量的文件,这些文件保存了要创建资源的描述,而不是资源本身。XML元素类型控制这些资源应该放在R类的什么地方。

尽管这个文件夹里的文件可以任意命名,不过下面使一些比较典型的文件(文件命名的惯例是将元素类型包含在该名称之中):

array.xml 定义数组

colors.xml 定义color drawable颜色的字符串值(color string values)。使用Resource.getDrawable()Resources.getColor()分别获得这些资源。

dimens.xml定义尺寸值(dimension value)。使用Resources.getDimension()获得这些资源。

strings.xml定义字符串(string)值。使用Resources.getString()或者Resources.getText()获取这些资源。getText()会保留在UI字符串上应用的丰富的文本样式。

styles.xml 定义样式(style)对象。

多国语言,由values-xxx的后缀组成。比如简体中文:res/values-zh-rCN

res/xml/

任意的XML文件,在运行时可以通过调用Resources.getXML()读取。

res/raw/

直接复制到设备中的任意文件。它们无需编译,添加到你的应用程序编译产生的压缩文件中。要使用这些资源,可以调用Resources.openRawResource(),参数是资源的ID,即R.raw.somefilename

Android应用程序的生成过程,输入就是我们在eclipse或源码中监理的工程及其下面的源文件。输出就是处理后的apk文件。整个过程可以如下图所示:

整个过程的第一步,资源打包的工作,就是aapt这个工具完成的。

1.在最后打包的apk中,所有的xml文件已经不是原来的文本文件了,是被aapt parser后,直接保存下来的xml数据结构,这样做的一大好处就是:到手机中无需再次parser xml文件,直接读到定义好的数据结构中就可以了。

2. drawable中的png图片也被aapt给优化过了。

3. 所有的资源文件都被自动生成一个索引,并生成到R.java中。为什么这么做?我想一个是效率,另一个好处就是最大限度的在编译过程中由编译器给你找错(通过string来索引很难做到)

其实这里,我们最关心的就是android对资源究竟做了些什么,还是看看aapt的代码吧

更多相关文章

  1. 关于Android(安卓)Dedub Bridge(adb)的使用
  2. Android中 Flutter实现自定义的APPbar
  3. Android(安卓)apk项目中添加ffmpeg编解码库
  4. Android的APK安装过程 JVM Dalvik和ART等虚拟机区别以及DEX文件O
  5. android APK应用层到kernel层功能接口调用实现总结
  6. Android通过lame进行音频格式转换
  7. 代码文件android:向手机卡上写入文件时总是不成功,解决办法
  8. Android菜鸟日记25-android反编译
  9. Android(安卓)中级学习心得

随机推荐

  1. android 串口(serial port)没有权限问题
  2. Watchdog in Android
  3. Spinner的详解
  4. Android超炫酷烟花程序
  5. Handler使用总结
  6. Android&Js相关
  7. Android Studio快捷键-mac版
  8. Android(安卓)studio加载so调用本地方法
  9. android 个人论坛地址
  10. android--创建桌面快捷方式