Android开发环境中,ADB是我们进行Android开发经常要用的调试工具,它的使用当然是我们Android开发者必须要掌握的。

 

ADB概述

       Android Debug Bridge,Android调试桥接器,简称adb,是用于管理模拟器或真机状态的万能工具,采用了客户端-服务器模型,包括三个部分:

       1、客户端部分,运行在开发用的电脑上,可以在命令行中运行adb命令来调用该客户端,像ADB插件和DDMS这样的Android工具也可以调用adb客户端。

       2、服务端部分,是运行在开发用电脑上的后台进程,用于管理客户端与运行在模拟器或真机的守护进程通信。

       3、守护进程部分,运行于模拟器或手机的后台。

使用adb命令

       从开发用电脑的命令行或脚本文件中使用adb命令的用法是:

       adb [-d|-e|-s <serialNumber>] <command>

       当使用的时候,程序会调用adb客户端。因为adb客户端不需要关联到任何模拟器,所以如果有多个模拟器或手机正在运行,就需要使用-d参数指定要操作的是哪一个。

  

   adb devices

       执行结果是adb为每一个设备输出以下状态信息:  

android behavior 高级 androidbech_数据库

 

 

adb命令列表

  下表列出了所有adb支持的命令及其说明:

类别

命令

说明

备注

可选项

-d

命令仅对USB设备有效

如果有多个USB设备就会返回错误

-e

命令仅对运行中的模拟器有效

如果有多个运行中的模拟器就会返回错误

-s <serialNumber>

命令仅对adb关联的特定序列号的模拟器或手机有效(例如 "emulator-5556").

如果不指定设备就会返回错误

一般项

devices

输出所有关联的模拟器或手机设备列表

参见 Querying for Emulator/Device Instances 以获得更多信息。

help

输出adb支持的命令

 

version

输出adb的版本号

 

调试项

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

数据项

install <path-to-apk>

安装应用程序(用完整路径指定.apk文件)

 

pull <remote> <local>

从开发机COPY指定的文件到模拟器或手机

 

push <local> <remote>

从模拟器或手机COPY文件到开发机

 

端口和网络项

forward <local> <remote>

从本地端口转换连接到模拟器或手机的指定端口

端口可以使用以下格式表示:

l tcp:<portnum>

l local:<UNIX domain socket name>

l dev:<character device name>

l jdwp:<pid>

ppp <tty> [parm]...

通过USB运行UPP

l <tty> —PPP流中的tty。例如:/dev/omap_csmi_ttyl。

l [parm]... — 0到多个PPP/PPPD 选项, 例如defaultroute, local, notty等等。

注意不用自动启动PPP连接

 

脚本项

get-serialno

输出adb对象的序列号

参见 Querying for Emulator/Device Instances以获得更多信息。

get-state

输出adb设备的状态

wait-for-device

阻塞执行直到设备已经连接,即设备状态是 device.

可以在其他命令前加上此项,那样的话adb就会等到模拟器或手机设备已经连接才会执行命令,例如:


注意该命令并不等待系统完全启动,因此不能追加需要在系统完全启动才能执行的命令,例如install命令需要Android包管理器支持,但它必须在系统完全启动后才有效。下面的命令




会在模拟器或手机与adb发生连接后就执行install,但系统还没有完全启动,所以会引起错误。

服务端项

start-server

检测adb服务进程是否启动,如果没启动则启动它。

 

kill-server

终止服务端进程

 

Shell

shell

在目标模拟器或手机上启动远程SHELL

参见 Issuing Shell Commands以获得更多信息。

shell [<shellCommand>]

在目标模拟器或手机上执行shellCommand然后退出远程SHELL

 

 



SQLite 命令

本章将向您讲解 SQLite 编程人员所使用的简单却有用的命令。这些命令被称为 SQLite 的点命令,这些命令的不同之处在于它们不以分号(;)结束。

让我们在命令提示符下键入一个简单的 sqlite3 命令,在 SQLite 命令提示符下,您可以使用各种 SQLite 命令。

$sqlite3
SQLite version 3.3.6 Enter ".help" for instructions sqlite>

如需获取可用的点命令的清单,可以在任何时候输入 ".help"。例如:

sqlite>.help

上面的命令会显示各种重要的 SQLite 点命令的列表,如下所示:

命令

描述

.backup ?DB? FILE

备份 DB 数据库(默认是 "main")到 FILE 文件。

.bail ON|OFF

发生错误后停止。默认为 OFF。

.databases

列出附加数据库的名称和文件。

.dump ?TABLE?

以 SQL 文本格式转储数据库。如果指定了 TABLE 表,则只转储匹配 LIKE 模式的 TABLE 表。

