Android 常用命令,使用时注意空格和区分大小写
使用Android命令,需配置环境变量。Mac配置Android环境变量,参看这里。
这里仅记录一些用过的常用命令,获取更多更全的资料请参看官方文档:http://developer.android.com/tools/help/adb.html
一、adb sqlite3 (数据库操作)
1. 输入 “adb shell” 进入shell
2. 使用 cd 命令切换到数据库所在目录,如 “cd data/data/<package-name>/databases”
3. 输入 “sqlite3 数据名.db” 打开数据库
或者跳过2直接输入全路径打开,如 “sqlite3 data/data/<package-name>/databases/<databaseName.db>”
4. ok,进入数据库,可以操作数据库了
输入 “.tables” 查看数据库中的表
输入 “.schema [<tableName>]” 查看建表sql语句
输入 “.dump [<tableName>]” 查看建表以及插入数据的sql语句
输入 “.exit” 或 “.quit” 或者按 “CTRL + D” 退出 sqlite3,返回adb shell
(以上命令需加 “." 点号前缀)
5. 使用增删改查等语句,注意使用 “;” 分号结束语句。
6. 查询表结构
select * from sqlite_master where type='table' and name='table_name'
参考:http://developer.android.com/tools/help/sqlite3.html
其它补充:
windows环境下,adb sqlite3 的 select 语句,发现查询结果中文显示为乱码
解决:cmd模式下,输入 “chcp 65001” 切换为UTF-8格式,可以看到窗口的字体变了样,右键窗口标题栏,点 “属性” 》》“字体” 》》修改下字体类型和大小。(输入 “chcp 936” 可以切换回中文格式)
二、adb pull (复制设备上内容到PC端)
adb pull <设备目录|文件> <PC端目录>
1. 复制文件,目标目录需存在
adb pull /data/data/<package-name>/databases/<databaseName.db> ~/Desktop/db/
复制数据库文件到桌面,桌面db文件夹需先存在
2. 复制文件夹,目标目录不存在会创建
adb pull /data/data/<package-name>/databases ~/Desktop/db/
复制数据库文件夹到桌面,桌面db文件夹不存在会创建
3. 其它补充
在模拟器环境测试成功,真机显示 “daemon started successfully”,应该是需root权限
windows环境下,目标目录可能需要输入全路径,如 "e://db"
三、adb push (复制PC端的内容到设备)
adb push <PC端目录|文件> <设备目录>
使用起来和 adb pull 差不多
四、adb install (安装应用)
adb install [options] <PATH>
例如:adb install Downloads/test.apk
一般用这个可以搞定,如果提示 INSTALL_FAILED_ALREADY_EXISTS(安装失败,应用已经存在)
可以使用 -r 参数安装。如果还是安装失败,请查看ROM和SD卡空间
options 参数
-l: Install the package with forward lock.
-r: 不删除数据情况下,安装一个已经存在的应用
-t: 安装测试应用
-i <INSTALLER_PACKAGE_NAME>: 指定安装包名称
-s: 安装在SD卡
-f: 安装在ROM
-d: 允许代码版本降低
五、adb shell rm (删除文件)
使用需进入 shell 模式,cd 到所需目录
1. rm xxx (删除XXX文件)
2. rmdir xxx (删除xxx空文件夹)
3. rm -r xxx (删除xxx文件夹及内容)
六、关于没有Root的真机使用ADB命令
之前一直是模拟器和Root真机才能使用ADB,真机如果没有Root不能使用。
目前版本7.1.1的Google LG nexus 开发者选项中有Root 授权,启用后可以使用ADB命令。
键入以下命令:
1. adb shell 进入shell模式
2. su root 切换到Root身份
3. 可以正常使用其它ADB命令了。
参看
七、keytool (证书工具)
首先,这个不是Android的命令,而是java的命令。写在这里是因为我是在用Android签名的时候用到的。
因为是java命令,需要配置过 java 环境变量。
1. 查询证书的内容
cd 到 证书所在目录
keytool -list -v -keystore my.keystore (my.keystore 是证书名)
2. 查询证书的别名
keytool -list -keystore my.keystore -alias abc (abc 是别名)
如果别名没有发现,会提示
keytool error:java.lang.Exception:Alias does not exist
3. 直接查别名
keytool -list -v -keystore xxxx.keystore -storepass [密码]
上面那个太麻烦,用这个直接查出来
八、PM
// 列出手机安装的应用列表
adb shell pm list packages
// 查看某个应用,比如setting应用
adb shell pm list package | grep setting
adb shell pm list package -f | grep setting
// 查找包名对应的安装包路径
adb shell pm path 要查询的包名
// 卸载应用
adb shell pm uninstall com.xx.xxx
九、PS 查询进程
adb shell ps com.test.demo
十、启动/关闭服务
// 启动服务
adb shell am startservice com.test.demo/.service.TestService
adb shell am stopservice com.test.demo/.service.TestService
// 启动应用
adb shell am start com.test.demo/.mainActivity
参数 -W 统计启动时间
十一、日志过滤
adb logcat | grep 标签名称
十二、Root手机删除文件
adb remount
...
adb rm -r 文件或目录
...
adb reboot
十三、PS 查询进程
// 查看所有进程
adb shell ps
// 过滤查询进程(通过包名或部分包名)
adb shell ps com.android
十四、iptables
这个是防火墙规则,之前搞限速有稍微了解。
规则需要保存,不然重启机器就会清除掉;要更好的维护规则,最好使用自定义链表。
这里不展开,请自行查询资料
// 查询OUTPUT下的规则列表
adb shell iptables -L OUTPUT -nv --line-number
// 转出限制,顺序不能颠倒,这里10/s应该是每秒10个包的意思??
adb shell iptables -A OUTPUT -m limit --limit 10/s -j ACCEPT
adb shell iptables -A OUTPUT -j DROP
十五、签名 apk
jarsigner -verbose -keystore 证书.jks -signedjar 已签名.apk 未签名.apk 证书别名
十六、input keyevent (按某个键)
adb shell input keyevent 26 (26 是电源键)
十七、多设备
// 查询设备列表
adb devices
List of devices attached
SW7HGY7SORWGIR4D device
192.169.1.17:5555 device
// 指定设备安装
adb -s SW7HGY7SORWGIR4D install -r abc.apk
十八、dumpsys
// 查看当前运行的应用包名和activity
adb shell dumpsys window | grep mCurrentFocus
// 查看指定应用的版本
adb shell dumpsys package com.xxx.xxx |grep version