android相关技术

1031601344     张俊   

                                        常见术语

 

1.apk扩展名 

apkAndroid包的扩展名,一个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自带的一个基于命令行的调试程序。它提供了设备浏览工具、设备上的拷贝工具和为调试转寄端口的功能。更多信息请参考附录三(AndroidADB工具使用


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的格式。对于ActivityAndroid搜索意图和Activity过滤器匹配程度最高的Activity;对于消息,Android会将消息转发给所有匹配意图过滤器的接收器。


11.Intent接收器(Receiver)

一个监听Context.broadcastIntent()发出的信息广播的类,详细信息请参考本书第9章。


12.布局资源 

一个描述Activity屏幕布局的XML文件。


13.文件清单 

应用程序中的一个XML文件,用于描述包中多个ActivityIntent过滤器、服务和其他内容。可以打开AndroidManifest.xml查看其包含的内容。

 
14.Nine-patch / 9-patch / Ninepatch image 

一种可变尺寸的位图资源,可用作设备上的背景或其他图片。

  
15.资源 

用户提供的XML、位图或其他文件,构建程序时会导入进来,稍后会被代码加载,Android支持多种类型的资源请参考Resources中的详细描述,程序定义的资源文件应当保存在res/ 子目录下。  


16.服务(Service) 

运行在后台执行多种固定任务的类如播放音乐或检测网络活动。


17.主题(Theme)

一系列定义多种默认显示设置的参数(文字大小、背景颜色等)AndroidR.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
设置网络速度如GPRSEDGE3G更多详细的内容下面有介绍
    -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工具使用

     SDKTools文件夹下包含着Android模拟器操作的重要命令ADBADB的全称为Android Debug Bridge,就是调试桥的作用,借助这个工具,我们可以管理设备或手机模拟器的状态 ,还可以进行以下的操作:

1快速更新设备或手机模拟器中的代码,如应用或Android系统升级;
2在设备上运行Shell命令;
3管理设备或手机模拟器上的预定端口;

4在设备或手机模拟器上复制或粘贴文件

 

ADB的工作方式比较特殊采用监听Socket TCP 5554等端口的方式让IDEQemu,默认情况下ADBdaemon相关的网络端口,所以当我们运行EclipseADB进程就会自动运行,在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进程例如:
adb forward tcp:8000 jdwp:472
jdb -attach localhost:8000

Data

install <path-to-apk>

安装Android为(可以模拟器/设施的数据文件.apk指定完整的路径)

 

pull <remote> <local>

将指定的文件从模拟器/设施拷贝到计算机

 

push <local> <remote>

将指定的文件从计算机上拷贝到模拟器/设备中

 

Ports and Networking

forward <local> <remote>

用本地指定的端口通过Socket方法远程连接模拟器/设施

端口需要描述下列信息:

  • tcp:<portnum>
  • local:<UNIX domain socket name>
  • dev:<character device name>
  • jdwp:<pid>

ppp <tty> [parm]…

通过USB运行ppp

  • <tty> — the tty for PPP stream. For exampledev:/dev/omap_csmi_ttyl.
  • [parm]… &mdash zero or more PPP/PPPD options, such as defaultroute ,local , notty , etc.

需要提醒的不能自动启动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命令,执行完毕后退出远程Shelll

 

 

Android开发中LogCat工具的使用

 

LogCatAndroid中一个命令行工具,可以用于得到程序的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> 表示logcomponenttag (或者使用* 表示所有) 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 WARNERROR3log将出现在发布版本中。

 

对于Java类,可以声明一个字符串常量TAGLogCat可以根据来区分不同的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查看日志信息

 

posted @ 2012-06-25 11:01  a780397897  阅读(495)  评论(0编辑  收藏  举报