ubuntu上使用adb

adb介绍

全称 Android Debug Bridge
电脑是客户端,服务器是手机

adb包的安装

1
sudo apt-get install Android-tools-adb android-tools-fastboot

不知道软件源是哪里,但是从版本来看,默认的软件源提供的更新比较慢

电脑驱动文件的配置

查询厂商代码

要知道自己手机的厂商并配置一份文件放在系统设备文件夹下

1
lsusb           #查看设备信息

插上手机,再来一次多出来的那个,比如

1
Bus 001 Device 005: ID 0b05:5601 ASUSTek Computer, Inc.
  • 0b05 厂商代码,这个代表华硕,这个数据也最重要
  • 5601 产品的编号
  • 上面两个数字都是16进制数,所以设备编号最大有65535个,不知道是否有这个数字一样的USB设备,被同样的人买到,插在同一个电脑上会发生什么

其他厂商代码还有

厂商 代码
Acer 0502
Dell 413c
Foxconn 0489
Garmin-Asus 091E
HTC (Older Phones) 0bb4
HTC (Newer phones) 18d1
Huawei 12d1
Kyocera 0482
LG 1004
Motorola 22b8
Nexus One/S 18d1
Nvidia 0955
Pantech 10A9
Samsung 04e8
Sharp 04dd
Sony Ericsson 0fce
ZTE 19D2

编辑规则文件

编辑文件 /dev/udev/rules.d/my-android.rules

  • 文件名任意
  • 一个文件可以存储多个手机
1
2
# adb and fastboot protocol
SUBSYSTEM=="usb", ATTR{idVendor}=="0b05", MODE="0666", GROUP="plugdev", OWNER="chougousui"
  • 设备类型:usb
  • 厂商编号:0b05
  • 权限: 666
  • 组:即插即用
    • 不写没关系
  • 拥有者:chougoussui
    • 不写就是root

使规则文件生效

调整文件权限

1
sudo chmod a+x /etc/udev/rules.d/my-android.rules

读取规则

1
2
3
sudo chmod a+x /etc/udev/rules.d/my-android.rules
或者
sudo chmod a+x /etc/udev/rules.d/my-android.rules

参考网页:=http://www.linuxdiyf.com/linux/13422.html=

常用adb命令

基础

  • adb version 查看版本,通常也用于检查对否安装,
    • adb devices 查看现在连接的设备
    • 如果错误,在手机上重新打开一次USB调试
      • adb shell 打开shell登录服务器(手机)

权限相关

  • adb root 提示adb将以root权限运行
    • 提示错误是由于厂商默认限制adb查看手机的权限,表现为登录shell后身份是shell
    • 不以root身份运行adb导致 adb pull/push 不能对系统应用数据区 /data/data/ 操作
    • 解决方法:
      • 要么在shell中以root身份更改应用区文件权限
      • 要么安装 adbd Insecure.apk,并设置同意手机直接使用root权限版的adbd
    • 然后使用 adb shell 时将直接使用root身份
      • adb remount 重新挂载系统区文件
    • 一般在使用 adb root 之后重新挂载以拥有对 /system 区域的权限
  • su
    • 在shell模式下切换到root身份
    • 这个需要手机已经root
  • mount -o remount -o rw /system
    • 在shell模式下重新挂载/system?

文件相关

  • adb pull <remote> <local> 获取文件
    • 远端的文件夹下没有文件将不会传输文件夹到本地
    • 注意没有权限会提示失败,参见上面=adb root=
    • adb push <local> <remote>推送文件到远端
    • 远端没有的文件夹会创建

应用相关

  • adb shell pm llist packages 查看安装的软件列表
    • -s 参数表示只看系统软件
    • -3 参数表示只看第三方软件
    • 但是数量和文件管理器给出的不同
  • adb install <xxx.apk> 安装本地的一个apk文件
  • adb uninstall <package>卸载应用
    • =-k=参数会保留数据
    • 或许系统应用的删除方法有更多要求,比如删除以下路径中的apk文件?更多情况下只需要使用这一条
    • 系统应用放在 \system\app
    • 第三方应用放在 \data\app
    • 一说卸载应用要4步 http://blog.csdn.net/he315889714/article/details/38519101
      • 重新挂载 mount -o remount,rw rootfs /system/
      • /system/app  删除apk文件
      • /data/data  删除应用的数据
      • 删除 /data/system/packages.xml 文件中 <package></package> 的一段数据

刷机相关

  • adb reboot bootloader 重启进入bootloader界面
    • 一般手机按键完好也可以使用手机的电源键+音量键(增或减看厂商)进入
    • 越来越多的厂家开始锁bootloader,也越来越多的厂家设定不能从按键直接进入recovery
      • fastboot devices 查看fastboot设备
    • 或许还和adbshebei不同
      • fastboot flash recovery your~recoveryimage~.img 刷入recovery
  • 还有临时使用recovery
  • 刷入boot分区等等,待补全

以无线连接设备

先用usb连接上, adb devices 确认连接上了,
然后使用

1
Adb tcpip 5555

告知设备要在5555端口监听adb的命令
然后手动弹出设备
使用

1
adb connnect <ip>

连接设备
然后使用 adb devices 查看连接到的设备,有无线的显示就说明成功了
记得要

1
adb disconnect <ip>

其他

有不少中文版放在 https://github.com/mzlogin/awesome-adb
官方翻译版暂时没有找到
还有众多如启动应用,模拟操作等非常有用的方法

应用

备份应用数据

  • 有说使用`adb backup -f <local~path~/filename.ab> <package>

    • 但是一来要在手机上同意,屏幕碎了的话不能操作
    • 二来备份文件很小.表明失败了
  • 于是参照es文件浏览器做法,直接备份 /data/data 区下文件夹中的数据

    1
    adb pull /data/data/org.dayup.gnotes ./gnotes
    • 正好 adb pull 时不会将空文件夹复制下来
    • 也不会将有软链接的文件复制过来
      • 比如lib文件或文件夹,通常安装引用就会有,与数据无关,
        链接到的位置也一般在 /data/app/lib 或者 /data/applib 文件夹下
    • 缓存文件夹 cache 也不会被复制下来
      • 除非软件厂商觉得缓存有用,那么他们会改动缓存所在的文件夹名吧
  • 鉴于厂商限制直接运行root版本shell,

  • 能后备份手机应用数据的情况仅限于手机已经root并且打开了usb调试,
    最好还是能安装个应用并进行操作,否则真要先加读权限再抓数据了

恢复应用数据

1
adb push ./gnotes /data/data/org.dayup.gnotes

实测成功

安装其他linux命令

  • 系统自带的命令文件安装在/system/bin
    • 甚至系统使用的shell–sh都在bin中
  • busybox安装的命令则放在了/system/xbin中,系统正好能找到
    • 很多经典的命令比如wc都是由busybox导入的
  • 单独安装的话把命令文件放在 /system/xbin 下就好