第2章开发工具介绍及项目结构2.1Android开发工具介绍2.1.1adbadb(AndroidDebugBridge,调试桥)是一个debug工具,可将其他工具接入模拟器和设备,通过adb我们可以在Eclipse中方便通过DDMS来调试Android程序。除了可以让其他工具(ADT插件)功能生效以外,还可以使用命令行上传或下载文件、安装或卸载程序包、通过进入设备或模拟器的shell环境访问许多其他功能。adb是一个客户端/服务器端程序,其中客户端是用来操作的电脑,服务器端是Android设备。adb安装在AndroidSDK的platform-tools目录下。(1)查看设备命令:adbdevices这个命令是查看当前连接的设备,连接到计算机的Android设备或者模拟器将会列出显示。(2)安装软件命令:adbinstallapk文件路径这个命令将指定的apk文件安装到设备上。(3)卸载软件命令1:adbuninstall软件名命令2:adbuninstall-k软件名如果加-k参数,为卸载软件但是保留配置和缓存文件。(4)登录设备shell命令1:adbshell命令2:adbshellcommand命令这个命令将登录设备的shell。后面加command命令将是直接运行设备命令,相当于执行远程命令。(5)从计算机上发送文件到目标机命令:adbpush本地路径远程路径用push命令可以把计算机上的文件或者文件夹复制到Android目标机中。(6)从目标机上下载文件到计算机命令:adbpull远程路径本地路径用pull命令可以把Android目标机上的文件或者文件夹复制到计算机。(7)显示帮助信息命令:adbhelp(8)关闭adbserver命令:adbkill-server(9)启动adbserver命令:adbstart-server2.1.2AVDAVD(AndroidVirtualDevice,安卓虚拟设备),一般称其为Android模拟器,可以用来模拟一个Android手机或平板电脑,由于可以虚拟出来各个API版本、各种屏幕分辨率的Android设备,所以AVD在Android开发中很常用。1.AVD的创建2.启动AVD模拟器2.DDMS工作原理DDMS将搭建起IDE与测试终端(Emulator或connecteddevice)的链接。DDMS可以实时监测到测试终端的连接情况,当有新的测试终端连接后,DDMS将捕捉到终端的ID,并通过adb建立调试器,从而实现发送指令到测试终端的目的。DDMS监听第一个终端应用程序进程的端口为8600,应用程序进程将分配8601,如果有更多终端或者更多应用程序进程将按照这个顺序依次类推。DDMS通过8700端口接收所有终端的指令。2.1.3DDMSDDMS(DalvikDebugMonitorService)是Android开发环境中的Dalvik虚拟机调试监控服务。DDMS为我们提供了测试设备截屏,针对特定的进程查看正在运行的线程及堆信息、Logcat、广播状态信息、模拟电话呼叫、接收SMS、虚拟地理坐标等功能。3.DDMS的功能(1)Devices面板在这个面板可以看到所有与DDMS连接的终端的信息,以及每个终端正在运行的应用程序进程,每个进程的右边相对应的是与调试器链接的端口。因为Android是基于Linux内核开发的平台,同时也保留了Linux中特有的进程ID,它介于进程名和端口号之间。(2)EmulatorContro面板通过这个面板的一些功能可以非常容易的使测试终端模拟真实手机所具备的一些交互功能。比如接听电话、根据选项模拟各种不同网络情况、模拟接受SMS消息和发送虚拟地址坐标用于测试GPS功能等。(3)其他功能Devices面板右边的窗口中还有Threads、Heap、AllocationTracke、FileExplorer、NetworkStatistcs和SystemInformation选项卡,可以显示线程统计信息、栈信息、内存分配跟踪情况、Android设备的文件系统、网络使用统计信息和Android设备的系统信息。(4)LogCat面板在DDMS界面中的下面是LogCat面板,可以输出AVD或Android设备的一些运行和调试信息。LogCat是Android日志系统的名称,是一个日志记录工具,可以通过Eclipse、adb读取LogCat数据,它可以提供系统中相关事件的诊断信息。开发者可以由此将应用程序的调试和诊断信息发送到LogCat。这个工具很常用,可以理解为C或Java程序中的控制台输出,常被用来在手写代码的调试方式中,输出调试信息,使用时在代码中先使用import关键字导入android.util.Log包,然后在代码中使用Log.d(String,String)、Log.i(String,String)等方法输出调试信息。2.2创建第一个Android项目2.2.1如何创建Android项目1.建立项目2.编写代码3.运行Android应用程序2.2.2Android项目结构(1)src/:Java源代码的存放位置,其和普通Java工程中的src目录是一样的。在上面项目工程中的MainActivity.java就在这个文件夹下。(2)gen/:存放系统自动生成的配置文件,开发者不要更改。其中的R.java是资源索引文件,将XML文件中的资源映射为一个资源ID,供Java代码使用。Android开发工具会自动根据你放入res目录的xml界面文件、图标与常量,同步更新修改R.java文件。如果不能生成,则说明XML文件中含有错误。(3)assets/:也可以存放资源,但不会生成资源ID,需要通过AssetManager以二进制流的形式访问。(4)bin/:存放应用程序译后生成的可执行文件(.apk)。应用程序中用到的/res/drawable和/res/raw下的资源会被打包进APK文件。(5)libs/:存放应用程序所使用的JAR包,可以把使用到的第三方JAR包放在这。(6)res/:存放应用程序用到的所有资源:界面布局、主题样式、字符串、图片、多媒体资源等。但它和assets目录最大的区别在于,res目录下的资源文件会在gen目录下的R.java文件中产生以资源文件名命名的静态属性。res/目录下还包括一系列的文件目录,有如下含义:其中drawable-hdpi、drawable-ldpi、drawable-mdpi目录下分别用于存放高、低、中分辨率的图片或selector(背景选择器)等,主要是Android考虑到为了让图片资源适应各种不同屏幕的分辨率,应用程序会自动根据手机分辨率选择对应的图片资源;values用于存放字符串资源、颜色资源、尺寸资源的xml文件。layout/:存放界面布局的xml文件,Java代码中使用R.layout.xxx获得。上面项目工程中的布局文件activity_main.xml就在这个文件夹下。menu/:存放选项菜单的xml配置文件。raw/:需要手动建立,存放多媒体资源,Java代码中使用R.raw.xxx获得。values/:存放字符串、颜色资源、尺寸资源的xml文件。values-v11:定义的主题样式供API11及以上(3.x)的设备使用。values-v14:定义的主题样式供API14及以上(4.x)的设备使用。(7)AndroidManifest.xml:应用级的配置文件,配置一些与应用程序有关的重要信息,包括主包名、权限、程序组件等等。这个文件列出了应用程序所提供的功能,在这个文件中,你可以指定应用程序使用到的服务(如电话服务、互联网服务、短信服务、GPS服务等等)。另外当你新添加一个Activity的时候,也需要在这个文件中进行相应配置,只有配置好后,才能调用此Activity。(8)project.properties文件:项目环境信息,一般不需要修改此文件。Android中的单位(尺寸、大小)屏幕尺寸真正的物理尺寸(屏幕对角线的长度,单位是英寸,如2.8寸,3.5寸)。为了简化起见,Android把支持的所有物理尺寸分成了4组:small,normal,large,extralarge。屏幕长宽比屏幕的物理长度与物理宽度的比例。程序可以为制定长宽比的屏幕提供制定的素材,只需要用系统提供的资源分类符long和notlong。屏幕密度Density一定物理范围的像素的个数,单位通常是dpi(dotsperinch),即每英寸的点数。例如一个低分辨率屏幕相对于高分辨率屏幕在一定的物理区域内包含的像素点要少。为了简化起见,Android将所有的屏幕密度分成四组:low,medium,high和extrahigh。方向Orientation从用户视角来看的屏幕的方向,Portrait纵向和Landscape横向。分辨率Resolution屏幕上所有的像素点数目,一般用480*800的形式来表示。Android支持下列所有单位。px(像素):屏幕上的点。in(英寸):长度单位。mm(毫米):长度单位。pt(磅):1/72英寸。dp:一种基于屏幕密度的抽象单位。Android平台中虚拟的像素单位,定义成一种密度无关的形式,像素px和dp的转换公式为px=dp*(dpi/160)。在界面开发中应使用dp作为像素单位,从而保证在不同的屏幕密度上控件所占的实际px因密度而自动调整。在每英寸160点的显示器上,1dp=1px。dip:与dp相同,多用于android/iphone示例中。sp(与刻度无关的像素):与dp类似,但是可以根据用户的字体大小首选项进行缩放。2.2.3案例程序分析Android_Demo01项目中主要包括1个布局文件(activity_main.xml),用于设计用户界面;1个Activity组件(MainActivity类),用于实现用户界面交互功能及配置文件AndroidManifest.xml。1.Activity组件MainActivity类packagecom.example.android_demo01;importandroid.app.Activity;importandroid.os.Bundle;importandroid.view.Menu;importandroid.view.MenuItem;publicclassMainActivityextendsActivity{@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}@OverridepublicbooleanonCreateOptionsMenu(Menumenu){getMenuInflater().inflate(R.menu.main,menu);returntrue;}@OverridepublicbooleanonOptionsItemSelected(MenuItemitem){intid=item.getItemId();if(id==R.id.action_settings){returntrue;}returnsuper.onOptionsItemSelected(item);}}2.布局文件activity_main.xmlRelativeLayoutxmlns:android=:tools=