Android菜鸟成长记5-ADB和sqllite

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为每一个设备输出以下状态信息:  

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;
时间: 11-17

Android菜鸟成长记5-ADB和sqllite的相关文章

Android菜鸟成长记9 -- selector的用法

在项目开发的时候,由于系统给出的控件不够美观,因此开发时领导常常要我更改下界面,用美工给的图片取代系统图片.开始时,我只是给按钮等设置一下背景图片,这样做虽然美观了,但界面看起来却比较死板,比如用户点击了按钮后,按钮没一点反应.于是我就再给控件添加上onTouch监听事件,按下后改变背景颜色,松手后再恢复原来颜色.但后来发现了selector这个利器,真是喜出望外,不用再添加onTouch监听事件了,用起来也方便灵活.不得不说,多和其他开发人员交流技术经验等还是很有必要的,特别是像我这样独自负责

Android菜鸟成长记12 -- ORMLite的简单使用

在我们的开发中,为了提高开发效率,我们一般都会使用到框架,ormilte则是我们必不可少的数据库框架. 对于ORMLite我也是今天才刚刚接触,我们先从一个简单的项目来了解它吧. ORMLite jar 要想使用ormlite,我们要先下载其jar包. 下载方法: 我们可以到官网去下载:http://ormlite.com/releases/ 下载的时候,我们要下载一个core的jar和android的jar,本人用的是ormlite-android-5.0.jar和ormlite-core-5

Android菜鸟成长记8 -- 布局实践(微信界面的编写)

前面我们简单的介绍了一下android的五大布局,那么现在我们来实践一下,写一个简单的微信界面 首先,我们新建一个weixin.xml的linnerlayout布局 我们日常使用的微信,从简单的方面来说我可一分成三个内容,头部标签栏,中间显示信息栏,还有一个底部.那么我们就按照这个来先建一个页面 1 <?xml version="1.0" encoding="utf-8"?> 2 <LinearLayout xmlns:android="

Android菜鸟成长记11 -- sqlite数据库的设计和升降级

Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大.SQLite具备下列特点: 1.轻量级 使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小. 2.独立性 SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的"安装". 3.隔离性 SQLite 数据库中所有的信息(比如表.视图.触发器等)都包含在一个文件夹内,方便管理和维护. 4.跨平台 SQLite 目前

Android菜鸟成长记15 -- BitMap

BitMap简介 Bitmap是Android系统中的图像处理的最重要类之一.用它可以获取图像文件信息,进行图像剪切.旋转.缩放等操作,并可以指定格式保存图像文件.本文从应用的角度,着重介绍怎么用Bitmap来实现这些功能. BitMap的常用属性 1. BitMap类 public void recycle()--回收位图占用的内存空间,把位图标记为Dead  public final boolean isRecycled() --判断位图内存是否已释放  public final int g

Android菜鸟成长记1 -- JSON的解析

JSON的定义  一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性.业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换.JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为. android提供的json解析类 android的json解析部分都在包org.json下,主要有以下几个类: JSONObject:可以看作是一个json对象,这是系统中有关JSON定义的基本单元,其包含一对儿(Key/

菜鸟成长记1,软件工程大一经历

菜鸟成长记1 -----大一总结及反思 大一即将结束,突然间想总结一下我的大一生活,最重要的还是好好反思一下. 回首整个大一感觉自己学了好多的东西,但最终的感觉还是一无所成,大一上学期学习c语言,一直处于一个总是一个没有入门的感觉,虽然简单的c经长期磨练已经差不多搞懂,不过稍微复杂点的抑或着说稍微麻烦点的都没有真正学会,仅仅是学过c而已,在学c的同时一直想练ACM可能真的是天赋不够也可能是自己不是这块料,在几经折磨下,做了uva上不超过30道题的情况下放弃了,除想练ACM这中间还接触了java和

[菜鸟成长记]iOS开发自学笔记01-向helloworld致敬

我有一个梦想就是成为一个iOS开发.........菜鸟,老规矩,一切从helloworld开始. iOS8伴随着iphone6/6plus而来,Xcode6伴随着iOS8而来,苹果更新换代的速度依然很快,从硬件到软件,每次更新就意味着开发者们又要面临着一次次的恶补,当然,像我这样励志成为iOS开发菜鸟的人来说,目前还没有到面临这些问题的烦恼,我只需要专心做好我的hello world小程序,就像我从前无数次地在其他平台一样. 首先打开Xcode后从模板中选择single view applic

菜鸟成长记

突然才发现,昨天(20-03-2016)刚好是自己入圆5周年.时间一下子回到了之前,刚刚入圆的那一天(20-03-2011). 记得那天注册,是在大学宿舍的晚上,天开始变得模模糊糊的时候.还清楚的记得,那个时候自己还在自学jsp&servlet! 菜鸟,对于那个时候的我来说,再没有更好的称呼了. 我想谈谈我自己的一些经历,和大家分享一下.如果你觉得好听,或者受用,那么也就达到了我的目的.如果你觉得没什么意思,或者说收获不多,那么就当做杂文一扫而过也无妨.之前有网友发消息给我说:希望我给她一些指导