ADB 即 Android Debug Bridge,Android调试桥。ADB工作方式比较特殊,采用监听Socket TCP 端口的方式让IDE和Qemu通讯,默认情况下adb会daemon相关的网络端口。熟练使用 ADB 命令将会大大提升开发效率。 ADB 的命令有很多,今天就来总结下我在TV开发常用到的一些 ADB 命令。
adb install 一共有lrtsdg六个选项
-l 锁定该应用程序 -r 替换已存在的应用程序,也就是说强制安装 -t 允许测试包 -s 把应用程序安装到sd卡上 -d 允许进行将见状,也就是安装的比手机上带的版本低 -g 为应用程序授予所有运行时的权限 显示系统中全部设备: adb devices 这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示
2.开启ADB服务: adb start-server
3.关闭ADB服务: adb kill-server 停止 adb 服务
4.连接设备: adb connect 192.168.1.61 如果是USB连接,直接会连接ADB,如果是想通过网络连接(有线或者无线),则需要在同一个局域网,通过IP连接。上面192.168.1.61替换成想要连接设备的IP即可。
5.断开设备: adb disconnect 192.168.1.61
6.安装一个apk adb install -r (APK路径) -r 代表如果apk已安装,重新安装apk并保留数据和缓存文件。apk路径则可以直接将apk文件拖进cmd窗口,记得加空格。
7.直接卸载: adb uninstall (apk包名) 卸载 app 但保留数据和缓存文件: adb uninstall -k (apk包名)
8.列出手机装的所有app的包名: adb shell pm list packages
列出系统应用的所有包名: adb shell pm list packages -s
列出除了系统应用的第三方应用包名: adb shell pm list packages -3
9.清除应用数据与缓存: adb shell pm clear (apk包名)
10.启动应用 adb shell am start -n com.helloshan.demo/.MianActivity 此处无图,要知道具体的软件的包名及入口才可以打开。
11.强制停止应用 需要强制停止应用,则执行以下命令: adb shell am force-stop (apk包名)
12.删除系统应用: adb remount (重新挂载系统分区,使系统分区重新可写)。 adb shell cd system/app/ ls rm *.apk ls命令可以查看文件夹下的所有文件
12.杀死某个进程:(三个步骤) adb shell ps kill pid ps是查看进程命令,kill pid 你想结束的进程
13.pull和push文件 adb push (文件路径) (想要push的路径)
adb pull (文件路径) (想要pull的路径)
adb push/pull 之前有些设备要获取权限先,14条讲解。
14.获取文件的读写权限: adb remount 有些设备并不能直接adb remount,必须要先以root身份进入,先执行adb root,在执行adb remount
15.查看日志: adb logcat
16.查看屏幕分辨率 adb shell wm size
17.常用操作文件夹命令 操作文件和文件夹有时会出现权限不够,Read-only file system。就需要adb remount 操作,获得权限。 cd system/sd/data //进入系统内指定文件夹 ls //列表显示当前文件夹内容 mkdir xxx //创建xxx的文件夹 rm -r xxx //删除名字为xxx的文件夹及其里面的所有文件 rm xxx //删除文件xxx rmdir xxx //删除xxx的文件夹
18 Selinux adb shell setenforce 0
setenforce 0 :设置SELinux 成为permissive模式 临时关闭selinux的
在eng/userdebug版本中 使用setenforce 命令进行设置: adb shell setenforce 0 //设置成permissive 模式 adb shell setenforce 1 //设置成enforce 模式 注意此方法重启后失效
在eng/userdebug/user 版本中 使用getenforce 命令查询当前权限状态,如: adb shell getenforce adb shell dumpsys package com.sonymobile.tvout.wifidisplay | grep "CONNECTIVITY_INTERNAL" 19 dm-verity 关闭在调试环境下的dm-verity检查 adb disable-verity dm-verity: 它是dm(device mapper)的一个target,是一个虚拟块设备,专门用于文件系统的校验 获取UID的方法:
1|shell@miki8735_tb_m:/ $ ps | grep hola u0_a120 26187 360 1757260 97896 SyS_epoll_ 0000000000 S com.hola.weathershell@miki8735_tb_m:/ $ cat /proc/26187/status Name: om.hola.weatherState: S (sleeping)Tgid: 26187Pid: 26187PPid: 360TracerPid: 0Uid: 10120 10120 10120 10120Gid: 10120 10120 10120 10120
20 top命令是查看CPU利用率的 adb shell top -m 5
21 adb shell am broadcast [options] <intent style="box-sizing: border-box; margin: 0px; padding: 0px;">作用:发送一个广播 adb shell am broadcast -n com.example.myapplication/.ThermalReceive 22 adb shell dumpsys meminfo 显示内存信息 23 adb shell dumpsys window windows 查看窗口</intent>
线程(网上大部分的方法都是无法获得信息的)
通过如下的命令可以查看特定进程的线程信息:
7Y6DU1I:/ $ ps -T -p 1807
运行结果如下:
USER PID TID PPID VSZ RSS WCHAN ADDR S CMD
u0_a232 1807 1807 751 5092496 116012 0 0 S e.myapplication u0_a232 1807 1815 751 5092496 116012 0 0 S Jit thread pool u0_a232 1807 1820 751 5092496 116012 0 0 S Signal Catcher u0_a232 1807 1821 751 5092496 116012 0 0 S ADB-JDWP Connec u0_a232 1807 1822 751 5092496 116012 0 0 S HeapTaskDaemon u0_a232 1807 1824 751 5092496 116012 0 0 S ReferenceQueueD u0_a232 1807 1825 751 5092496 116012 0 0 S FinalizerDaemon u0_a232 1807 1826 751 5092496 116012 0 0 S FinalizerWatchd u0_a232 1807 1827 751 5092496 116012 0 0 S Binder:1807_1 u0_a232 1807 1828 751 5092496 116012 0 0 S Binder:1807_2 u0_a232 1807 1830 751 5092496 116012 0 0 S Binder:1807_3 u0_a232 1807 1848 751 5092496 116012 0 0 S Profile Saver u0_a232 1807 1854 751 5092496 116012 0 0 S RenderThread u0_a232 1807 1969 751 5092496 116012 0 0 S queued-work-loo u0_a232 1807 2101 751 5092496 116012 0 0 S Binder:1807_4 u0_a232 1807 2568 751 5092496 116012 0 0 S Binder:1807_5
在Android 10上需要使用下面的命令,上面的命令不起作用了。
ps -T -A | grep 10435
运行结果如下:
u0_a364 10435 10435 826 15418252 117992 futex_wait_queue_me 0 S example.burning u0_a364 10435 10449 826 15418252 117992 do_sigtimedwait 0 S Signal Catcher u0_a364 10435 10450 826 15418252 117992 pipe_read 0 S perfetto_hprof_ u0_a364 10435 10451 826 15418252 117992 do_sys_poll 0 S ADB-JDWP Connec u0_a364 10435 10452 826 15418252 117992 futex_wait_queue_me 0 S Jit thread pool u0_a364 10435 10453 826 15418252 117992 futex_wait_queue_me 0 S HeapTaskDaemon u0_a364 10435 10454 826 15418252 117992 futex_wait_queue_me 0 S ReferenceQueueD u0_a364 10435 10455 826 15418252 117992 futex_wait_queue_me 0 S FinalizerDaemon u0_a364 10435 10456 826 15418252 117992 futex_wait_queue_me 0 S FinalizerWatchd u0_a364 10435 10457 826 15418252 117992 do_sys_poll 0 S gmain u0_a364 10435 10458 826 15418252 117992 do_sys_poll 0 S gdbus u0_a364 10435 10459 826 15418252 117992 do_sys_poll 0 S Thread-2 u0_a364 10435 10461 826 15418252 117992 do_sys_poll 0 S example.burning u0_a364 10435 10462 826 15418252 117992 binder_ioctl_write_read 0 S Binder:10435_1 u0_a364 10435 10463 826 15418252 117992 binder_ioctl_write_read 0 S Binder:10435_2 u0_a364 10435 10465 826 15418252 117992 binder_ioctl_write_read 0 S Binder:10435_3 u0_a364 10435 10468 826 15418252 117992 futex_wait_queue_me 0 S Profile Saver u0_a364 10435 10473 826 15418252 117992 binder_ioctl_write_read 0 S Binder:10435_4 u0_a364 10435 10480 826 15418252 117992 binder_ioctl_write_read 0 S Binder:10435_5 u0_a364 10435 10494 826 15418252 117992 do_epoll_wait 0 S RenderThread
MuMu模拟器连接
找到配制文件myandrovm_vbox86.nemu,可以找到下面这句话
<Forwarding name="ADB_PORT" proto="1" hostip="127.0.0.1" hostport="7555" guestport="5555"/>
因此可以使用下面的命令来进行连接 adb connect 127.0.0.1:7555
公众号
更多内容,欢迎关注我的微信公众号:无情剑客。