.echo ON|OFF

开启或关闭 echo 命令。

.exit

退出 SQLite 提示符。

.explain ON|OFF

开启或关闭适合于 EXPLAIN 的输出模式。如果没有带参数,则为 EXPLAIN on,及开启 EXPLAIN。

.header(s) ON|OFF

开启或关闭头部显示。

.help

显示消息。

.import FILE TABLE

导入来自 FILE 文件的数据到 TABLE 表中。

.indices ?TABLE?

显示所有索引的名称。如果指定了 TABLE 表,则只显示匹配 LIKE 模式的 TABLE 表的索引。

.load FILE ?ENTRY?

加载一个扩展库。

.log FILE|off

开启或关闭日志。FILE 文件可以是 stderr(标准错误)/stdout(标准输出)。

.mode MODE

设置输出模式,MODE 可以是下列之一:


  • csv 逗号分隔的值
  • column 左对齐的列
  • html HTML 的 <table> 代码
  • insert TABLE 表的 SQL 插入(insert)语句
  • line 每行一个值
  • list 由 .separator 字符串分隔的值
  • tabs 由 Tab 分隔的值
  • tcl TCL 列表元素

.nullvalue STRING

在 NULL 值的地方输出 STRING 字符串。

.output FILENAME

发送输出到 FILENAME 文件。

.output stdout

发送输出到屏幕。

.print STRING...

逐字地输出 STRING 字符串。

.prompt MAIN CONTINUE

替换标准提示符。

.quit

退出 SQLite 提示符。

.read FILENAME

执行 FILENAME 文件中的 SQL。

.schema ?TABLE?

显示 CREATE 语句。如果指定了 TABLE 表,则只显示匹配 LIKE 模式的 TABLE 表。

.separator STRING

改变输出模式和 .import 所使用的分隔符。

.show

显示各种设置的当前值。

.stats ON|OFF

开启或关闭统计。

.tables ?PATTERN?

列出匹配 LIKE 模式的表的名称。

.timeout MS

尝试打开锁定的表 MS 微秒。

.width NUM NUM

为 "column" 模式设置列宽度。

.timer ON|OFF

开启或关闭 CPU 定时器测量。

让我们尝试使用 .show 命令,来查看 SQLite 命令提示符的默认设置。



sqlite>.show
     echo: off
  explain: off
  headers: off
     mode: column
nullvalue: ""
   output: stdout
separator: "|"
    width:
sqlite>


 

确保 sqlite> 提示符与点命令之间没有空格,否则将无法正常工作。

格式化输出

您可以使用下列的点命令来格式化输出为本教程下面所列出的格式:



sqlite>.header on
sqlite>.mode column
sqlite>.timer on sqlite>


上面设置将产生如下格式的输出:


ID          NAME        AGE         ADDRESS     SALARY
----------  ----------  ----------  ----------  ----------
1           Paul        32          California  20000.0
2           Allen       25          Texas       15000.0
3           Teddy       23          Norway      20000.0
4           Mark        25          Rich-Mond   65000.0
5           David       27          Texas       85000.0
6           Kim         22          South-Hall  45000.0
7           James       24          Houston     10000.0
CPU Time: user 0.000000 sys 0.000000



 

sqlite_master 表格

主表中保存数据库表的关键信息,并把它命名为 sqlite_master。如要查看表概要,可按如下操作:


sqlite>.schema sqlite_master


 

这将产生如下结果:


CREATE TABLE sqlite_master (
  type text,
  name text,
  tbl_name text,
  rootpage integer,
  sql text
);


 

SQLite 语法

SQLite 是遵循一套独特的称为语法的规则和准则。本教程列出了所有基本的 SQLite 语法,向您提供了一个 SQLite 快速入门。

SQLite 语句

所有的 SQLite 语句可以以任何关键字开始,如 SELECT、INSERT、UPDATE、DELETE、ALTER、DROP 等,所有的语句以分号(;)结束。

SQLite ANALYZE 语句:



ANALYZE;
or
ANALYZE database_name;
or
ANALYZE database_name.table_name;


 

SQLite AND/OR 子句:



SELECT column1, column2....columnN
FROM   table_name
WHERE  CONDITION-1 {AND|OR} CONDITION-2;



 

SQLite ALTER TABLE 语句:



ALTER TABLE table_name ADD COLUMN column_def...;



 

SQLite ALTER TABLE 语句(Rename):



ALTER TABLE table_name RENAME TO new_table_name;



 

SQLite ATTACH DATABASE 语句:



ATTACH DATABASE 'DatabaseName' As 'Alias-Name';



 

