第二章 工程结构
Android工程像普通的 JAVA工程一样,被组织成明确的树状目录结构。但其目录结构内容又不同于 JAVA工程,这种改变是为了生成真正的 Android应用程序而做准备,以使其能在设备或者模拟器上运行。下面具体讲解一下 Android目录结构,可以帮助你理解这种目录结构安排,更好的学习本书中提到的一些样例。
基本内容
当你创建一个新的 Android工程后,在工程的根目录下,有七个重要的条目。
l AndroidManifest.xml,是一个 xml文件,符合 xml基本规范。它有两方面的内容,一是描述应用程序,二是描述应用程序包含的组件,如 activites、 services等
l build.xml,它是 Ant脚本,描述编译程序和安装程序的规则
l bin/,它包含编译后的应用程序,如 class文件
l libs/,它包含你的程序使用的第三方 java jar包
l src/,应用程序的 java源代码
l res/,它包含图标、界面布局之类的资源文件,这些资源文件会与编译后的 java文件一块打包到应用程序中。
l assets/,一些文件,会打包到应用程序中,并发布到设备上
擦一把汗
当你创建工程时,你为应用程序的主 activity选择合法的类名(例如: com.commonsware.android.SomeDemo),然后你会在你的工程 src目录下看到相应的目录树结构已被创建,还有一个代表主 activity的 Activity子类桩被创建(例如: src/com/commonsware/android/SomeDemo.java),你可以改变这个 java文件,或者在 src下添加其它 java文件来实现你的应用程序。
第一次编译工程时,在主 activity目录树下, Android编译工具会生成 R.java文件。这个文件包含许多常数,每一个常数都与 res/目录下的相应资源文件相关联,这些资源文件是按你需要你放进去的。你不能手动去修改 R.java文件,让 Android工具帮你修改。在许多样例中,你都可以看到,我们引用 R.java中的标识符(例如:引用布局标识符 R.layout.main)
现在,讲解余下的部分
你会注意到,在你的工程下有一个 res/目录树,它里面包含了应用程序的资源-静态文件,这些文件会被原样打包到你的 application中,或者被预处理后再打包。在 res/下面,会有一些子目录,它们可能自动生成,也可能是你手工建的:
l res/drawable/ 图片目录( PNG, JPEG,等等)
l res/layout/ 基于 xml的界面布局说明
l res/menu/ 基于 xml 的菜单说明
l res/raw/ 普通文件(例如 联系人信息 CSV 文件)
l res/values/ 字符串、标尺等类似数据
l res/xml/ 其它目的 xml 文件,你希望它们被打包到 application 中
在接下来的章节,我们会涉及所有的这些文件,甚者更多。
你学到了什么
当你编译工程时(通过 Ant 或者编译环境),编译结果会放在 bin/ 目录下。更具体些:
l bin/classes/ 编译过的 Java 类, class 文件
l bin/classes.dex 可执行的文件,由编译好的 class 文件生成
l bin/yourapp.ap_ 你的应用程序的资源,被打包成 zip 文件( yourapp 是你的应用程序的名称)
l
bin/yourapp-debug.apk or bin/yourapp-unsigned.apk 是真正的 Android 应用程序( yourapp 是你的应用程序的名称)
.APK 文件是一个 zip 包,包含 .dex 文件 、 编译后的资源文件( resources.arsc ) 、 未编译的资源文件(在 res/raw/ 下的文件)和 AndroidManifest.xml 文件。它也可以数字签名,如果文件名字包含 -debug 串,表明该 APK 文件已经用调试密钥签名过,可以在模拟器下使用;如果文件名字包含 -unsigned 串,表明你想发布你的应用程序( ant 发布),但 APK 仍需要数字签名,你可以使用 jarsigner 工具和一个官方的密钥签名。