一、前期基础知识储备

在这里插入图片描述
(1)adb命令行的定义与作用
adb的全称为Android Debug Bridge,中文名“调试桥”,顾名思义adb命令是调试手机中应用的一种方法,而且作为Android SDK中的工具,其功能非常强大,用这个命令行工具可以直接操作管理调试中的Android模拟器或者真机调试中的设备,它的主要功能列举如下:

  • 运行设备的shell(多种命令行),进行各种操作;
  • 管理模拟器或移动设备的端口映射;
  • 计算机和设备之间的文件传入/传出;
  • 将本地apk软件安装在模拟器或移动设备中……

(2)adb命令行的运行位置
Windows下使用Android Studio开发的同学可以在两个位置运行adb命令:
1)Android Studio自带的Terminal窗口;(注意自配环境变量,否则无效)
比如,进入一个文件夹
在这里插入图片描述
这里写图片描述
配置adb运行环境变量的方法:《如何配置android的adb环境变量》-简单 易懂;
配置JDK运行环境变量的方法:《JDK的下载安装以及配置》-注意输入“java” “javac” “java -version” 进行验证。
2)Windows下使用cmd黑窗口;(注意自配环境变量,否则无效)
这里写图片描述
(使用cmd窗口时,配置环境变量的方法同上)

二、上代码,进行具体的adb命令操作

(1)执行adb devices 命令,我们可以看到当前电脑正在连接调试的手机;
这里写图片描述
(2)执行adb shell命令查看设备里面的文件目录和文件;
注意:adb shell,这个命令用于登录设备的shell,后面加直接运行设备命令,相当于执行远程命令,如“ls”列出目录下的文件和文件夹。
这里写图片描述
(3)执行进入目录操作,进入mnt目录下的sdcard目录;
这里写图片描述
该sdcard目录下就是我们手机上重要的sdcard目录,里面有各种重要的存储文件;
(4)执行exit命令 回车 退出文件夹目录;
这里写图片描述
(5)执行push命令,将电脑端文件复制到手机中指定文件夹中去;

这里写图片描述
这里写图片描述
注意:复制的文件源需放置在C:\Users\Administrator目录下,命令行可直接读取;
(6)执行pull命令,将手机移动端文件复制到电脑C:\Users\Administrator目录下;

这里写图片描述
这里写图片描述
(6)adb version,查看adb版本;
注:接下来的用Android Studio Terminal窗口演示adb命令行的使用。
这里写图片描述
(7)adb shell dumpsys package <package_name>,查看app相关所有信息,包括action,codepath,version,需要的权限等等信息;
(8)列出移动设备中所有的应用;
adb shell pm list package — 列出所有的应用;
adb shell pm list package –s — 列出系统应用;
adb shell pm list package -3 — 列出所有第三方应用;
adb shell pm list package –f — 列出应用包名及对应的apk名及存放位置;
adb shell pm list package –I — 列出应用包名及其安装来源;
adb shell pm list package -f -3 -i douyu 参数组合使用,如查找斗鱼的包名;
这里写图片描述
(8)adb shell wm size,获取屏幕的分辨率;
这里写图片描述
(9)adb shell am start -n com.android.camera/.Camera启动手机自带相机;
这里写图片描述

三、Android开发中常用的adb操作 - 大大提升开发便捷性

上面列出的是adb命令是适用性的基础操作,下面推荐一些Android开发中便捷的adb命令。
(1)安装apk
apk放在电脑桌面上,输入adb install C:\Users\Administrator\Desktop\clip.apk
小鹏新电脑安装:adb install C:\Users\Xpeng\Desktop\e1.apk
覆盖当前版本安装,输入adb install -r C:\Users\Administrator\Desktop\clip.apk
过滤安装某个ABI的apk:将apk放在SDK目录下的platform-tools的目录下,与adb.exe一个目录
输入:adb install --abi arm64-v8a pencil.apk,比如安装64位的apk。
(1.0.1)命令行卸载不了 / release debug混装 / 版本down这些情况直接使用强制安装apk的命令:

在app已有的情况下使用-r参数
在app版本低于现有版本使用-d参数
adb install -r -d C:\Users\Xpeng\Desktop\e1.apk

