android相关技术
1031601344 张俊
常见术语
1.apk扩展名
apk是Android包的扩展名,一个Android包包含了与某个Android应用程序相关的所有文件,apk文件将AndroidManifest.xml文件、应用程序代码(dex文件)、资源文件和其他文件组成一个压缩包,一个项目只能打包压缩成一个apk文件。
2..dex扩展名
Android的程序被编译成.dex(Dalvik Executable)格式文件, 然后再进行打包生成可被直接安装的apk文件。
3.应用程序(APP)
一个或多个Activity、服务、监听和Intent接收器的集合,一个应用程序有一个文件清单,并且打包成一个apk文件。
3.Action
对Intent发送器意图的描述,一个活动是一个指派给Intent的字符串值。活动字符串可以由Android定义,也可以由第三方开发者定义。例如,在网页URL中使用的android.intent.action.VIEW或者在用户应用程序中使用的 com.example.rumbler.SHAKE_PHONE来使电话震动。
4.ADB( Android Debug Bridge )
SDK自带的一个基于命令行的调试程序。它提供了设备浏览工具、设备上的拷贝工具和为调试转寄端口的功能。更多信息请参考附录三(Android的ADB工具使用)。
5.内容源
内容源是建立在类ContentProvider之上的用于处理指定格式的内容请求字符串,并返回指定格式的数据的类。关于内容源的使用信息请参考本书第7章内容。
6.Dalvik Android
虚拟机的名字,Dalvik虚拟机是一个只能解释执行dex文件的虚拟机,dex文件针对存储性能和内存管理进行了优化。 Dalvik虚拟机是基于寄存器的虚拟机,并且能够运行经过Dalvik自带的“dx”工具转换过的Java类。虚拟机运行在兼容Posix的操作系统上,依赖于底层的功能(如线程和低级内存管理)。Dalvik的核心类库有意做得与Java标准版非常类似,但它明显更适合小型移动设备。
7.DDMS
调试监视服务(Dalvik Debug Monitor ServiceDalvik)是SDK自带的一个可视的调试工具。它提供了屏幕捕捉、日志存储和进程检测能力。
8.Drawable
编译过的可视化资源,可以用来做背景、标题或屏幕的其他部分。它被编译在android.graphics.drawable子类中。
9.意图(Intent)
意图是一个Intent类,它包含很多描述调用者意图做什么的字段。调用者发送意图到Android意图处理器,意图处理器会遍历所有应用程序的意图过滤器来查找与该意图最匹配的Activity。意图字段包括渴望的动作、种类、数据、数据的MIME类型、一个处理类和其他约束。
10.意图过滤器(intent-filter)
Activity和意图接收器(Receiver)在它们的文件清单中包含一个或多个过滤器,用来描述什么类型的意图或者信息是它们能处理或想接收的。一个意图过滤器列出了一系列要求,例如,意图或信息必须满足的数据类型、被请求的动作和URI的格式。对于Activity,Android搜索意图和Activity过滤器匹配程度最高的Activity;对于消息,Android会将消息转发给所有匹配意图过滤器的接收器。
11.Intent接收器(Receiver)
一个监听是由Context.broadcastIntent()发出的信息广播的类,详细信息请参考本书第9章。
12.布局资源
一个描述Activity屏幕布局的XML文件。
13.文件清单
应用程序中的一个XML文件,用于描述包中多个Activity、Intent过滤器、服务和其他内容。可以打开AndroidManifest.xml查看其包含的内容。
14.Nine-patch / 9-patch / Ninepatch image
一种可变尺寸的位图资源,可用作设备上的背景或其他图片。
15.资源
用户提供的XML、位图或其他文件,构建程序时会导入进来,稍后会被代码加载,Android支持多种类型的资源,请参考Resources中的详细描述,程序定义的资源文件应当保存在res/ 子目录下。
16.服务(Service)
运行在后台执行多种固定任务的类,如播放音乐或检测网络活动。
17.主题(Theme)
一系列定义多种默认显示设置的参数(文字大小、背景颜色等)。Android在R.style中提供了几个标准的主题(以"Theme_"开头)。
18.URIs
Android使用URI字符串请求数据(如通信录列表)和动作(如在浏览器中打开网页)。URI字符串可以具有不同的格式。所有请求数据的URI必须以“content://”开头。有效的动作URI字符串会被设备上的适当的程序处理,例如,以“ http://”开头的URI字符串会被浏览器处理。
Android模拟器
Android Emulator是一款功能非常齐全的模拟器,电话本、通话等功能都可进行模拟。甚至其内置的浏览器和Google Maps都可以联网。用户可以使用键盘输入,单击模拟器按键输入,甚至还可以使用鼠标单击、拖动屏幕进行操作。
1.模拟器和真机的不同之处
* 不支持呼叫和接听实际来电,但可以通过控制台模拟电话呼叫(呼入和呼出)。
* 不支持USB连接。
* 不支持相机/视频捕捉。
* 不支持音频输入(捕捉),但支持输出(重放)。
* 不支持扩展耳机。
* 不能确定连接状态。
* 不能确定电池电量水平和交流充电状态。
* 不能确定SD卡的插入/弹出。
* 不支持蓝牙。
2.参数大全
Android模拟器emulator.exe文件包含了很多参数,平时在Eclipse IDE中,模拟器运行被自动调用的,如果仅仅使用Android emulator或采用NetBean这样的开放环境又如何设置呢? 我们总结了一下模拟器的所有参数及使用方法,具体如下所示。
Android Emulator usage: emulator [options] [-qemu args]
options:
-system <dir> read system images from <dir>
-datadir <dir> write user data into <dir>
-kernel <file> emulated kernel 指定内核文件
-ramdisk <file> ramdisk image (default <system>/ramdisk.img) 创建内存磁盘
-image <file> system image (default <system>/system.img)
-initdata <file> initial user image (default <system>/userdata.img)
-data <file> working user image (default <datadir>/userdata-qemu.img)
-wipe-data reset the user data image (copy it from initdata) 清除所有用户数据
-nocache disable the cache partition 禁止分区缓存
-sdcard <file> SD card image (default <system>/sdcard.img) 使用SD卡映像
-skindir <dir> search skins in <dir> (default <system>/skins) 搜索外观皮肤路径
-skin <skin> select a given skin 选择Android模拟器皮肤ID
-noskin don't use any emulator skin 不使用任何模拟器外观,这样有助于提高模拟器速度,内存小的用户可以尝试
-netspeed <speed> maximum network download/upload speeds 设置网络速度如GPRS、EDGE、3G更多详细的内容下面有介绍
-netdelay <delay> network latency emulation 网络延时设置
-netfast disable network shaping (full speed, no latency) 网络全速工作
-trace <name> enable code profiling (press F9 to start) 跟踪调试
-debug-kernel send kernel output to the console 内核调试
-console enable console shell on current terminal 启用控制台Shell在当前中端
-nojni disable JNI checks in the Dalvik runtime 禁用JNI检查
-logcat <tags> enable logcat output with given tags 设置log输出标签
-noaudio disable android audio support 禁用音频支持
-useaudio enable android audio support (default) 启用音频支持
-mic <file> WAV file for audio input 使用wav文件模拟mic麦克输入
-flash-keys flash key presses on the device skin
-raw-keys disable Unicode keyboard reverse-mapping
-radio <device> redirect radio modem interface to character device
-oldradio enable old VM-based simulated radio
-onion <image> use overlay image over screen
-onion-alpha <%age> specify onion skin translucency (default 50)
-http-proxy <proxy> make TCP connections through a HTTP/HTTPS proxy 代理服务器设置
-verbose enable verbose output
-verbose-keys enable verbose key presses
-verbose-proxy enable proxy debug messages
-version display emulater version number
-qemu pass arguments to qemu
-qemu -h display qemu help
-help print this help
Default network latency is 'none'
<proxy> can be one of the following:
http://<server>:<port>
http://<username>:<password>@<server>:<port>
the 'http://' prefix can be omitted. If '-http-proxy <proxy>' is not used,
the 'http_proxy' environment variable is looked up and any value matching
the <proxy> format will be used automatically
3.快捷键
Android模拟器同样存在很多快捷键,当模拟器运行时,可以使用下面的快捷键来操作Android emulator,这样比用键盘和鼠标操作更高效,不妨试一下:
D:\unsetup\android-sdk-windows-1.1_r1\tools>emulator.exe -help-keys
When running the emulator, use the following keypresses:
HOME Home button 主界面键
F2, PAGEUP Menu (Soft-Left) button 左软键
Shift-F2, PAGEDOWN Star (Soft-Right) button 右软键
ESCAPE Back button 后退键
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 fullscreen mode 打开/关闭全屏模式
F6 toggle trackball mode 打开/关闭轨迹球
DELETE show trackball 显示轨迹球
KEYPAD_5 DPad center 导航中建/OK键
KEYPAD_4 DPad left 左键
KEYPAD_6 DPad right 右键
KEYPAD_8 DPad up shang 上键
KEYPAD_2 DPad down 下键
KEYPAD_MULTIPLY increase onion alpha
KEYPAD_DIVIDE decrease onion alpha
4.模拟器使用注意事项
平时使用emulator测试开发程序时,可能会遇到系统关于C盘空间不足之类的提示,这是由于Android模拟器每次运行时会临时生成几个.tmp后缀的临时文件,一段时间后,其可能占用几G的磁盘空间。所以需要手工定期清理一下C:\Documents and Settings\sh\Local Settings\Temp\AndroidEmulator文件夹下的内容。
Android的ADB工具使用
在SDK的Tools文件夹下包含着Android模拟器操作的重要命令ADB,ADB的全称为Android Debug Bridge,就是调试桥的作用,借助这个工具,我们可以管理设备或手机模拟器的状态 ,还可以进行以下的操作:
(1)快速更新设备或手机模拟器中的代码,如应用或Android系统升级;
(2)在设备上运行Shell命令;
(3)管理设备或手机模拟器上的预定端口;
(4)在设备或手机模拟器上复制或粘贴文件。
ADB的工作方式比较特殊采用监听Socket TCP 5554等端口的方式让IDE和Qemu通信,默认情况下ADB会daemon相关的网络端口,所以当我们运行Eclipse时ADB进程就会自动运行,在Eclipse中通过DDMS来调试Android程序;也可以通过手动方式调用,以下为一些常用的操作供参考。
1.版本信息
D:\unsetup\android-sdk-windows-1.0_r1\tools>adb version
Android Debug Bridge version 1.0.20
2.安装应用到模拟器
adb install [-l] [-r] <file>。
其中file是需要安装的apk文件的决定路径。
3.卸载已经安装的应用
(1)方法1:
adb uninstall [-k] <package>。
其中package表示需要卸载的应用的包的名字,k表示是否保留应用的配置信息和cache数据。
(2)手动删除。
adb shell
cd /data/app
rm app.apk
4.进入设备或模拟器的Shell
adb shell
通过上面的命令,就可以进入设备或模拟器的Shell环境中,在这个Linux Shell中,可以执行各种Linux 的命令,另外如果只想执行一条Shell命令,可以采用以下的方式:
adb shell [command]
如:
D:\unsetup\android-sdk-windows-1.0_r1\tools>adb shell 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的转发。
adb forward tcp:7100 tcp:8100
同样地,可以使用ADB来建立命名为抽象的UNIX域套接口,上述过程如下所示:
adb forward tcp:7100 local:logd
6.复制文件
可以使用adb pull ,push 命令将文件复制到一个模拟器/设备实例的数据文件或是从数据文件中复制。install 命令只将一个apk文件复制到一个特定的位置,与其不同的是,pull 和 push 命令可让用户复制任意的目录和文件到一个模拟器/设备实例的任何位置。
从模拟器或者设备中复制文件或目录,使用如下命:
adb pull <remote> <local>
将文件或目录复制到模拟器或者设备,使用如下命令:
adb push <local> <remote>
在这些命令中, <local> 和<remote> 分别指通向自己的发展机(本地)和模拟器/设备实例(远程)上的目标文件/目录的路径。
下面是一个例子::
adb push foo.txt /sdcard/foo.txt
7.搜索模拟器/设备的实例
取得当前运行的模拟器/设备的实例的列表及每个实例的状态,如:
D:\unsetup\android-sdk-windows-1.0_r1\tools>adb devices
List of devices attached
HT843GZ03305 device
8.查看bug报告
D:\unsetup\android-sdk-windows-1.0_r1\tools>adb bugreport
========================================================
== dumpstate
========================================================
------ SYSTEM LOG ------
04-12 16:59:46.521 D/ShowTrack(23968): MyOverlay::darw..mDefCaption=I'm Here.
04-12 16:59:46.531 D/ShowTrack(23968): MyOverlay::darw..mDefCaption=I'm Here.
04-12 16:59:46.531 D/ShowTrack(23968): MyOverlay::darw..mDefCaption=I'm Here.
04-12 16:59:46.541 D/ShowTrack(23968): MyOverlay::darw..mDefCaption=I'm Here.
04-12 16:59:47.391 I/ActivityManager( 55): Starting activity: Intent { comp={com.iceskysl.iTracks/com.iceskysl.iTracks.iTracks} }
04-12 16:59:47.641 D/iTracks (23968): renderListView.
04-12 16:59:47.671 D/ShowTrack(23968): MyOverlay::darw..mDefCaption=I'm Here.
04-12 16:59:47.681 D/ShowTrack(23968): MyOverlay::darw..mDefCaption=I'm Here.
9.记录无线通讯日志
一般来说,无线通讯的日志非常多,在运行时没必要去记录,但我们还是可以通过命令,设置记录:
D:\unsetup\android-sdk-windows-1.0_r1\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
10.获取设备的ID和序列号
adb get-product
D:\unsetup\android-sdk-windows-1.0_r1\tools>adb get-serialno
HT843GZ03305
11.通过远程Shell端运行AQLite3连接数据库
通过ADB远程Shell端,可以通过Android的软AQLite 3 命令程序来管理数据库。SQLite 3 工具包含了许多使用命令,例如,.dump 显示表的内容,.schema 可以显示出已经存在的表空间的SQL CREATE结果集。SQLite3还允许远程执行sql命令。
通过SQLite 3 , 按照前面的方法登录模拟器的远程Shell端,然后启动工具就可以使用SQLite 3 命令。当SQLite 3 启动以后,还可以指定想查看的数据库的完整路径。模拟器/设备实例会在文件夹中保存SQLite3数据库/data/data/<package_name> /databases /。
示例如下:
$ adb shell
# sqlite3 /data/data/com.example.google.rss.rssexample/databases/rssitems.db
SQLite version 3.3.12
Enter ".help" for instructions
.... enter commands, then quit...
sqlite> .exit
当启动SQLite 3的时候,就可以通过Shell端发送SQLite 3,命令了。用exit 或<Ctrl+D>组合键退出ADB远程Shell端。
12.ADB命令列表
下列表格列出了adb支持的所有命令,并对它们的意义和使用方法做了说明.
Category |
Command |
Description |
Comments |
Options |
-d |
仅仅通过USB接口来管理abd |
如果不只是用USB接口来管理则返回错误 |
-e |
仅仅通过模拟器实例来管理adb |
如果不是仅仅通过模拟器实例管理则返回错误 |
|
-s <serialNumber> |
通过模拟器/设备的允许命令号码来发送命令来管理adb (如 “emulator-5556″) |
如果没有指定号码,则会报错 |
|
General |
devices |
查看所有连接模拟器/设备的设施的清单 |
查看 Querying for Emulator/Device Instances 获取更多相关信息 |
help |
查看adb所支持的所有命令 |
|
|
version |
查看adb的版本序列号 |
|
|
Debug |
logcat [<option>] [<filter-specs>] |
将日志数据输出到屏幕上 |
|
bugreport |
查看bug的报告,如dumpsys ,dumpstate ,和logcat 信息 |
|
|
jdwp |
查看指定设施的可用的JDWP信息 |
可以用 forward jdwp:<pid>端口映射信息来连接指定的JDWP进程,例如: |
|
Data |
install <path-to-apk> |
安装Android为(可以模拟器/设施的数据文件.apk指定完整的路径) |
|
pull <remote> <local> |
将指定的文件从模拟器/设施拷贝到计算机上 |
|
|
push <local> <remote> |
将指定的文件从计算机上拷贝到模拟器/设备中 |
|
|
Ports and Networking |
forward <local> <remote> |
用本地指定的端口通过Socket方法远程连接模拟器/设施 |
端口需要描述下列信息:
|
ppp <tty> [parm]… |
通过USB运行ppp:
需要提醒的不能自动启动PDP连接 |
|
|
Scripting |
get-serialno |
查看adb实例的序列号 |
查看 Querying for Emulator/Device Instances 可以获得更多信息 |
get-state |
查看模拟器/设施的当前状态 |
||
wait-for-device |
如果设备不联机就不让执行,也就是实例状态是 device 时 |
可以提前把命令转载在adb的命令器中,在命令器中的命令在模拟器/设备连接之前是不会执行其他命令的,示例如下: adb wait-for-device shell getprop 需要提醒的是,这些命令在所有的系统启动起来之前是不会启动adb的,所以在所有的系统启动起来之前也不能执行其他的命令,例如,运用install 的时候就需要Android包,这些包需要系统完全启动,例如: adb wait-for-device install <app>.apk 上面的命令只有连接上了模拟器/设备连接上了adb服务才会被执行,而在Android系统完全启动前执行就会有错误发生 |
|
Server |
start-server |
选择服务是否启动adb服务进程 |
|
kill-server |
终止adb服务进程 |
|
|
Shell |
shell |
通过远程Shell命令来控制模拟器/设备实例 |
查看获取更多信息 for more information |
shell [<shellCommand>] |
连接模拟器/设施执行Shell命令,执行完毕后退出远程Shell端l |
Android开发中LogCat工具的使用
LogCat是Android中一个命令行工具,可以用于得到程序的log信息,本附录讲解其使用方法和其中的一些技巧。
1.使用方法
LogCat使用方法如下所示:
LogCat [options] [filterspecs]
LogCat的选项包括:
-s 设置过滤器,如指定'*:s'.
-f <filename> 输出到文件,默认情况是标准输出。
-r [<kbytes>] Rotate log every kbytes. (16 if unspecified). Requires –f。
-n <count> Sets max number of rotated logs to <count>, default 4。
-v <format> 设置log的打印格式, <format> 是下面的一种:
brief process 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)的类中,定义如下所示:
public class Calculator extends Activity {
/* ...... */
private static final String LOG_TAG = "Calculator";
private static final boolean DEBUG = false;
private static final boolean LOG_ENABLED = DEBUG ? Config.LOGD : Config.LOGV;
/* ...... */
由此,所有在Calculator中使用的log,均以“Calculator”为开头。
图利用LogCat查看日志信息