用Eclipse开发和调试Android应用程序(4)

二、 创建 Android Eclipse 工程

请参考的《Android SDK 2.3与Eclipse最新版开发环境搭建(五)》,

三、 工程结构详细解析

1. 工程结构

在Eclipse的Java透视图中,可以看到工程的Package Explorer如下图:

用Eclipse开发和调试Android应用程序

 

具体包括:

src 文件夹 - 包含示例应用程序的包,即org.deaboway.test。

R.java - Android Developer Tools 自动创建这个文件,它提供访问 Android 应用程序的各种资源所需的常量。后面会详细讨论 R 类与资源之间的关系。

HelloAndroidWorld.java - 应用程序的主活动类的实现。

Referenced libraries - 包含 android.jar,这是 Android SDK 中的 Android 运行时类的 jar 文件。

res 文件夹 - 包含应用程序的资源,包括:

· drawable - 图标:这个文件夹包含图形文件,比如图标和位图。

· layout - 布局文件:这个文件夹包含表示应用程序布局和视图的 XML 文件。

· values - 字符串:这个文件夹包含 strings.xml 文件。这是为应用程序实现字符串本地化的主要方法。

AndriodManifest.xml - 示例应用程序的部署描述符。

default.properties 和proguard.cfg – 从2.3版本以后,android sdk 本身包含proguard,可以通过正常的编译方式也能实现代码混淆,我们可以看到android-sdk-windows\tools\下面多了一个proguard文件夹。防止反编译工具进行反编译,保证代码安全。

2. 主类分析

这个示例应用程序由一个Activity(活动)组成,即HelloAndroidWorld。正如前面提到的,HelloAndroidWorld类是在HelloAndroidWorld.java 文件中实现的。

package org.deaboway.test;

import android.app.Activity;

import android.os.Bundle;

import android.widget.TextView ;

public class HelloAndroidWorld extends Activity {

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

@Override

public void onCreate(Bundle savedInstanceState) {

super .onCreate(savedInstanceState);

// TextView textView = new TextView(this);

// textView.setText("Hello Android World!");

// setContentView(textView);

setContentView(R.layout.main );

}

}

在这个源代码片段中,要注意几点:

HelloAndroidWorld 是一个普通的 Java 类,包含包和导入语句。 HelloAndroidWorld 扩展 android.app 包中的 Android 基类 Activity。 onCreate() 方法是这个活动的入口点,它接受一个 Bundle 类型的参数。Bundle 类本质上是 map 或 hashmap 的包装器。在这个参数中传递构造活动所需的元素。这里暂时不讨论这个参数。 setContentView() 负责用 R.layout.main 参数创建主 UI。R.layout.main 是应用程序资源中主布局的标识符。

3. R.java文件

R.java 文件是在构建时自动创建的,所以不要手工修改它,因为所有修改都会丢失。本实例的R.java文件内容如下:

/* AUTO-GENERATED FILE. DO NOT MODIFY.

*

* This class was automatically generated by the

* aapt tool from the resource data it found. It

* should not be modified by hand.

*/

package org.deaboway.test;

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;

}

}

R 类包含一些匿名子类,每个子类包含前面描述的各种资源的标识符。注意,这些类都是静态的。

请注意 R.layout.main 代表的元素。这个标识符代表由 main.xml 定义的布局。在活动的 onCreate 方法中可以使用这个值:setContentView(R.layout.main)。这就是在运行时把特定的活动(这里是HelloAndroidWorld)和特定的布局(主布局)联系在一起的方法。

4. main.xml文件

本示例应用程序包含一个活动和一个视图。应用程序包含一个名为 main.xml 的文件,它代表活动的主 UI 的视觉方面。

注意,在 main.xml 中没有指定在哪里使用这个布局。这意味着,如果需要的话,可以在多个活动中使用它。

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

"http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:text="@string/hello"

/>

这是最简单的布局,其中只有一个垂直的线性布局,这意味着所有元素排成一列。这里有一个 TextView 元素,它与其他开发环境中的标签类似。TextView 代表不可编辑的静态文本。

注意,每个视图元素(比如这个示例中的 LinearLayout 和 TextView)都有属于 Android 名称空间的属性。一些属性是所有视图元素都有的,比如 android:layout_width 和android:layout_height。这些属性可以采用的值是:

fill_parent - 使视图元素占满可用的空间。也可以认为这就是 “拉伸”。

wrap_content - 这个值让 Android 把元素一个接一个地排列,不进行拉伸。

5. AndroidManifest.xml文件

AndroidManifest.xml 文件是 Android 应用程序的部署描述符。这个文件列出应用程序中包含的所有Activity(活动)、ContentProvider(内容提供程序)、BroadcastReceiver(广播接收器)与Service(服务),以及应用程序支持的 IntentFilter。下面是这个示例应用程序的完整的 AndroidManifest.xml 文件。

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

"http://schemas.android.com/apk/res/android"

package="org.deaboway.test"

android:versionCode="1"

android:versionName="1.0" >

"@drawable/icon" android:label="@string/app_name" >

".HelloAndroidWorld"

android:label="@string/app_name" >

"android.intent.action.MAIN" />

"android.intent.category.LAUNCHER" />

这里指定了源文件中的包名。采用与 Java 源文件和导入语句相似的模式。 标记的实际作用是 “导入” 这个包中的类。在这个文件中,所有非完全限定的类都属于 package 属性指定的包。 标记的一个属性引用了应用程序的一个资源。请注意 drawable 标识符前面的 @ 符号。这里的意思是,在应用程序资源的 drawable 文件夹中寻找名为 “icon” 的资源。 标记包含以下属性和值: android:name表示实现这个活动的 Java 类。 android:label 是应用程序的名称。注意,它来自一个字符串资源。string.xml 文件包含应用程序的本地化字符串。 表示应用程序中可用的 IntentFilter。这是 Android 应用程序中最常见的 IntentFilter。这个过滤器的实际意思是,它实现 “主” 操作(也就是入口点),而且它位于 OS 的启动器中。这意味着可以在 Android 设备上像启动其他应用程序一样,从应用程序主列表中启动它。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwfdxf.html