我的Android学习之旅[3]——从简单的Hello World来剖析项目结构

——不积跬步,无以至千里;不积小流,无以成江海 开发环境搭建完了,那么让我们建个简单的项目,来了解下Android项目到底是怎么样的一个结构~

1、建立一个简单的Hello World程序

    步骤1:启动Eclipse,选择 New—>Other,如下图所示

     

    

    步骤2:在出现的窗口中选择Android Project,如下图所示:

     

    

    步骤3:此时会出现如下的对话框,填入相应的项目属性,对应如下:    

名 称

属 性 含 义

Project Name

工程名字,物理上就是最外层文件夹的名字

Build Target

应用程序针对的目标设备

Application Name

应用程序的名称,将显示在应用程序的标题栏

Package Name

包名称

Create Activity

是否让ADT自动创建一个默认的继承自Activity的类,该类是一个启动和控制程序的类

Min SDK Version

应用程序所要求的API版本

       

       

                                             创建新的Android项目      

  

    步骤4:点击Finish按钮完成项目的创建,在包管理器中展开项目后如下图所示:

 

    

    2、运行创建的Hello World,看下效果图          

    步骤1:Eclipse菜单栏,选择Run->Run Configurations..,如下图

     

    

    步骤2:此时会在出现的以下窗口中,找到Android选项右键New,如图

       

 

    步骤3:输入新建的配置名称,下图中设为Android15

       

 

    步骤4:点击Browse按钮选中项目,如下图所示

       

 

    步骤5:切换到Target选项卡,选择上篇文章中建立的名为and15的AVD

    

 

    步骤6:在对话框中选择Run选项,运行如下图 

    

    

     

                                                      (按Ctrl+F12可以切换屏幕方向)

  

    3、项目结构的剖析 

    首先看下刚才建立的Android项目的结构,如下图所示:      

     从上图中可以看出,新创建的Android项目包含了src、gen、asset、res等目录,下面就这些目录分别介绍:

  •      Src目录

         从目录名就可猜测出这个目录是用来存放程序源码的,基本上一个Android应用程序的程序逻辑以及功能代码都是写在该目录下的,不同功能的类可以通过 Java      包的机制来进行区分。而我们创建的Hello World工程由于勾选了Create Activity选项,所以在该目录下生成了继承自Activity的启动与控制程序的类HelloWorld,      打开自动生成的HelloWorld.java源文件,内容如下:

      

         从上述代码中,大致可以猜测出当该类初次被创建的时候,会将当前的View设置为R.layout.main,即当前的界面是 R.layout.main(这儿只是进行猜测)。那        么我们很容易产生疑问,Gen目录下生成的R类究竟有什么用?R.layout.main又究竟是什么?在接下来的内容中会给出解答~

      

  •      Gen目录

         Gen目录是ADT插件帮我们生成的,并在该目录与主程序在同一级目录下生成R.Java文件(本程序在cnblogs.com包下),打开文件查看R类内容:

      

           这时候可以知道R.layout.main原来是一个16进制数,而从HelloWorld.java源文件来看,R.layout.main理应指向的是一个界面组件类,此处反而更像是个id,       却又是作何解释?

           其实,在Android应用程序中,ADT生成的R类是一个指向资源的类,更像是一个字典。在该字典中,包含了用户界面、图片、字串等各种资源对应的编 号,         即以16进制表示的编号。所以由此可知,R.layout.main其实指向的是res/layout目录下的main.xml界面描述性文件,该文件会 在下面进行具体介绍。之所有用       R类,一个好处是在于程序在编译的时候会对该类进行查阅,对于该类中不存在即应用程序中没有使用到的资源则不会打包编译进去,从而对程序进行瘦身。

       

 

  •      Assets目录

          该目录目前是空的,因为我们没有放任何东西进去(貌似是废话)!那么该目录干啥用的呢?其实呢,在这个目录可以放很多东西,诸如应用程序中使用到的多媒      体文件(音频或者视频文件)、图片或者文本文件等。其同后面即将介绍的res目录相似,也是存放资源文件的目录,但与res目录的不同之处在于res会 被编译器        所编译,而assets则不会。也就是说应用程序运行的时候,res中的内容会在启动的时候载入内存,asset只有在被用到的时候才会载入内存,所以 一般将一些不经      常使用到的大资源文件存放在该目录下。

      

 

 

  •      res目录

          在该目录下主要是存放整个应用程序的资源文件,该目录按照资源的种类默认分为三个子目录,分别为drawable、layout和values目录:

  •       drawable子目录

          在该子目录下主要存放的是一些图片格式文件,支持的格式有.Png、.9.png和.jpg等位图文件。

 

 

 

  •       layout子目录

          在该子目录下主要存放的是界面布局的XML文件,在Android的应用程序中有两种方式生成用户界面。一种是通过静态的界面描述文件,另外一种就是通过Java

     代码动态生成用户界面。这时候让我们看下上述R.layout.main指向的main.xml文件的内容:

     

         上述内容中第一行指出了xml文档的版本以及编码方式,第二行中的LinearLayout指出了界面的布局方式为线性布局,xmlns:android 属性指出了使用的           android架构,这个属性是必须的,每个界面描述性文件中必须有一个架构申明。第三行则指出了界面的布局是垂直布局,第四行与第五行指出宽和高将撑满 整个父     容器。在该界面中只定义了一个TextView组件,并且该组件宽度撑满父容器,高度则刚好适合,显示的文本引用的是values目录下 string.xml中hello字符串变量     (值为Hello World,HelloWorld!,即运行时候显示的那几个字),其中@符号表示引用。

          

 

 

  •      values子目录

 

 

      该目录中包含了所有的XML格式的参数描述文件,如string.xml字符串描述文件、color.xml颜色描述文件、style.xml样式描述文件和array.xml数组描述文件等。

 

 

 

 

  •      AndroidManifest.xml文件

      应用程序描述文件,有Java开发经验的对这个应该有种似曾相识的感觉吧~其内容如下所示:

 

      

           上述内容中第一行指出xml文档版本以及编码方式,第二行指出了主程序所在的包名,这样在activity的android:name就直接设置成 .HelloWorld。如果我们      又添加一个activity类,但是该类处于包cnblogs.com.cn下,那么该activity添加到上述xml文件中时候 android:name需要设置成 .cn.HelloWorld2。四到五行        则指出了版本信息,第六行的application节点有且仅有一个,其icon属性指出了应用程序安装完后的桌面图标,这儿通过@符号引用 res/drawable目录下的              icon.png图片。在application节点之间,是我们程序中activity类,所有的添加的activity类可以通过写在该描述性文件 中进行注册。从上图中看出,该activity的i      intent-filter属性指出该activity类是默认程序启动时候第一个启动的窗口。

 

 

  •      default.properties文件

 

         该文件打开后,你会发现没有注释的文字只有一行,即指定了应用程序针对的目标设备以及相应的API Level。

 

    

     好了,从对一个简单的Hello World项目的分析中,我们基本上就可以对Android项目结构有个系统的认识了。