Android开发之“hello World”的实现
按照惯例,同时也是为了更好地引导读者进入精彩的Android世界,我们接下来要实现一个简单的“hello World”例子。这里以Android SDK 2.1为基础基于Eclipse Galileo(Eclipse 3.5)作为IDE来完成开发。
通过“File”→“New”→“Project”创建Android工程,如图1所示。设置“Project name:”为“helloWorld”,设置“Build Target”为“Android 2.1”,设置“Application name:”为“helloWorld”,设置“Package name:”为“com.miaozl.helloWorld”,设置“Create Activity:”为“helloWorld”。然后单击“Finish”按钮即可完成工程的创建。
图1 创建Android工程
需要说明的是,在Android的设计中,Android 1.0的SDK版本为“1”、Android 1.1的SDK版本为“2”、Android 1.5的SDK版本为“3”、 Android 1.5的SDK版本为“3”、 Android 1.6的SDK版本为“4”、 Android 2.0的SDK版本为“5”、 Android 2.0.1的SDK版本为“6”、 Android 2.1的SDK版本为“7”,Android 2.2的SDK版本为“8”,Android 2.3的SDK版本为“9”,Android 3.0的SDK版本为“Honeycomb”。在具体SDK版本的选择上,应在考虑技术实现可行性的前提下,选择尽量小的版本,这有利于扩大兼容的物理设备。
在创建Android工程的过程中。由于Eclipse的原因,系统可能会提示“no classfiles specified,Conversion to Dalvik format failed with error 1”,如果出现该错误信息,按“F5”键刷新一次工程即可。需要说明的是,在Foryo后,该问题已经很少出现。对于复制过来的工程,可能会引起工程属性方面的问题,这一问题可以通过Android工程的右键菜单选择“Android Tools”→“Fix Project Properties”修复系统属性解决。
另外如果是第一次创建工程, Eclipse会提示用户“Failed to find an AVD compatible with target”。这是由于Android在稍后的版本中不再提供默认的Android虚拟设备(AVD,Android Virtual Device),需要用户自行创建。在Linux中,AVD相关的文件包括userdata.img映像文件,默认情况下存于/root/.android目录中,AVD描述了当前模拟器的设备配置信息。当工程创建完成后,即可在Eclipse的“Package Explorer”中看到Android的工程布局。Eclipse对于所辖工程的维护默认情况下位于/root/workspace/.metedata目录中。如果期望获得一个干净的运行环境,直接删除/root/.android和/root/workspace/.metedata目录即可。
如图2所示为所生成的Android的“helloWorld”工程布局,其中“.settings”描述了Eclipse和采用的JDT包的若干信息;“.assets”为空目录,描述了工程的断言信息,断言并不常用,常见的用法是维护一些工程的资源文件,但断言对于单个文件有1MB的大小限制。
“bin”为输出文件目录,包含了各源文件对应的CLASS字节码文件、“ap_”格式的资源文件、DEX字节码文件和最终利用“aapt”工具打包的APK格式的Android安装包。需要说明的是APK格式的Android安装包本质上为ZIP格式的压缩包,包含了资源、DEX字节码文件和AndroidManifest.xml等,当系统检测到APK格式的文件时,系统会把它当做一个应用看待。
“gen”为资源数据目录。包含了“aapt”工具在工程内所发现的所有资源数据。
“res”为描述资源的XML文件目录,通常包括“drawable”、“layout”、“values”等子目录,描述了工程涉及的图标、字符串和布局等信息,复杂的应用还涉及“menu”、“color”、“style”等目录。其中布局资源文件为main.xml,字符串资源文件为strings.xml。
“src”为工程源文件目录,包含了开发者创建的Java文件。
“.classpath”文件描述了工程涉及的路径信息。
“.project”文件描述了工程名、所需的编译命令等工程信息。
“AndroidManifest.xml”则描述了工程实现细节如“manifest”、“application”、“activity”、“intent-filter”、“action”、“category”、SDK版本信息等信息、应用程序的权限等,是Android工程中最重要的文件。
“default.properties”描述了SDK的版本信息。
图2 Android工程布局
对于基于原生代码的应用,在工程下可能还存在“jni”目录用于存放原生源代码,存在“libs”目录,用于存放编译原生源代码生成的动态共享库等。
下面为主要文件的实现细节:
1.src\com\miaozl\helloWorld\helloWorld.java
代码1为“hello World”工程的helloWorld.java文件的内容,在该文件中定义了一个名为“helloWorld”的Activity,并通过setContentView()函数加载该Activity的布局资源文件。
代码1 helloWorld.java
package com.miaozl.helloWorld;
import android.app.Activity;
import android.os.Bundle;
public class helloWorld extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); //创建Activity
setContentView(R.layout.main); //加载布局资源
}
}
利用setContentView ()函数还可以直接加载View类,View是用来构建应用程序的UI控件系统的,包括列表(Lists)、网格(Grids)、文本框(Text Boxs)、按钮(Buttons)等扩展类。图3显示了Android系统的View子系统的类图。其中android.view.View类为UI控件的基类,android.view.ViewGroup为布局类的基类。
图3 View子系统类图
Activity与窗口管理器有着密切的关系。View子系统是Android整个UI框架的基础。
2.res\layout\main.xml
代码2为“helloWorld”工程的main.xml文件,在该文件中定义了该Activity的布局属性,定义了该Activity的根布局为LinearLayout,设置该Activity为竖向的全屏窗口,并定义了一个TextView 控件。
代码2 main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=http://schemas.android.com/apk/res/android //定义根布局,定义xmlns的名字空间
android:orientation="vertical" // Activity为竖向
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>
在Android中,布局管理器
补充:移动开发 , Android ,