接着上一篇的说,一个Android项目通常是什么结构呢,大概是这样
\MyProject
\src
\com\mycompany\android\my-root-package
\com\mycompany\android\my-root-package\another-package
\gen
\com\mycompany\android\my-root-package\R.java
\assets
\res
\AndroidManifest.xml
...etc
首先是AndroidManifest.xml,这个文件是Andriod项目的系统清单文件,用于控制Android应用的,版本号,名称,图标,访问权限,应用程序包含的组件等属性
项目经过编译后,出现两个文件夹,bin和gen
bin 用于存放生成的目标文件,如Dalvik虚拟机的可执行性文件(.dex后缀,.dex 是由.class文件转化而来),资源打包文件.apk等,这个和.net项目是一样的
gen 用于保存Android自动生成的一个R.java清单文件,上一篇里多次使用了R.layout.main,R.id.show,R.id.ok ,其实它是Android项目里自动生成的一个Java类,如下:
package WangLi.HelloWorld.Space;
public final class R {
public static final class attr {
}
public static final class drawable {
public static final int ic_launcher=0x7f020000;
}
public static final class id {
public static final int ok=0x7f050001;
public static final int show=0x7f050000;
}
public static final class layout {
public static final int main=0x7f030000;
}
public static final class string {
public static final int app_name=0x7f040001;
public static final int hello=0x7f040000;
}
}
R.java文件是由aapt工具根据应用中的资源文件来自动生成的,因此我们可以把R.java理解成Android应用的资源字典
aapt生成R.java文件的规则主要有两条:
每类资料对应R类的一个内部类。比如所有界面布局资源对应于layout内部类;所有字符串资源类对应于string内部类;所有标识资源对应于id内部类
每个具体的资源类项对应于内部类的一个public static final int 类型的field。例如前面在界面布局文件中用到了ok,show两个标识符,因此R.id类里就包含了这两个Field;由于drawable-xxxx文件夹包含了icon.png图片,因此R.drawable类里包含了icon Field
Res 目录,存放了Android应用中的资源,包括图片资源,字符串资源,颜色资源等,上一篇中就包含了界面设置的Layout中的main.xml