SQLite BEGIN TRANSACTION 语句:



BEGIN;
or
BEGIN EXCLUSIVE TRANSACTION;



 

SQLite BETWEEN 子句:



SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name BETWEEN val-1 AND val-2;



 

SQLite COMMIT 语句:



COMMIT;



 

SQLite CREATE INDEX 语句:



CREATE INDEX index_name
ON table_name ( column_name COLLATE NOCASE );



 

SQLite CREATE UNIQUE INDEX 语句:



CREATE UNIQUE INDEX index_name
ON table_name ( column1, column2,...columnN);



 

SQLite CREATE TABLE 语句:



CREATE TABLE table_name(
   column1 datatype,
   column2 datatype,
   column3 datatype,
   .....
   columnN datatype,
   PRIMARY KEY( one or more columns )
);



 

SQLite CREATE TRIGGER 语句:



CREATE TRIGGER database_name.trigger_name 
BEFORE INSERT ON table_name FOR EACH ROW
BEGIN 
   stmt1; 
   stmt2;
   ....
END;



 

SQLite CREATE VIEW 语句:



CREATE VIEW database_name.view_name  AS
SELECT statement....;



 

SQLite CREATE VIRTUAL TABLE 语句:



CREATE VIRTUAL TABLE database_name.table_name USING weblog( access.log );
or
CREATE VIRTUAL TABLE database_name.table_name USING fts3( );



 

SQLite COMMIT TRANSACTION 语句:



COMMIT;



 

SQLite COUNT 子句:



SELECT COUNT(column_name)
FROM   table_name
WHERE  CONDITION;



 

SQLite DELETE 语句:



DELETE FROM table_name
WHERE  {CONDITION};



 

SQLite DETACH DATABASE 语句:



DETACH DATABASE 'Alias-Name';



 

SQLite DISTINCT 子句:



SELECT DISTINCT column1, column2....columnN
FROM   table_name;



 

SQLite DROP INDEX 语句:



DROP INDEX database_name.index_name;



 

SQLite DROP TABLE 语句:



DROP TABLE database_name.table_name;



 

SQLite DROP VIEW 语句:



DROP INDEX database_name.view_name;



 

SQLite DROP TRIGGER 语句:



DROP INDEX database_name.trigger_name;



 

SQLite EXISTS 子句:



SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name EXISTS (SELECT * FROM   table_name );



 

SQLite EXPLAIN 语句:



EXPLAIN INSERT statement...;
or 
EXPLAIN QUERY PLAN SELECT statement...;



 

SQLite GLOB 子句:



SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name GLOB { PATTERN };



 

SQLite GROUP BY 子句:



SELECT SUM(column_name)
FROM   table_name
WHERE  CONDITION
GROUP BY column_name;



 

SQLite HAVING 子句:



SELECT SUM(column_name)
FROM   table_name
WHERE  CONDITION
GROUP BY column_name
HAVING (arithematic function condition);



 

SQLite INSERT INTO 语句:



INSERT INTO table_name( column1, column2....columnN)
VALUES ( value1, value2....valueN);



 

SQLite IN 子句:



SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name IN (val-1, val-2,...val-N);



 

SQLite Like 子句:


SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name LIKE { PATTERN };



 

SQLite NOT IN 子句:



SELECT column1, column2....columnN
FROM   table_name
WHERE  column_name NOT IN (val-1, val-2,...val-N);



 

SQLite ORDER BY 子句:



SELECT column1, column2....columnN
FROM   table_name
WHERE  CONDITION
ORDER BY column_name {ASC|DESC};



 

SQLite PRAGMA 语句:



PRAGMA pragma_name;

For example:

PRAGMA page_size;
PRAGMA cache_size = 1024;
PRAGMA table_info(table_name);


 

SQLite RELEASE SAVEPOINT 语句:


RELEASE savepoint_name;



 

SQLite REINDEX 语句:


REINDEX collation_name;
REINDEX database_name.index_name;
REINDEX database_name.table_name;


 

SQLite ROLLBACK 语句:


ROLLBACK;
or
ROLLBACK TO SAVEPOINT savepoint_name;


 

SQLite SAVEPOINT 语句:



SAVEPOINT savepoint_name;



 

SQLite SELECT 语句:



SELECT column1, column2....columnN
FROM   table_name;



 

SQLite UPDATE 语句:



UPDATE table_name
SET column1 = value1, column2 = value2....columnN=valueN
[ WHERE  CONDITION ];


 

SQLite VACUUM 语句:



VACUUM;



 

SQLite WHERE 子句:



SELECT column1, column2....columnN
FROM   table_name
WHERE  CONDITION;