Chinaunix首页 | 论坛 | 博客
  • 博客访问: 72001
  • 博文数量: 14
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 76
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-03 08:59
文章分类

全部博文(14)

文章存档

2014年(13)

2013年(1)

我的朋友

分类: Android平台

2014-11-29 12:26:19

  参考老罗的:
http://blog.csdn.net/luoshengyang/article/details/8738877
 
上图是android下的一个apk应用的目录。基本就是这些目录或者子目录。关于每个目录的作用如下。



注意的是:上面的文件除了raw目录下的资源以及bitmap文件的drawable类型资源外,其他的资源文件均为文本格式的xml文件。这些xml文件都会在打包的过程中被编译成二进制格式的xml文件。这些xml文件都有一个自己的字符串资源池,用来保存文件中引用到的字符串。即解析xml的过程,保存xml中的关键字对应的属性名称、属性值等以及其他的资源。(android中使用的是tinyxml解析器,实际上保存在一堆数组中,关于怎么解析xml,另外文章写)。

l另外一点是,每一个res资源在编译的打包完成后,都会被分配一个资源ID,这些资源ID被最终定义为java常量,保存在R.java文件中,与应用程序的其他源文件一起被编译到程序中,这样我们就可以在程序或者资源文件中通过这些ID的常量来访问指定的资源。



说明1

国际移动用户识别码IMSI,这是国际上为唯一识别一个移动用户所分配的号码。

IMSI共有15位,其结构为:MCC+MNC+MSIN。  其中MNC+MSIN=NMSI

MCC:移动国家码,由ITU统一管理和分配,唯一识别移动用户所属的国家,共3位。中国为460

MNC:移动网络码。两位。中国移动TD系统使用00,联通GSM使用01,移动GSM使用02等等

MSIN:共10位。具体参见博客

http://blog.chinaunix.net/uid-20484604-id-1941290.html

这里面博主写的很详细 。其中MCCMNC如果在配置android APN的时候会用到
资源查找的优先级就是按照上表从上往下。
例如:drawable应用的资源按以下方式来组织。
drawable/
drawable-en/
drawable-fr-rCA/
drawable-en-port/
drawable-en-notouch-12key/
drawable-port-ldpi/
drawable-port-notouch-12key/
程序的运行配置情况如下:
Locale = en-GB 
Screen orientation = port 
Screen pixel density = hdpi 
Touchscreen type = notouch 
Primary text input method = 12key

那么程序运行的时候,详细步骤如下:
1、根据语言是en-GB,消除和非en语言的目录。即drawable-fr-rCA目录
 
        drawable-en/
        drawable-en-port/
        drawable-en-notouch-12key/
 
2、根据表,一个一个筛选剩下的目录。这次检查的维度是screen orienation。由于设备的改属性为port,所以删除不包含port的资源目录。
        drawable-en-port/

最后剩下的即是我们最匹配的资源目录了,这时候所有的drawable类型的资源都可以从这里获取了。

我们在资源编译和打包的过程中,会生成一个resource.arsc文件。这个文件记录了所有的应用程序资源目录的信息。包括资源的名称、类型、值、ID以及所配置的维度信息。
意思就类似于staruct lstat结构体中保存着文件的所有状态信息。

整个应用资源的编译、打包以及查找的过程。


图的上半部分是资源的编译、打包的过程。
图的下半部分是应用调用资源时,资源的查找过程。

图片说明几点:
1、除asset和res/raw资源被原封不动地打包进APK外,其他资源都会被编译或者处理。
2、除asset资源外,其他资源都会被赋予资源ID。raw也会被赋予资源ID。
3、打包工具负责编译和打包资源,编译完成之后,会生成一个resources.arsc文件和一个R.java。前者保存的是一个资源索引表,后者定义资源的ID常量。
4、应用程序配置文件AndroidManifest.xml同样会被编译成二进制的XML文件,然后被打包到APK里去。
5、应用程序在运行时通过AssetManager来访问资源,或者通过资源ID来访问,或者通过文件名来访问。



























阅读(2830) | 评论(0) | 转发(0) |
0

上一篇:程序性能优化(选自深入理解计算机系统)

下一篇:没有了

给主人留下些什么吧!~~