(1.1)解压小鹏 - xp文件
将jar文件一起放在桌面上,然后在AS的黑窗口中执行下面的方法即可,这样可以得到一份zip文件(xp文件同目录),解压缩后,去到
Log\log0\main.txt文件下查找即可,里面的Log信息和AS中打印的log信息一一对应。
java -jar C:/Users/Xpeng/Desktop/decryptFile.jar F:/Xpeng-Downloads/XpengFile_20210430174418.xp
(1.2)重启终端,若是没有上电/下电按钮,则执行
adb reboot命令行可以重启终端。
(1.3)命令行截图,然后保存到本地;
分为两步:
①使用screencap 命令,对安卓设备的当前屏幕进行截屏:
adb shell screencap -p /sdcard/01.png
②将截屏的图片下载到本地电脑:
adb pull /sdcard/01.png
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
另外,需要注意的一点,如果使用了360桌面整理这一类的整理软件,那么desktop的位置会发生变化,如博主的变为:adb install -r F:\360MoveData\Users\Administrator\Desktop\1.6.apk
补充几个当项目编译失败时,可以执行的命令行,用以确认错误的源头:
gradlew build --stacktrace
gradlew compileDebug --stacktrace
gradlew compileDebugJavaWithJavac
gradlew processDebugResources --debug
(2)获取当前Activity名和包名
adb shell dumpsys activity |find “mFocusedActivity” (注意这里用英文引号)
有一些手机,或者其他类型的终端,使用上面的命令行无法获取的时候,可以使用下面的命令行试试看:
1)查看当前Activity :adb shell “dumpsys window w | grep name=”
2)查看当前栈顶的Activity的Fragment :adb shell dumpsys activity your.package.name
或者:
adb shell dumpsys activity top
3)也可以使用Android Studio自带的Layout Inspector查看当前页面的调用栈:
在这里插入图片描述

(3)获取连续10次冷启动耗时 (用于测试应用冷启动时间)
adb shell am start -S -R 10 -W calculator.calculate.calcu/.calc.BasicCalculatorActivity
(4)卸载apk
直接卸载,adb uninstall com.clip.apk
保留数据,adb uninstall -k com.clip.apk
(5)启动一个Activity
直接启动,adb shell am start 包名 / 完整 Activity 路径
携带Intent参数启动,adb shell am start com.clip.apk/com.clip.apk.MainActivity -e name clip
启动隐式Intent,adb shell am start -a “android.intent.action.VIEW” -d “https://www.google.com”
(6)发送广播
直接发送,adb shell am broadcast -a “broadcastactionfilter”
携带Intent参数发送,db shell am broadcast -a “broadcastactionfilter” -e name clip
(7)启动服务
直接启动,adb shell am start 包名 / 完整 Service 路径
adb shell am startservice “com.clip.apk/com.clip.apk.ClipService”
(8)屏幕截图 - 一些较老的机型没有截屏快捷方式时特别好用
adb shell screencap /sdcard/screen.png 后面路径是存储截图路径(路径名+图片名)
(9)录制屏幕
使用 screenrecord [options] filename 命令来录制屏幕视频,如:
adb shell screenrecord /sdcard/clip.mp4 后面路径是存储录屏路径(路径名+文件名)
(10)查看应用签名信息 - 版本更新失败时,用于检查两次版本的签名信息是否相同。
apk放在桌面上,重命名.zip,解压缩得到其中META-INF文件夹中的CERT.RSA文件(放在桌面上);
adb命令行输入 keytool -printcert -file C:\Users\Administrator\Desktop\CERT.RSA
信息如下图: 可以看到应用的签名信息
在这里插入图片描述
(11)清除应用数据与缓存 - 一些测试手机不太熟悉操作时特别好用
adb shell pm clear 相当于手动点击清除数据和应用缓存
(12)查看正在运行的Service
adb shell dumpsys activity services []
参数不是必须的,指定 表示查看与某个包名相关的 Services,不指定表示查看所有 Services。
(13)查看应用详细信息 - 重点使用
adb shell dumpsys package
输出中包含很多信息,包括 Activity Resolver Table、Registered ContentProviders、包名、userId、安装后的文件资源代码等路径、版本信息、权限信息和授予状态、签名版本信息等。
(13.1)查看应用版本信息
adb shell pm dump com.xiaopeng.musicradio | findstr “version”
中间的com.xiaopeng.musicradio是包名,得到的结果如下:
versionCode=5965 minSdk=28 targetSdk=28
versionName=V1.4.0_dev
signatures=PackageSignatures{701827d version:2, signatures:[b4addb29], past signatures:[]}

