简介
ADB全称Android Debug Bridge,我们在开发过程中经常使用这个工具来操作Android系统。
在使用ADB过程中有一些常识和细节,我们来总结一下。
ADB主要功能有:
1、在Android设备上运行Shell(命令行)
2、管理模拟器或设备的端口映射
3、在计算机和设备之间上传/下载文件
4、将电脑上的本地APK软件安装至Android模拟器或设备上
ADB的安装
如果你已经安装了Android SDK 那么你可以在你的SDK目录下找到 ..\android-sdk-windows\platform-tools 这个目录,ADB工具就放在这里。如图:
复制这个目录的路径,我们需要在windows的系统设置中将这个路径设置到PATH中,设置完成后我们就可以再CMD窗口中使用ADB了。
Android系统文件结构
在使用adb之前,我们首先来了解Android系统的文件结构,这样我们才知道,要使用adb去哪里,操作哪些文件。
1、系统分区
adb shell
mount
可以看到以下分区结构
rootfs / rootfs ro 0 0
tmpfs /dev tmpfs rw,mode=755 0 0
devpts /dev/pts devpts rw,mode=600 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
none /acct cgroup rw,cpuacct 0 0
tmpfs /mnt/asec tmpfs rw,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,cpu 0 0
/dev/block/mtdblock0 /system yaffs2 ro 0 0
/dev/block/mtdblock1 /data yaffs2 rw,nosuid,nodev 0 0
/dev/block/mtdblock2 /cache yaffs2 rw,nosuid,nodev 0 0
/dev/block/vold/179:0 /mnt/sdcard vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf8,err ors=remount-ro 0 0
/dev/block/vold/179:0 /mnt/secure/asec vfat rw,dirsync,nosuid,nodev,noexec,uid=1000,gid=1015,fmask=0702,dmask=0702,allow_utime=0020,codepage=cp437,iocharset=iso8859-1,shortname=mixed,utf 8,errors=remount-ro 0 0
tmpfs /mnt/sdcard/.android_secure tmpfs ro,size=0k,mode=000 0 0
其挂载方式和 Linux 非常类似。其中需要说明一下的可能是 /dev/block/mtdblock* 这几个核心分区(写入 ROM 的),他们都是使用 yaffs2 文件系统(基于 FLASH 存储),其中是 /system 这个分区只有特殊的 readonly 只读权限,由此可见 Android 在安全性设计方面所下的一些功夫。另外 /dev/block/vold 据说是设计来替代 udev 的功能,主要用于支持一些热插拔设备。
2、目录概览
ls -l
目录
drwxrwx--x system cache 2015-11-25 11:15 cache
dr-x------ root root 2015-12-07 10:02 config
lrwxrwxrwx root root 2015-12-07 10:02 d -> /sys/kernel/debug
drwxrwx--x system system 2015-11-25 11:26 data
-rw-r--r-- root root 403 1970-01-01 08:00 default.prop
drwxr-xr-x root root 2015-12-07 21:43 dev
lrwxrwxrwx root root 2015-12-07 10:02 etc -> /system/etc
-rwxr-x--- root root 236004 1970-01-01 08:00 init
-rwxr-x--- root root 22463 2015-11-19 16:47 init.rc
drwxrwxr-x root system 2015-12-07 10:02 mnt
dr-xr-xr-x root root 1970-01-01 08:00 proc
drwx------ root root 2015-11-19 11:02 root
drwxr-x--- root root 2015-11-19 16:47 sbin
lrwxrwxrwx root root 2015-12-07 10:02 sdcard -> /storage/emulated/legacy
drwxr-x--x root sdcard_r 2015-12-07 10:02 storage
dr-xr-xr-x root root 2015-12-07 10:02 sys
drwxr-xr-x root root 2015-11-25 11:15 system
以下是几个重要目录/文件的说明:
1、mnt 挂载点目录
2、etc 系统主要配置文件
3、system Android 系统文件
4、sys Linux 内核文件
5、proc 运行时文件
6、init.rc 启动脚本
7、default.prop 系统属性配置文件
8、data 用户程序目录
9、dev 设备文件
system目录:
ls -l /system
目录如下:
drwxr-xr-x root root 2015-11-25 11:15 app
drwxr-xr-x root shell 2015-11-25 11:15 bin
-rw-r--r-- root root 7554 2008-08-01 20:00 build.prop
drwxr-xr-x root root 2015-11-25 11:14 data
-rw-r--r-- root root 28 2008-08-01 20:00 default.prop
drwxr-xr-x root root 2015-11-25 11:14 etc
drwxr-xr-x root root 2015-11-25 11:15 fonts
drwxr-xr-x root root 2015-11-25 11:14 framework
drwxr-xr-x root root 2015-11-25 11:15 lib
drwxr-xr-x root root 2015-11-25 11:15 lib64
drwx------ root root 1970-01-01 08:00 lost+found
drwxr-xr-x root root 2015-11-25 11:15 media
drwxr-xr-x root root 2015-11-25 11:52 priv-app
drwxr-xr-x root root 2015-11-25 11:15 tts
drwxr-xr-x root root 2015-11-25 11:15 usr
drwxr-xr-x root shell 2015-11-25 11:15 vendor
drwxr-xr-x root shell 2015-11-25 11:15 xbin
主要文件目录介绍:
1、usr 用户文件夹,包含共享、键盘布局、时间区域文件等
2、app 常规下载的应用程序,这些 apk 包都是受保护的哦
3、lib 系统底层库,如平台运行时库等
4、etc 系统的配置文件,比如APN接入点设置等核心配置等
5、framework Android 系统平台核心 framework 的文件
6、build.prop Android 系统属性配置文件
7、xbin 常用开发工具,比如 tcpdump/sqlite3 等
8、bin 系统工具,比如 ps/cp/pm 等
9、priv-app 系统应用程序
data目录:
ls -l /data
目录如下:
drwxrwx--x system system 2015-11-25 19:22 app
drwxrwx--x system system 2015-11-25 10:55 app-private
drwxrwx--x system system 2015-11-25 11:53 data
drwxr-x--x root root 2015-11-25 10:55 local
drwxrwx--- root root 1970-01-01 08:00 lost+found
drwxrwx--t system misc 2015-11-25 10:55 misc
drwx------ root root 2015-12-07 10:02 property
drwx--x--x system system 2015-11-25 10:55 security
drwxrwxr-x system system 2015-12-08 16:11 system
主要文件目录介绍:
1、data 存放安装后的apk数据
2、app 存放apk文件
使用ADB进行apk卸载和安装
1、非系统APP
对于非系统app,我们可以使用adb直接进行卸载和app,也是我们最经常使用的方式。
安装:
adb install apk路径
例如
adb install C:\com.example.apk
卸载:
adb uninstall apk包名
例如
adb uninstall com.example
对于app卸载,我们还有一种方式,就是直接删除apk文件以及其data目录
对于文件增删操作,都需要挂载,以下文件的增删操作,如果没有说明,都需remount
adb remount
有的朋友可能会挂载失败,提示
remount failed: Operation not permitted
遇到这个错误的朋友,可以看下面的错误总结部分,这里不细说。
删除过程如下:
adb shell
cd /data/app
rm apk包名.apk
cd /data/data
rm -rf 应用包名
这样就把apk文件和data目录都删除了,如果不把两者都删除,可能在再次安装app时,会提示版本错误。
2、系统APP
安装:
安装系统app,直接将apk文件push到/system/priv-app目录下,重启手机即可
adb push 本地apk路径 /system/priv-app
例如
adb push C:/example.apk /system/priv-app
删除:
和普通app删除过程一样,要删除apk文件和data目录
其中apk文件在/system/priv-app目录下,data在/data/data目录下
删除过程如下:
adb shell
cd /system/priv-app
rm apk包名.apk
cd /data/data
rm -rf 应用包名
使用ADB进行文件传输
adb pull 就是从真机上拷贝文件到您的PC上。
adb pull 手机文件地址 本地目录
例如
adb pull /data/app/example.apk C:\Desktop\
adb push 就是从PC上复制一份文件到您的真机上。
adb push 本地文件地址 手机目录
例如
adb push C:\Desktop\example.apk /data/app
注意:操作文件的前提是remount以后,你对文件目录有操作权限,如果你是root用户,可以修改目录的操作权限。
常见错误
以下错误,部分是由于权限不足引起的,在调试错误前,请保证可以获得手机的root权限
1、remount failed: Permission denied
这个错误说明你没有权限,你可以转换成root用户以后,进行操作,或者
adb root
adb remount
2、error: device not found
如果你连接了手机,却出现这个错误,可以尝试在任务管理器中关闭adb.exe进行,然后重试
3、INSTALL_FAILED_INVALID_APK
无效的安装包,安装包已损坏。一般是由于你的安装包不完整,换一个安装包就好了。
4、INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES
安装包签名不一致,你需要卸载旧的安装包再重新安装。
对于普通app和系统app,分别按照上文方式进行卸载、安装即可。
5、INSTALL_FAILED_INSUFFICIENT_STORAGE
没有足够的存储空间,清理空间,重启手机后重试。
6、Read-only file system
也就是文件只能读,你可以尝试remount之后在进行操作。
或者chmod 777修改目录的读写权限(如果你是root用户)。
7、INSTALL_FAILED_INVALID_URI
在安装apk过程中,遇到这个错误,貌似root过的手机比较常出现,可以尝将/data/local目录的权限
从 rwxrwxr– 修改为 rwxrwxrwx