您的位置:首页 > 移动开发 > Android开发

Android执行文件apk的组成结构

2011-06-01 21:25 381 查看
APK


Android 
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

直接
render


view

界面。

这里也有横竖屏和
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
的代码吧
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: