详解Android 目录结构

来源:互联网 发布:电脑怎么优化系统 编辑:程序博客网 时间:2024/05/17 01:44

工欲善其事,必先利其器.在开发Android项目之前,让我们先对Android的目录结构有一个清楚的认识.

在Eclipse中新建一个Android Project,名称为“AndroidTest”,则项目结构如图:

1、src目录

文件夹下放置项目的所有包及源文件(.java)。

2、gen目录

文件夹中包含了一个R.java类文件,通过R.java类中的注释可以看出,R.java文件是由aapt工具根据项目中的资源文件来自动生成的。R.java文件是项目的资源字典,里面包含了所有资源文件中的所有资源的唯一ID。不要手工去修改它。每当你修改其他资源文件的时候,该文件都会自动更新。先来看看R.java文件代码:

/* AUTO-GENERATED FILE. DO NOTMODIFY.

*

* This class was automaticallygenerated by the

* aapt tool from the resourcedata it found. It

* should not be modified byhand.

*/

package com.lrjs.AndroidTest;

public final class R {

publicstatic final class attr {

}

publicstatic final class drawable {

publicstatic final int icon=0x7f020000;

}

publicstatic final class layout {

publicstatic final int main=0x7f030000;

}

publicstatic final class string {

publicstatic final int app_name=0x7f040001;

publicstatic final int hello=0x7f040000;

}

}

  可以看到这里定义了很多常量,这些常量的名字都与res文件夹中的文件夹名相同,这也说明了R.java是项目中的资源字典。利用这个文件我们可以很快地找到要使用的资源。  可以看出R.java里面的定义的所有类和变量都是静态的,也就是说,我们在程序中使用时,不需要实例化就可以直接使用,这就为我们减轻了很多工作。     如:SetContentView(R.layout.main)

3、Android 2.2目录

是项目中要用到的包,这个文件夹在项目建立时自动生成。你自己的Android可能不是2.2版本。

4、assets目录

Android 系统为每个新设计的程序提供了/assets目录,这个目录保存的文件可以打包在程序里。/res 和/assets的不同点是,android不为/assets下的文件在R.java中生成ID。如果使用/assets下的文件,需要指定文件的路径和文件名。

5、res目录

接下来的res文件夹中包含了项目的所有资源,比如高低中分辨率程序图标文件(drawable-hdpi、drawable-ldpi、drawable-mdpi)、布局文件(layout)、常量(values)等。

Android按照约定,将不同的资源放在不同的文件夹内,这样可以方便地让aapt工具来扫描这些资源,并为它们生成对应的资源字典类R.java。

1)我们先来看看布局文件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"//表示引用String.xml文件中的hello所代表的字符串

/>

</TextView >

</LinearLayout>

 2)下面来看常量的定义(String.xml文件):

<?xmlversion="1.0" encoding="utf-8"?>

<resources>

    <string name="hello">HelloWorld, AndroidTest!</string>

    <string name="app_name"> AndroidTest</string>

</resources>

  这个文件很简单,就定义了两个字符串资源,R.java中的:

public static final classstring {

publicstatic final int app_name=0x7f040001;

publicstatic final int hello=0x7f040000;

}

  这里的app_name和hello即指向String.xml文件中的两个字符串资源

6、AndroidManifest.xm

AndroidManifest.xml是应用程序清单文件,包含了该项目中所有使用的Activity、Service、Receiver,该文件中代码如下:

<?xml version="1.0"encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="com.lrjs.AndroidTest"   //声明应用程序包

android:versionCode="1"//该应用程序版本代号

android:versionName="1.0">//该应用程序版本名称

 

<uses-sdkandroid:minSdkVersion="15" /> //该应用程序所使用的SDK版本

 

<application

   android:icon="@drawable/ic_launcher"  //应用程序图标

   android:label="@string/app_name">  //应用程序名

   <activity

        android:name=".AndroidTest "//活动名称,和package一起定义了命名空间

        android:label="@string/app_name">

    <intent-filter> //设置为应用程序默认启动的activity

        <actionandroid:name="android.intent.action.MAIN" />

        <categoryandroid:name="android.intent.category.LAUNCHER" />

    </intent-filter>

</activity>

</application>

</manifest>  

7、proguard.cfg文件

这个文件是混淆代码的脚本配置文件。

8、AndroidTest.java

package com.lrjs.AndroidTest;

import android.app.Activity;

import android.os.Bundle;

public class AndroidTestextends Activity {

/**Called when the activity is first created. */

@Override

publicvoid onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

}

}

  主程序AndroidTest类继承自Activity类,重写了voidonCreate(Bundle savedInstanceState)方法。在onCreate方法中通过setContentView(R.layout.main)调用布局文件layout/main.xml来显示。一个Activity对应一个xml布局文件。

原创粉丝点击