(14)查看设备信息
型号 adb shell getprop ro.product.model
电池状况 adb shell dumpsys battery
屏幕分辨率 adb shell wm size
屏幕密度 adb shell wm density
android_id adb shell settings get secure android_id
Android 系统版本 adb shell getprop ro.build.version.release
IP 地址 adb shell ifconfig | grep Mask 或者 adb shell netcfg
内存信息 adb shell cat /proc/meminfo
CPU 信息 adb shell cat /proc/cpuinfo processor 的编号是 0 到 3,有几个就是几核
修改屏幕分辨率 adb shell wm size 480x1024 恢复 adb shell wm size reset 或者重启设备
(15)检测应用是否有context引起的内存泄露
在Terminal窗口输入命令 adb shell dumpsys meminfo 查看内存使用情况
重复,切换Activity,查看最终有几个Activity:
​​在这里插入图片描述
如图,最后回到一个页面,但是有2个,甚至多个Activity的,则肯定有Activity被长期持有了。
(16)Manifest merger failed with multiple errors, see logs问题处理
在这里插入图片描述
此时在Terminal窗口输入命令 gradlew processDebugManifest --stacktrace,其中,processDebugManifest是log里面提到的,这个命令是会了获取更多的log信息。比如:
在这里插入图片描述
可以看到Build失败是由于没有足够空间分配给JVM。
(17)compileDebugJavaWithJavac问题处理
Execution failed for task ‘:app:compileDebugJavaWithJavac’
导致此问题的原因有很多种,每种问题的解决方法也各不相同,最主要的地方还是要可以定位出问题的地方在哪里。这里可以借助adb命令行实现:
在Terminal窗口输入命令 gradlew compileDebugJavaWithJavac,得到的结果如图:
在这里插入图片描述
可以定位到,是由于对应库中的一个Activity导包失败导致的此问题。
(18)executing external native build for cmake问题处理
此为使用cmake编译C++代码时出现的问题,甚至直接利用AS构建含C++原生代码的项目时都会出现这个问题,此时可以输入gradlew build --stacktrace,用以追踪出错的地方。博主是定位到项目根目录下的gradle版本(3.1.2)不兼容,然后升级为3.2.1,即可编译通过。
(19)Android Studio - 编译debug捅过了, release却无法打包问题处理
做完一个新功能之后,有时会碰见debug编译通过,但打release包出错的问题,此时可以检查是否是混淆出错了,例如引入了一个新的依赖库,但是没有添加对应的依赖。如果确定不是混淆出错,此时可以输入:gradlew lint ,此命名行会花费大概几分钟的时间去检查代码,直至定位到出错的地方,可以在build下找到出错的文件,如:
在这里插入图片描述
可以直接定位到出错的代码,包括XML,定位到具体的行。

后续补充:

Android svc命令与自动化/压力测试
adb shell
svc help
svc指令可用于电源控制, 无线业务控制(modem/wifi/nfc/bt, etc), 等等.
可以不适用按键,触控设备, 而通过使用svc命令实现这些模块的功能操作,比如wifi的开关:
svc wifi enable //打开wifi
svc wifi disable //关闭wifi
svc data disable // 关闭蜂窝网络
svc data enable // 打开蜂窝网络
svc power stayon [true|false|usb|ac]
设置屏幕的常亮,true保持常亮,false不保持,usb当插入usb时常亮,ac当插入电源时常亮
因此, 对于涉及到这些模块的自动化测试和压力测试, 都可以使用svc命令, 来解放双手.

scrcpy——Android投屏神器(使用教程)
通过Scrcpy,可以USB或者WIFI进行终端连接调试
Failure [DELETE_FAILED_INTERNAL_ERROR]之后rm apk卸载
上面的命令可以进到shell内,去卸载普通uninstall命令无法卸载的apk
[adb WIFI连接终端调试] cannot connect to 192.168.137.137:5555: 由于目标计算机积极拒绝,无法连接。
Android 共享用户不兼容,安装失败 INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
慢慢更新中…
在这里插入图片描述
推荐一波其他好文:
参考脚本之家文章《android adb实用命令小结》
参考博客园文章《Android 常用 adb 命令总结》

在这里插入图片描述
补充一个知识点:
在这里插入图片描述
https://www.jianshu.com/p/a01bc1650dd4

GitHub 加速计划 / term / terminal
94.53 K
8.17 K
下载
The new Windows Terminal and the original Windows console host, all in the same place!
最近提交(Master分支:2 个月前 )
d04381ec "HighContrast" is not a possible requested theme. So `_UpdateBackgroundForMica()` would force the settings UI to be light or dark. To fix this, we just check if we're in high contrast mode and, if so, we don't bother setting the requested theme. 7 天前
e83434ff Turns out that having the styles for the KeyChordText and ParsedCommandLineText be empty for high contrast mode caused the issue. Since we're already using theme resources for the colors, we automatically adjust properly to whatever the high contrast theme is (Thanks XAML!). Bonus points: - we didn't need the theme dictionaries anymore, so I just moved them to the ResourceDictionary directly - ParsedCommandLineTextBlockStyle isn't used. So I removed it altogether. Validated command palette with multiple high contrast themes. See PR thread for demo. Closes #17914 7 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