3 AndroidSDK介绍
本章目标:
1. 掌握AndroidSDK组成。
2. 掌握Android常用的Tools。
3. 熟悉Android核心开发包和可选开发包。
3.1AndroidSDK目录结构
AndroidSDK目录结构
3.2AndroidSDK Sample
Lunar Lander月球登陆
是一个在Android模拟器上玩的游戏。这个游戏一个2-D的游戏在Android上工作是多么的简单。控制非常的简单,而且游戏不是非常的复杂。总之,对游戏开发来说是一个良好的开始。
月球登陆执行一个简单控制方案(上,下,左,右)。
NotePad写字板
允许你打开,创建并且编辑小的笔记。写字板不是一个全功能的字符编辑器,所以不要期待是和WindowsMobile中word的竞争对手。但是,作为一个演示工具,使用非常少的代码就能实现这个效果已经非常的棒了。
SkeletonApp框架应用
是一个基本的程序展示了几个不同的应用程序的功能。如字体,按钮,图形和表格。如果你想自己运行SkeletonApp,真的不应当把它排除在外,参考SkeleteApp,它会提供不少关于如何执行特定的条款。
Snake贪食蛇
这是一个小的SNAFU风格游戏,比月球登陆复杂。
3.3AndroidSDK Tools
AndroidSDK包括各种各样的定制工具,可以帮助你在Android平台上开发移动应用程序。其中最重要的工具是Android模拟器和Eclipse的Android开发工具插件,但SDK也包含了各种在模拟器上用于调试,打包和安装的工具
Android模拟器(AndroidEmulator )
AndroidEmulator是一款功能非常齐全的模拟器,电话本、通话等功能都可进行模拟。甚至其内置的浏览器和GoogleMaps都可以联网。用户可以使用键盘输入,单击模拟器按键输入,甚至还可以使用鼠标单击、拖动屏幕进行操作。
1)模拟器和真机的不同之处
-
不支持呼叫和接听实际来电,但可以通过控制台模拟电话呼叫(呼入和呼出)。
-
不支持USB连接。
-
不支持相机/视频捕捉。
-
不支持音频输入(捕捉),但支持输出(重放)。
-
不支持扩展耳机。
-
不能确定连接状态。
-
不能确定电池电量水平和交流充电状态。
-
不能确定SD卡的插入/弹出。
-
不支持蓝牙。
2) 参数大全
Android模拟器emulator.exe文件包含了很多参数,平时在EclipseIDE中,模拟器运行被自动调用的,如果仅仅使用Androidemulator或采用NetBean这样的开放环境又如何设置呢?我们总结了一下模拟器的所有参数及使用方法,具体如下所示。
AndroidEmulator usage: emulator [options] [-qemu args] -wipe-data reset the user data image (copy it from initdata) 清除所有用户数据 -qemu pass arguments to qemu Defaultnetwork latency is 'none' <proxy>can be one of the following: http://<server>:<port> the'http://' prefix can be omitted. If '-http-proxy <proxy>' isnot used, |
3) 快捷键
Android模拟器同样存在很多快捷键,当模拟器运行时,可以使用下面的快捷键来操作Androidemulator,这样比用键盘和鼠标操作更高效:
D:\unsetup\android-sdk-windows-1.1_r1\tools>emulator.exe-help-keys
Whenrunning the emulator, use the following keypresses:
HOME Home button 主界面键 F2,PAGEUP Menu(Soft-Left) button 左软键 Shift-F2,PAGEDOWN Star (Soft-Right) button 右软键 ESCAPE Backbutton 后退键 F3 Call/Dial button 拨号/呼叫键 F4 Hangup/EndCall button 结束通话 F7 Power button 电源键 F5 Search button 搜索键 KEYPAD_PLUS,Ctrl-F5 Volume up button 增大音量键 KEYPAD_MINUS,Ctrl-F6 Volume down button 减小音量键 Ctrl-KEYPAD_5,Ctrl-F3 Camera button 相机键 KEYPAD_7,Ctrl-F11 switch to previous layout 返回键 KEYPAD_9,Ctrl-F12 switch to next layout 后一个界面 F8 toggle cell network on/off 禁止/启用所有网络 F9 toggle code profiling 开始跟踪 Alt-ENTER toggle fullscreenmode 打开/关闭全屏模式 F6 toggle trackball mode 打开/关闭轨迹球 DELETE showtrackball 显示轨迹球 KEYPAD_5 DPad center导航中建/OK键 KEYPAD_4 DPad left左键 KEYPAD_6 DPad right右键 KEYPAD_8 DPad upshang 上键 KEYPAD_2 DPad down下键 KEYPAD_MULTIPLY increase onion alpha KEYPAD_DIVIDE decrease onion alpha |
4)模拟器使用注意事项
使用emulator测试开发程序时,可能会遇到系统关于C盘空间不足之类的提示,这是由于Android模拟器每次运行时会临时生成几个.tmp后缀的临时文件,一段时间后,其可能占用几G的磁盘空间。所以需要手工定期清理一下C:\Documentsand Settings\Andministrator\LocalSettings\Temp\AndroidEmulator文件夹下的内容。
层级观察器 (HierarchyViewer New! )
层级观察器工具允许你调试和优化你的用户界面。它用可视的方法把你的视图(view)的布局层次展现出来,此外还给当前界面提供了一个具有像素栅格(grid)的放大镜观察器,这样你就可以正确地布局了。
Draw9-patch New!
Draw9-patch工具允许你使用所见即所得(WYSIWYG)的编辑器轻松地创建NinePatch图形。它也可以预览经过拉伸的图像,高亮显示内容区域。
EclipseIDE Android 开发工具插件(AndroidDevelopment Tools Plugin forthe Eclipse IDE)
ADT插件大大扩展了Eclipse集成环境功能,使得生成和调试你的Android应用程序既容易又迅速。
Dalvik 调试监视器服务(DalvikDebug Monitor Service (ddms))
这个工具集成了Dalvik(为Android平台定制的虚拟机(VM)),能够让你在模拟器或者设备上管理进程并协助调试。你可以使用它杀死进程,选择某个特定的进程来调试,产生跟踪数据,观察堆(heap)和线程信息,截取模拟器或设备的屏幕画面,还有更多的功能。
Android调试桥(AndroidDebug Bridge (adb) )
Adb工具可以让你在模拟器或设备上安装应用程序的.apk文件,并从命令行访问模拟器或设备。你也可以用它把Android模拟器或设备上的应用程序代码和一个标准的调试器连接在一起。
在SDK的Tools文件夹下包含着Android模拟器操作的重要命令ADB,ADB的全称为AndroidDebug Bridge,就是调试桥的作用,借助这个工具,我们可以管理设备或手机模拟器的状态 ,还可以进行以下的操作:
(1)快速更新设备或手机模拟器中的代码,如应用或Android系统升级;
(2)在设备上运行Shell命令;
(3)管理设备或手机模拟器上的预定端口;
(4)在设备或手机模拟器上复制或粘贴文件。
ADB的工作方式比较特殊采用监听SocketTCP5554等端口的方式让IDE和Qemu通信,默认情况下ADB会daemon相关的网络端口,所以当我们运行Eclipse时ADB进程就会自动运行,在Eclipse中通过DDMS来调试Android程序;也可以通过手动方式调用,以下为一些常用的操作供参考。
1.版本信息 D:\unsetup\android-sdk-windows\tools>adbversion AndroidDebug Bridge version 1.0.20
其中file是需要安装的apk文件的决定路径。
3.卸载已经安装的应用 (1)方法1: adbuninstall [-k] <package>。 其中package表示需要卸载的应用的包的名字,k表示是否保留应用的配置信息和cache数据。
(2)手动删除。
D:\android-sdk-windows\tools>adbshell df /dev:49564K total, 0K used, 49564K available (block size 4096) /sqlite_stmt_journals:4096K total, 0K used, 4096K available (block size 4096) /system:69120K total, 65508K used, 3612K available (block size 4096) /data:76544K total, 63684K used, 12860K available (block size 4096) /cache:69120K total, 1244K used, 67876K available (block size 4096)
5.转发端口 可以使用forward命令进行任意端口的转发—一个模拟器/设备实例的某一特定主机端口向另一不同端口的转发请求。下面演示了如何建立从主机端口7100到模拟器/设备端口8100的转发。 adbforward tcp:7100 tcp:8100 同样地,可以使用ADB来建立命名为抽象的UNIX域套接口,上述过程如下所示: adbforward tcp:7100 local:logd
可以使用adbpull ,push 命令将文件复制到一个模拟器/设备实例的数据文件或是从数据文件中复制。install命令只将一个apk文件复制到一个特定的位置,与其不同的是,pull和push命令可让用户复制任意的目录和文件到一个模拟器/设备实例的任何位置。 从模拟器或者设备中复制文件或目录,使用如下命: adbpull <remote> <local> 将文件或目录复制到模拟器或者设备,使用如下命令: adbpush <local> <remote> 在这些命令中,<local>和<remote>分别指通向自己的发展机(本地)和模拟器/设备实例(远程)上的目标文件/目录的路径。 下面是一个例子:: adbpush foo.txt /sdcard/foo.txt
D:\android-sdk-windows\tools>adbdevices Listof devices attached HT843GZ03305 device
D:\android-sdk-windows\tools>adbbugreport ======================================================== ==dumpstate ======================================================== ------SYSTEM LOG ------ 04-1216:59:46.521 D/ShowTrack(23968): MyOverlay::darw..mDefCaption=I'mHere. 04-1216:59:46.531 D/ShowTrack(23968): MyOverlay::darw..mDefCaption=I'mHere. 04-1216:59:46.531 D/ShowTrack(23968): MyOverlay::darw..mDefCaption=I'mHere. 04-1216:59:46.541 D/ShowTrack(23968): MyOverlay::darw..mDefCaption=I'mHere. 04-1216:59:47.391 I/ActivityManager( 55): Starting activity:Intent { comp={com.iceskysl.iTracks/com.iceskysl.iTracks.iTracks}} 04-1216:59:47.641 D/iTracks (23968): renderListView. 04-1216:59:47.671 D/ShowTrack(23968): MyOverlay::darw..mDefCaption=I'mHere. 04-1216:59:47.681 D/ShowTrack(23968): MyOverlay::darw..mDefCaption=I'mHere.
D:\android-sdk-windows\tools>adb shell #logcat -b radio logcat-b radio D/HTC_RIL( 30): (t=1239390296)<< 0 D/HTC_RIL( 30): (t=1239390296)>> AT@HTCPDPFD=0 D/HTC_RIL( 30): (t=1239390296)<< 0 D/HTC_RIL( 30): (t=1239390296)>> AT+CSQ D/HTC_RIL( 30): (t=1239390296)<< +CSQ: 29,99 D/HTC_RIL( 30): 0 D/HTC_RIL( 30): (t=1239390296)>> AT+CREG? D/HTC_RIL( 30): (t=1239390296)<< +CREG: 2,3 D/HTC_RIL( 30): 0
D:\android-sdk-windows\tools>adbget-serialno HT843GZ03305
11.通过远程Shell端运行AQLite3连接数据库 通过ADB远程Shell端,可以通过Android的软AQLite3 命令程序来管理数据库。SQLite3 工具包含了许多使用命令,例如,.dump显示表的内容,.schema可以显示出已经存在的表空间的SQLCREATE结果集。SQLite3还允许远程执行sql命令。
通过SQLite3 , 按照前面的方法登录模拟器的远程Shell端,然后启动工具就可以使用SQLite3 命令。当SQLite3启动以后,还可以指定想查看的数据库的完整路径。模拟器/设备实例会在文件夹中保存SQLite3数据库/data/data/<package_name>/databases /。
示例如下: $adb shell #sqlite3/data/data/com.example.google.rss.rssexample/databases/rssitems.db SQLiteversion 3.3.12 Enter".help" for instructions ....enter commands, then quit...
sqlite>.exit 当启动SQLite3的时候,就可以通过Shell端发送SQLite3,命令了。用exit或<Ctrl+D>组合键退出ADB远程Shell端。
12.ADB命令列表 下列表格列出了adb支持的所有命令,并对它们的意义和使用方法做了说明.
|
AndroidAsset PackagingTool (aapt)
Aapt工具可以让你创建包含Android应用程序二进制文件和资源文件的.apk文件。
Android接口描述语言(AndroidInterface DescriptionLanguage (aidl))
可以让你生成进程间的接口的代码,诸如service可能使用的接口。
sqlite3
这个工具能够让你方便地访问SQLite数据文件。这些数据文件是由Android应用程序创建并使用的。
Traceview
这个工具可以将你的Android应用程序产生的跟踪日志(tracelog)转换为图形化的分析视图。
mksdcard
帮助你创建磁盘映像(diskimage),你可以在模拟器环境下使用磁盘映像来模拟外部存储卡(例如SD卡)。
dx
Dxgongju 将.class字节码(bytecode)转换为Android字节码(保存在.dex文件中)。
UI/ApplicationExerciserMonkey
Monkey是在模拟器上或设备上运行的一个小程序,它能够产生为随机的用户事件流,例如点击(click),触摸(touch),挥手(gestures),还有一系列的系统级事件。你可以使用Monkey来给你正在开发的程序做随机的,但可重复的压力测试。
activitycreator
一个可以产生Antbuild 文件的脚本,你可以使用它编译你的android应用程序。如果你正在Eclipse上开发,并使用ADT插件,你不必使用这个脚本。
logcat
LogCat是Android中一个命令行工具,可以用于得到程序的log信息。
利用LogCat查看日志信息
1.使用方法 LogCat使用方法如下所示: LogCat[options] [filterspecs] LogCat的选项包括: -s 设置过滤器,如指定'*:s'. -f<filename> 输出到文件,默认情况是标准输出。 -r[<kbytes>] Rotate log every kbytes. (16 ifunspecified). Requires –f。 -n<count> Sets max number of rotated logsto <count>, default 4。 -v<format> 设置log的打印格式, <format> 是下面的一种: briefprocess tag thread raw time threadtime long。
-c 清除所有log并退出。 -d 得到所有log并退出(不阻塞)。 -g 得到环形缓冲区的大小并退出。 -b<buffer> 请求不同的环形缓冲区('main'(默认),'radio', 'events')。 -B 输出log到二进制中。
过滤器的格式是一个这样的串: <tag>[:priority]
其中<tag>表示log的component,tag(或者使用*表示所有),priority如下所示: V Verbose D Debug I Info W Warn E Error F Fatal S Silent
事实上LogCat的功能是由Android的类android.util.Log决定的,在程序中log的使用方法如下所示: Log.v()--------------------VERBOSE Log.d()--------------------DEBUG Log.i()--------------------INFO Log.w()--------------------WARN Log.e()--------------------ERROR 以上log的级别依次升高,Debug信息应当只存在于开发中,INFO、WARN、ERROR这3种log将出现在发布版本中。
对于Java类,可以声明一个字符串常量TAG,LogCat可以根据它来区分不同的log,例如,在计算器(Calculator)的类中,定义如下所示:
publicclass Calculator extends Activity { /*...... */ privatestatic final String LOG_TAG = "Calculator"; privatestatic final boolean DEBUG = false; privatestatic final boolean LOG_ENABLED = DEBUG ? Config.LOGD :Config.LOGV; /*...... */ 由此,所有在Calculator中使用的log,均以“Calculator”为开头。 |
3.4AndroidSDK核心包
AndroidSDK提供了编写应用程序的一些基本包。这些包通过分层方式组织,以下按照从底层到高层的顺序列出:
android.util:包含有许多底层的工具类,例如专用容器类,XML工具等等。
android.os:提供基本的操作系统服务、消息传递和进程间通讯。
android.graphics:核心图形绘制包。
android.text、android.text.method、android.text.style、android.text.util:提供丰富的文本处理工具、富文本支持以及输入法等等。
android.database:包含数据库相关的底层API。
android.content:提供大量的访问存储在设备上的数据的服务:安装在设备上的应用及相关资源,用于持续的动态数据的内容提供器(contentprovider)。
android.view:核心用户界面框架。
android.widget:提供构建view包的标准用户界面元素(列表、按钮、布局管理器等等)。
android.app:提供高层应用模型,通过活动实现。
3.5AndroidSDK可选API
Android适用于各种各样的手机,从最低端直到最高端的智能手机。核心的AndroidAPI在每部手机上都可使用,但任然有一些API接口有一些特别的适用范围,这就是所谓的“可选API”。
这些API之所以是“可选的”,主要是因为一个手持设备并不一定要完全支持这类API,甚至于完全不支持。例如,一个手持设备可能没有GPS或Wi-FI的硬件。在这个条件下,这类功能的API任然存在,但不会以相同的方式来工作。例如LocationAPI任然在没有GPS的设备上存在,但极有可能完全没有安装功能提供者,意味着这类API就不能有效地使用。
Wi-Fi API
Wi-FiAPI为应用程序提供了一种与那些带有Wi-FI网络接口的底层无线堆栈相互交流的手段。几乎所有的请求设备信息都是可利用的,包括网络的连接速度、IP地址、当前状态等等,还有一些其他可用网络的信息。一些可用的交互操作包括扫描、添加、保存、结束和发起连接。
Wi-Fi API在android.net.wifi包中。
定位服务(Location-BasedServices)
定位服务允许软件获取手机当前的位置信息。这包括从全球定位系统卫星上获取地理位置,但相关信息不限于此。例如,未来其他定位系统可能会运营,届时,对其相应的API接口也会加入到系统中。
定位服务的API在android.location包中。
多媒体API(MediaAPIs)
多媒体API主要用于播放媒体文件。这同时包括对音频(如播放MP3或其他音乐文件以及游戏声音效果等)和视频(如播放从网上下载的视频)的支持,并支持"播放URI地址"(Note:URI即是统一资源识别地址)模式-在网络上直接播放的流媒体。技术上来说,多媒体API并不是“可选的”,因为它总是要用到。但是不同的硬件环境上面可能有不同的编解码的硬件机制,因而它又是“可选的”。
多媒体API在android.media包中。
基于OpenGL的3D图形(3DGraphics with OpenGL)
Android的主要用户接口框架是一个典型的面向控件的类继承系统。但不要让表面的情况迷惑了你,因为在它下面是一种非常快的2D和3D组合的图形引擎,并且支持硬件加速。用来访问平台3D功能的API接口是OpenGLESAPI。和多媒体API一样,OpenGL也不是严格意义上的“可选”,因为这些API会总是存在并且实现那些固定的功能。但是,一些设备可能有硬件加速环节,使用它的时候就会影响你的应用程序的表现。
OpenGL的API在android.opengl 中可以看到。
3.6小结
本章主要介绍了AndroidSDK的相关内容,包括SDK结构,文档内容,通过本章学习需掌握AndroidSDK中各种工具的使用以及核心开发包的作用.
3.7练习
1. 列出AndroidSDK中的各种Tools,并描述其作用和用途?
2. 列出AndroidSDK中核心包有哪些,及其作用?