1.3 Android开发环境的搭建
本节主要讲解基于Eclipse的Android开发环境的搭建(包括SDK的下载和SDK的配置)、模拟器的创建和运行,以及Android开发环境搭建好之后,对其开发环境进行测试并创建第一个Android应用程序Hello Android等相关知识。
1.3.1 Android SDK的下载
前面已经对Android平台进行了简单的介绍,从本节开始,将向读者介绍如何逐步搭建自己的开发环境。Android SDK是开发Android应用程序的基础开发环境,其本身是免费的,下面将向读者介绍Android SDK的下载,其具体步骤如下。
(1)首先在浏览器中输入http://developer.android.com/sdk/index.html,打开Android SDK的官方下载网站,如图1-5所示。点击网页右下角被椭圆圈中的内容为“Download the SDK…”的区域,进入SDK的下载页面,如图1-6所示。
▲图1-5 SDK官方下载首页
▲图1-6 下载页面
(2)进入到SDK的下载页面后,按照图1-6中被红色椭圆圈中的区域进行下载项选择(作者选择的是Windows下的32位版本),然后点击网页正下方被椭圆圈出的内容为“Download the SDK…”的区域进行下载,此时浏览器会弹出下载对话框(这一点不同的浏览器会有所不同),如图1-7所示。
▲图1-7 下载对话框
完成以上步骤,等待Android SDK下载完成,就可以进行环境搭建的下一步工作了,也就是对Android SDK进行相关的配置,这些内容将在下一节中向读者介绍。
1.3.2 Android SDK的配置
下载完成后,就可以对Android SDK进行解压和配置了,主要步骤如下。
(1)Android SDK下载成功后,会得到一个名称为“adt-bundle-windows-x86-20140702”的压缩包(随选择下载版本的不同,此名称可能不同)。将此压缩包解压得到同名文件夹,如图1-8所示。
▲图1-8 下载后得到的压缩包及解压后的文件夹
▲图1-9 解压后的文件夹的子目录
(2)打开解压后的文件夹,如图1-9所示。其中名称为“eclipse”的子文件夹为绑定了ADT插件的用于Android应用程序开发的集成开发环境——Eclipse。另外一个名称为“sdk”的子文件夹则是要进行配置的Android SDK。
(3)打开“eclipse”子文件夹,如图1-10所示。接着点击其中的“eclipse.exe”,启动Eclipse集成开发环境,此时会出现如图1-11所示的界面。
▲图1-10 eclipse文件夹的子目录
(4)图1-11所示界面是提醒读者设置自己的项目工作区路径,作者采用的是“E: \软件\workspace”。建议读者的工作区路径设置和作者的保持一致,这样在进行后继案例的学习时可能会方便不少,当然读者也可以采用自己特定的工作区路径。
▲图1-11 Android工作区的选择
提示
若读者的工作区路径与作者这里设置的不一样,也是可以的。但导入的Android项目都需要对构建器进行修改才能正常编译运行。如何修改构建器会在后面进行介绍,读者到时注意一下即可。
(5)指定完工作区路径后,就进入了Eclipse的主界面,如图1-12所示。在此界面中选择“Window”菜单下面的“Preferences”子菜单项,系统将弹出“Preferences”配置界面,如图1-13所示。
▲图1-12 Android的SDK的配置图1
▲图1-13 Android的SDK的配置图2
(6)选择“Preferences”配置界面左侧列表中的“Android”选项(如图1-13步骤1所示),然后点击界面右上侧的“Browse…”按钮(如图1-13步骤2所示),在弹出的文件浏览界面中选中前面解压得到的“sdk”目录(如图1-13步骤3所示)。
(7)选中“sdk”目录后,点击文件浏览界面中的“确定”按钮(如图1-13步骤4所示)。等文件浏览界面消失后,再点击“Preferences”配置界面中右下侧的“Apply”按钮(如图1-13步骤5所示),若此时看到图1-13中列出了多个Android版本的信息(如图1-13中“配置成功的标志”框所圈中的部分),则说明配置成功。
(8)最后点击“Preferences”配置界面中右下侧的“OK”按钮(如图1-13步骤6所示)即完成了整个Android SDK的配置。
(9)图1-13中只有“Android 4.4W”版本,如果需要其他的版本,可点击Eclipse主界面中的(Android SDK Manager)按钮,进入加载界面,如图1-14所示。加载完成后,进入Android SDK Manager界面,如图1-15所示,在该界面勾选需要下载的SDK版本,再单击“Install…”进行下载、安装即可。
▲图1-14 单击Android SDK Manager
▲图1-15 SDK下载界面
提示
在图1-15SDK下载界面中单击“Install…”进行下载安装SDK版本时,需要联网下载,且下载速度较慢,请读者耐心等待。
至此,用于开发Android应用程序的Android开发环境的搭建及相关环境的配置就完成了,读者此时就可以正式开始Android应用开发之旅了。
1.3.3 创建并启动模拟器
开发环境搭建基本完成后,在正式开发Android应用程序之前,还有一个很重要的工作就是创建模拟器。模拟器可以在初学者没有实际设备的情况下在PC上对应用程序进行简单的运行测试,很大程度上降低了学习的成本。且模拟器的创建很简单,其具体步骤如下。
(1)首先在Eclipse中单击(Android Virtual Device Manager)按钮,如图1-16所示。
▲图1-16 “Android SDK and AVD Manager”按钮
(2)单击按钮后,系统将弹出Android Virtual Device Manager对话框,如图1-17所示。
▲图1-17 Android SDK and AVD Manager对话框
(3)在弹出的Android SDK and AVD Manager对话框中单击“New”按钮(如图1-18所示),系统将弹出Create new Android Virtual Device(AVD)对话框,如图1-19所示。
▲图1-18 New按钮
▲图1-19 Create new Android Virtual Device(AVD)对话框
(4)在Create new Android Virtual Device(AVD)对话框中输入模拟器的名称(这里输入的是android4.2.2),下拉Target列表选中Android4.2.2-API Level 17,在Internal Storage面板中输入100(代表内部存储容量为100MB),在SD Card面板中的Size文本框中输入100(代表SD卡容量为100MB),如图1-20所示。
▲图1-20 模拟器配置
(5)然后设置模拟器显示屏分辨率为5.1WVGA(480*800),最后勾选Use Host GPU开启本地GPU渲染支持,如图1-20所示。模拟器配置完成后,单击“OK”按钮,即可完成创建指定版本的Android模拟器。
(6)创建完Android SDK的模拟器后,在Android SDK and AVD Manager对话框中就可以显示出创建的Android SDK模拟器了,如图1-21所示。
▲图1-21 创建完成的Android SDK模拟器
(7)在Android SDK and AVD Manager对话框中选中创建的Android模拟器,单击“Start”按钮(如图1-22所示),弹出Launch Options对话框,如图1-23所示。
▲图1-22 Start按钮
▲图1-23 Launch Options对话框
(8)在弹出的Launch Options对话框中单击“Launch”按钮(如图1-24所示)系统将启动Android SDK模拟器,启动完成后的效果如图1-25所示。
▲图1-24 Launch按钮
▲图1-25 启动完成的Android SDK模拟器
提示
运行模拟器时可能会很慢,有时甚至可能达到几分钟时间,如果没有报错,请读者耐心等待。
1.3.4 第一个Android程序
前面3节已经介绍了Android SDK的下载、Android SDK的配置和创建及启动模拟器等重要内容,接下来将带领读者构建第一个Android应用程序并对该程序进行简单的讲解,其具体内容如下。
1.创建第一个Android应用程序
(1)点击eclipse.exe,启动Eclipse,依次选择“File/New/Android Application Project”,如图1-26所示。或者点击按钮后,系统将弹出新建项目对话框,如图1-27所示。
▲图1-26 新建项目方法
▲图1-27 新建项目对话框
(2)在新建项目对话框中选择“Android/Android Application Project”,如图1-28所示,然后单击“Next”按钮,执行下一步,即弹出New Android Application对话框,如图1-29所示。
▲图1-28 选择Android Project创建Android应用程序
(3)在New Android Application对话框中输入应用程序的名称(在这里输入的是Sample_1_1),然后在Project Name中输入项目名称(这里输入的名称与Application Name中的相同,当然也可以不同),同时在Package Name中输入应用程序的包名(这里输入的是wyf.ytl),如图1-29所示。
▲图1-29 New Android Application对话框
(4)接着在Minimum Required SDK中选择应用程序最低版本(这里选择的是Android 2.2版本),最后在Target SDK中选择应用程序的目标版本,都填完后,整体情况如图1-29所示。
提示
创建项目时输入项目包名时,需要至少使用二级包名,否则在该对话框上方会显示“Package name must have at least two identifiers.”的错误信息。
(5)单击“Next”按钮后进入如图1-30所示的界面,根据需要勾选是否创建自定义图标,勾选“Create activity”,根据需要也可更改默认的项目路径,最后单击“Next”按钮执行下一步。
▲图1-30 创建项目截图1
(6)接着在如图1-31所示的界面中选择Activity样式,此处选择的是“Blank Activity”,单击“Next”按钮执行下一步。
▲图1-31 创建项目截图2
(7)在如图1-32所示的界面中输入Activity Name和Layout Name,单击“Finish”按钮完成项目的创建。此时在Eclipse的Project Explorer界面中会自动添加创建的项目Sample_1_1,其目录结构如图1-33所示。
▲图1-32 单击Finish按钮创建项目
▲图1-33 创建完成的Android项目
(8)在项目名上单击鼠标右键,然后依次选择“Run As/Android Application”即可运行刚才创建的HelloAndroid项目,运行效果如图1-34所示。
▲图1-34 HelloAndroid项目竖屏效果
提示
因为有很多程序或者游戏是横屏模式的,所以在程序调试过程中,可能需要将模拟器切换成横屏模式,读者可以通过使用快捷键Ctrl+F12来切换模拟器的横、竖屏模式,HelloAndroid程序在横屏模拟器中运行效果如图1-35所示。
▲图1-35 HelloAndroid项目横屏效果
2.HelloAndroid的简单讲解
通过前面的学习,读者已经能够创建并运行简单的Android程序了,但可能对Android项目还不够了解,接下来将通过对HelloAndroid程序的详细介绍使读者了解Android项目的目录结构及HelloAndroid的运行机理。
(1)先来看看HelloAndroid项目中各个目录和文件的作用。
· src目录:该目录用来存放应用程序中所有的源代码,代码的源文件一般是存放在相应的包下面,在开发Android应用程序时,大部分时间都是在编写src中的源代码。
· gen目录:该目录下一般只有一个文件,即R文件。该文件是由ADT自动产生的,存放的是应用程序中所使用的全部资源文件的ID,在应用程序开发过程中只是使用R文件,一般不需人工修改该文件。
· assets目录:该目录存放应用程序中使用的外部资源文件,如音频、视频、数据文件等。在程序中可以通过输入/输出流对该目录中的文件进行读写。
· res资源目录:该目录下一般有drawable系列、layout及values等文件,下面将对这些文件夹逐一进行介绍。
· drawable系列文件夹:一般有drawable-hdpi、drawable-mdpi、drawable-ldpi三个文件夹,这3个文件夹分别用来存放不同分辨率目标设备的图片资源。当应用程序在目标设备上运行时,系统会自动根据目标设备的分辨率选择对应文件夹下的图片使用。
· layout文件夹:该文件夹下包含了所有使用xml格式的界面描述文件,这些文件用于表述应用程序中用户界面的布局。
· values文件夹:该文件夹中包含了一些xml格式的资源描述文件,一般包括string.xml(字符串资源)、colors.xml(颜色资源)、style(样式资源)等。
· AndroidManifest.xml:该文件是整个程序的系统控制文件,是每个应用程序都不可缺少的。其描述了应用程序有哪些组件、哪些资源、哪些权限等。
提示
除了上述文件夹及文件外,还有一个一般开发时不需要直接使用的default.properties文件。此文件为项目的配置文件,一般不需要人为改动,系统会自动对其进行管理,有兴趣的读者可以自行打开查看。
(2)上面介绍了HelloAndroid项目中各个目录和文件的作用,接下来介绍的是该项目的系统控制文件AndroidManifest.xml,该文件的主要功能为定义该项目的使用架构、版本号、SDK的版本以及声明Activity组件等,其具体代码如下。
代码位置:见随书光盘中源代码/第1章/Sample_1_1目录下的AndroidManifest.xml。
1 <? xml version="1.0" encoding="utf-8"? ><! --XML的版本以及编码方式--> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="wyf.ytl" 4 android:versionCode="1" 5 android:versionName="1.0"><! --该标记定义了该项目的使用架构,所在的包以及版本号--> 6 <uses-sdk android:minSdkVersion="14" 7 android:targetSdkVersion="17" /><! -- 声明SDK的版本 --> 8 <application android:icon="@drawable/ic_launcher" 9 android:label="@string/app_name" 10 android:theme="@style/AppTheme" ><! -- 定义了该项目在手机中的图标以及名称 --> 11 <activity android:name="wyf.ytl.MainActivity" 12 android:label="@string/app_name" ><! -- 声明Activity组件 --> 13 <intent-filter> 14 <action android:name="android.intent.action.MAIN" /> 15 <category android:name="android.intent.category.LAUNCHER" /> 16 </intent-filter><! -- 声明Activity可以接受的Intent --> 17 </activity> 18 </application> 19 </manifest>
· 第1~5行定义了程序的版本、编码方式、用到的架构以及该程序所在的包与版本号。
· 第6~7行定义了程序的SDK版本。
· 第8~10行定义了程序在手机上的显示图标、显示名称以及显示风格。
· 第11~17行定义了一个名为HelloAndroid的Activity以及该Activity能够接受的intent。
(3)上面介绍了HelloWorld项目的系统控制文件AndroidManifest .xml,接下来介绍的是该项目的布局文件main.xml,该文件的主要功能为声明XML文件的版本以及编码方式、定义布局并添加控件TextView,其具体代码如下。
代码位置:见随书光盘中源代码/第1章/Sample_1_1/res/Layout目录下的main.xml。
1 <? xml version="1.0" encoding="utf-8"? > <! -- XML的版本以及编码方式 --> 2 < RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:orientation="vertical" 4 android:layout_width="fill_parent" 5 android:layout_height="fill_parent" 6 > <! --定义了一个布局,布局方式是垂直的--> 7 <TextView 8 android:layout_width="fill_parent" 9 android:layout_height="wrap_content" 10 android:text="@string/hello" 11 /> <! --向布局中添加一个TextView控件--> 12 </ RelativeLayout >
· 第2~6行定义了布局方式为RelativeLayout,且左右和上下的填充方式为fill_parent。
· 第7~11行中向该布局中添加了一个TextView控件,其宽度和高度模式分别为fill_parent、wrap_content,在TextView控件显示的内容为string.xml中的hello的内容。
(4)上面介绍了本项目的布局文件main.xml,接下来将为读者介绍的是项目的主控制类HelloAndroid,本类为继承自Android系统Activity的子类,其主要功能为调用父类的onCreate方法,并切换到main布局,其具体代码如下。
代码位置:见随书光盘中源代码/第1章/Sample_1_1/src/wyf/ytl目录下的HelloAndroid.java。
1 package wyf.ytl; 2 import android.app.Activity; //引入相关类 3 import android.os.Bundle; 4 public class HelloAndroid extends Activity { //定义一个Activity 5 @Override 6 public void onCreate(Bundle savedInstanceState) {//重写的onCreate回调方法 7 super.onCreate(savedInstanceState); //调用基类的onCreate方法 8 setContentView(R.layout.main); //指定当前显示的布局 9 } 10 }
· 第4行是对继承自Activity子类的声明。
· 第6~9行重写了Activity的onCreate回调方法,在onCreate方法中先调用基类的onCreate方法,然后指定用户界面为R.layout.main,对应的文件为res/layout/main.xml。
1.3.5 Android程序的监控与调试
前面几个小节已经对Android应用程序的创建进行了详细讲解,本小节将介绍Eclipse中的工具DDMS(Dalvik Debug Monitor Service)。DDMS是一个非常强大的调试并监控Android应用程序的工具,打开DDMS的常用方法有两种,具体如下。
(1)一般情况下,在Eclipse中安装了ADT插件后,Eclipse窗口的右上角会有DDMS的选项按钮,如图1-36所示。单击此按钮即可切换到DDMS界面,如图1-37所示。
▲图1-36 DDMS按钮
▲图1-37 DDMS界面
(2)若DDMS按钮是隐藏的,读者可以通过Eclipse窗口界面右上角的(Open Perstective)按钮来打开DDMS,如图1-38所示。
▲图1-38 使用Open Perstective按钮打开DDMS
从上面的介绍中可以看出,DDMS的一大功能就是查看应用程序运行时的后台输出信息。实际的应用程序开发中既可以使用传统的System.out.println方法来打印输出调试信息,也可以使用Android特有的android.util.Log类来输出调试信息,这两种方法的具体使用方式如下。
1.System.out.println方法
首先介绍Java开发人员十分熟悉的System.out.println方法,其在Android应用程序中的使用方法与传统Java相同,具体步骤如下。
提示
在这里就不再创建新的Android项目了,直接使用的是上一小节已经创建的Hello Android项目(Sample_1_1)。
(1)首先在Eclipse中打开src文件夹下的wyf.ytl包中的HelloAndroid.java文件。
(2)然后在“setContentView(R.layout.main); ”语句后添加代码“System.out.println("the first"); ”。待修改完成后,再次运行本应用程序。
(3)应用程序运行后打开DDMS,找到LogCat面板,更改为debug界面,如图1-39所示。在LogCat面板下的Log选项卡中可以看到输出的打印语句,如图1-40所示。
▲图1-39 DEBUG界面
▲图1-40 Log选项卡
有时在Log中的输出信息太多,不便于查看。这时可在LogCat中添加一个专门输出System.out信息的面板。单击右边区域的(Create Filter)按钮,系统会弹出Log Filter对话框,在Filter Name输入框中输入过滤器的名称,在by Log Tag中输入用于过滤的标志,如图1-41所示。
▲图1-41 Log Filter对话框
提示
由于输出的语句主要有System.out.println(换行), System.out.print(不换行)两种,所以设置by Log Tag中的内容为System.out以进行过滤。
此时再次运行应用程序观察输出的情况,在LogCat下的System面板中将会只存在System.out的输出信息,效果如图1-42所示。
▲图1-42 只查看System.out输出的信息
2.android.util.Log类
除了上述介绍的Java开发人员所熟知的System.out.println方法外,Android还专门提供了另外一个类android.util.Log来进行调试信息的输出。下面将介绍Log类的使用,具体步骤如下。
(1)在HelloAndroid.java中注释掉前面已经添加的打印输出语句“System.out.println("the first"); ”,然后在后面添加代码“Log.d("Log", "This is message! "); ”。
(2)运行本应用程序,在DDMS中找到LogCat面板,切换到All messages页面,观看打印的内容,如图1-43所示。
▲图1-43 使用Log输出的信息
提示
使用Log类时需要使用“import android.util.Log; ”语句进行导入,使用System.out.println方法或android.util.Log类输出调试信息各有优缺点,读者可以在开发项目时自行体会,选择自己所需要的方式。同时需要注意的是,DDMS还有很多强大的功能,这里只介绍了其最基本的用法,有兴趣的读者可以参考2013年7月人民邮电出版社出版的《Android应用案例开发大全(第二版)》一书的1.4节“DDMS的灵活应用”或参考其他技术资料。