1.4 Android应用工程文件组成

Android的应用工程文件主要由以下几部分组成。

● src目录:项目源文件都保存在这个目录中。

● R.java文件:这个文件是Eclipse自动生成的,应用开发者不需要去修改里面的内容。

● Android Library:这是应用运行的Android库。

● assets目录:里面主要放置多媒体等一些文件。

● res目录:主要放置应用会用到的资源文件。

● drawable目录:主要放置应用会用到的图片资源。

● layout目录:主要放置用到的布局文件。这些布局文件都是XML文件。

● values目录:主要放置字符串(strings.xml)、颜色(colors.xml)、数组(arrays.xml)。

● Androidmanifest.xml:相当于应用的配置文件。在这个文件中,必须声明应用的名称,应用所用到的Activity、Service以及receiver等。

在Eclipse中,一个基本的Android项目的目录结构如图1-31所示。

图1-31 Android应用工程文件组成

1.src目录

与一般的Java项目一样,“src”目录下保存的是项目的所有包及源文件(.java),“res”目录下包含了项目中的所有资源。例如,程序图标(drawable)、布局文件(layout)和常量(value)等。不同的是,在Java项目中没有“gen”目录,也没有每个Android项目都必须有的AndroidManfest.xml文件。

“.java”格式文件是在建立项目时自动生成的,这个文件是只读模式。不能手动添加或删除R.java文件,R.java文件是定义该项目所有资源的索引文件。先来看看HelloWorld项目的R.java文件,代码如下:

            package net.learn2develop.HelloWorld;
            public final class R
            {
                public static final class attr
                {
                }
                public static final class drawable
                {
                public static final int icon=0x7f020000;
                }
                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;
              }
          }

从上述代码中,可以看到文件定义了很多常量,并且会发现这些常量的名字都与res文件夹中的文件名相同,这再次证明.java文件中所存储的是该项目所有资源的索引。有了这个文件,在程序中使用资源将变得更加方便,可以很快地找到要使用的资源,由于这个文件不能手动编辑,所以当用户在项目中加入了新的资源时,只需要刷新一下该项目,.java文件便自动生成了所有资源的索引。

2.res目录

在res目录下包含了该项目所使用到的资源文件,这里面的每一个文件或者资源都将在R.java文件中进行索引定义。文件类型主要有以下几类。

● 图片文件:分别提供了高分辨率(drawable-hdpi)、中分辨率(drawable-mdpi)和低分辨率(drawable-ldpi)的图片文件。

● 布局文件:在layout目录下,默认只有一个main.xml,用户也可以添加更多的布局文件。

● 字符串:在values目录下的strings.xml文件中。

打开main.xml布局文件,代码为:

          <?xml version="1.0" encoding="utf-8"?>
          <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  //线性布局
                  android:orientation="vertical"
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent">
          <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/hello"/>
          <LinearLayout/>

在该布局文件中,首先定义了采用线性布局,内部只有一个文本框控件。这个控件显示内容引用了string文件中hello变量。

其中,

● <LinearLayout>:线性版面配置,在这个标签中,所有元件都是按由上到下排队排成的。

● android:orientation:表示这个介质的版面配置方式是从上到下垂直地排列其内部的视图。

● android:layout_width:定义当前视图在屏幕上所占的宽度,fill_parent即填充整个屏幕。

● android:layout_height:随着文字栏位的不同而改变这个视图的宽度或高度。

在上述布局代码中,使用了一个TextView来配置文件标签Widget(构件),其中设置的属性android:layout_width为整个屏幕的宽度,android:layout_height可以根据文字来改变高度,而android:text则设置了这个TextView要显示的文字内容,这里引用了@string中的hello字符串,即String.xml文件中的hello所代表的字符串资源。Hello字符串的内容“HelloWorld、HelloAndroid”就是用户在HelloAndroid项目运行时看到的字符串。

Strings.xml文件的代码为:

            <?xml version="1.0" encoding="utf-8"?>
            <resources>
                <string name="hello">HelloWorld,HelloAndroid</string>
                <string name="app_name">HelloAndroid</string>
            <resources/>

3.AndroidManfest.xml文件

在文件AndroidManfest.xml中包含了该项目中所使用的Activity、Service、Receiver,以下代码为“HelloWorld”项目中的AndroidManfest.xml文件。

            <?xml version="1.0" encoding="utf-8"?>
            <manifest xmlns:android="http://schemas.android.com/apk/res/android"    //根节点
                package="PACKAGE"                                                  //包名
                android:versionCode="1"
                android:versionName="1.0" >
                <uses-sdk android:minSdkVersion="16"/>                              //SDK版本
                <instrumentation
                    android:name="android.test.InstrumentationTestRunner"
                    android:targetPackage="TEST_TARGET_PCKG" />
                <application                                                       //图标和应用程序名称
                    android:icon="@drawable/ic_launcher"
                    android:label="@string/app_name" >
                  <activity android:name=".firstActivity"                           //默认启动的Activity
                    Android:label="@string/app_name">                              //Activity名称
                      <intent-filter>
                        <action android:name="android.intent.action.MAIN"/>
                        <category android:name="android.intent.category.LAUNCHER"/>
                    <uses-library android:name="android.test.runner" />
                </application>
            </manifest>