一、adb
1.adb是什么?
adb是什么?Android 调试桥 (adb) | Android 开发者 | Android Developers
2.adb的安装方法
3. P0必会
本文中所采用的测试app是从山智首页(http://www.anzhi.com/)下载的抖音apk,被个人命名为douyintest.apk。该apk被安装到测试手机后的包名为:com.ss.android.ugc.aweme。
1 | apk的安装命令 | adb install /Users/lsy/Downloads/douyintest.apk |
2 | app的卸载命令 | adb uninstall com.ss.android.ugc.aweme |
3 | 借助adb将电脑上的douyintest.apk推送到手机的/sdcard/目录下 | adb push /Users/lsy/Downloads/douyintest.apk /sdcard/ |
4 | 将手机里的/sdcard/atx-agent.log文件拉取到电脑的~/downloads目录下 | adb pull /sdcard/atx-agent.log ~/downloads |
5 | adb的截图命令 | adb shell screencap -p > sc.png adb shell screencap -p /sdcard/test.png && adb pull /sdcard/test.png ~/Desktop/ |
6 | adb的录屏命令:录制手机屏幕以 mp4 格式保存到 /sdcard: | adb shell screenrecord /sdcard/filename.mp4, 需要停止时按 Ctrl-C 将手机中的.mp4导出到电脑:adb pull /sdcard/filename.mp4 |
7 | adb命令查看某个app包名和对应的activity | adb shell dumpsys activity activities | grep mResumedActivity | awk '{print $4}' (注释:取第四列) |
11 | adb清除某个应用的缓存的命令 | 1.获取该应用包名;2. adb shell pm clear com.kwai.video |
12 | adb抓log命令 | adb logcat "*:W" | grep "test" 注: Mac需要加双引号,否则报错 Android 的日志分为如下几个优先级(priority):
按某级别过滤日志则会将该级别及以上的日志输出。 |
13 | adb进入设备目录sdcard内并且浏览设备目录命令 | (1)adb shell (2)cd sdcard (3)ls -a |
14 | adb查看设备型号和位数 | adb shell getprop ro.product.model 和adb shell getprop ro.product.cpu.abi armeabi-v7a(32位ARM设备) arm64-v8a(64位ARM设备) |
15 | adb执行monkey命令。Monkey 可以生成伪随机用户事件来模拟单击、触摸、手势等操作,可以对正在开发中的程序进行随机压力测试。 | adb shell monkey -p com.ss.android.ugc.aweme -v 500 Monkey 的详细用法参考 官方文档。 |
16 | 找到包含某字符串的包 | (1)adb shell pm list packages kuaishou (2) adb shell pm list packages | grep kuaishou |
17 | logcat的adb命令 | 使用adb logcat命令显示Android设备上的Log日志_峥嵘life的博客-CSDN博客_adb logcat |
19 | trim memory信号问题,这部分疑似手机需要hook,否则的话建议对app进行接口自动化的application或者activity的发送trim memory信号。 | 后台: (1)adb shell am send-trim-memory com.yxcorp.image.demo BACKGROUND (2)adb shell am send-trim-memory com.yxcorp.image.demo MODERATE (3)adb shell am send-trim-memory com.yxcorp.image.demo COMPLETE (4)adb shell am send-trim-memory com.yxcorp.image.demo HIDDEN 前台: (5)adb shell am send-trim-memory com.yxcorp.image.demo RUNNING_CRITICAL (6)adb shell am send-trim-memory com.yxcorp.image.demo RUNNING_LOW (7)adb shell am send-trim-memory com.yxcorp.image.demo RUNNING_MODERATE |
4. P1常用
1 | 利用adb命令启动app | 1.重点参照1.1获取包名和活动activity,/前面包名,后面activity。 2.(1)adb shell am start -n com.android.settings/com.android.settings.Settings (2)adb shell am start -n com.ss.android.ugc.aweme/.splash.SplashActivity |
2 | 利用adb命令杀死app | adb shell am force-stop com.ss.android.ugc.aweme(注:杀不死,后台应用仍然存在,假退出) |
4 | adb查看设备电池信息 | adb shell dumpsys battery |
5 | adb查看指定app的内存信息 | adb shell dumpsys meminfo com.ss.android.ugc.aweme |
6 | adb查看每个应用的内存上限 | adb shell cat /system/build.prop | grep dalvik.vm.heapsize(需要提权) 512< |
7 | adb查看系统最大内存 | adb shell cat /proc/meminfo MemTotal 就是设备的总内存,MemFree 是当前空闲内存。 |
8 | adb查看cpu实时使用情况 | adb shell top -m 10(-m显示最大数量,-s 按指定行排序) PID : progress identification,应用程序ID 使用pid值可以查看当前程序的内存使用情况。 |
9 | 利用pid通过adb查看指定程序内存使用情况 | 查看手机安装的360安全卫士:(1) adb shell (2) dumpsys meminfo 3253 dalvik : dalvik使用的内存 |
10 | adb查询手机型号 | adb shell getprop ro.product.model |
11 | adb查询手机系统 | adb shell "cat /system/build.prop | grep "product""(需要提权) |
12 | adb查询已安装app的版本号 | adb shell getprop ro.build.version.release |
13 | adb查询手机系统分辨率 | adb shell wm size |
14 | adb查询手机设备的ip地址 | adb shell ifconfig | grep Mask adb shell ip route | awk '{print $9}' |
15 | 利用adb命令重启手机设备 | adb reboot |
5. P2提高
1 | 设备与电脑之间建立Wi-Fi连接 | adb shell svc wifi enable |
2 | 设备与电脑直接断开Wi-Fi连接 | adb shell svc wifi disable |
3 | 利用adb命令进行schema跳转(微信为例) | adb shell am start -a android.intent.action.VIEW -d <schema> |
4 | 利用adb查看app在设备上的安装路径 | adb shell pm list packages -f |grep com.ss.android.ugc.aweme package:/data/app/com.ss.android.ugc.aweme-L3DnOYgMcBTfwSp5U5dbsQ==/base.apk=com.ss.android.ugc.aweme :到apk是路径 |
5 | adb模拟锁屏操作 | adb shell input keyevent 26 |
6 | adb模拟回到设备桌面操作,即模拟按home键 | adb shell input keyevent 3 keyevent指的是android对应的keycode,比如home键的keycode=3,back键的keycode=4. 具体请查阅 <android keycode详解> http://blog.csdn.net/huiguixian/article/details/8550170。 adb shell input keyevent 控制按键输入的数值。很全!!!!_shawn xie123的博客-CSDN博客_adb 输入数字 |
7 | adb模拟文本输入 | adb shell input text " <String>" |
8 | adb模拟屏幕滑动操作 | adb shell input swipe 300 1000 300 500(参数 300 1000 300 500 分别表示起始点x坐标 起始点y坐标 结束点x坐标 结束点y坐标。) |
9 | adb模拟点击事件 | adb shell input keyevent 3 adb shell input tap 250 250 |
10 | adb命令授权app相机、相册访问读写权限 | adb -d shell pm grant com.ss.android.ugc.aweme android.permission.CAMERA |
11 | adb移除app相机、相册访问读写权限命令 | adb -d shell pm revoke com.ss.android.ugc.aweme android.permission.CAMERA |
12 | adb的mount命令 mount后修改camera的对外读写权限为可读写 | adb shell "mount -o rw,dcim/camera" adb shell chmod 644 /storage/emulated/0/DCIM/Camera/20210629_174312.mp4 |
13 | 修改后试图删除camera目录下的一个视频文件 | adb shell rm -r /storage/emulated/0/DCIM/Camera/20210629_174312.mp4 |
14 | adb命令授权app通讯录访问权限 | adb -d shell pm grant com.ss.android.ugc.aweme android.permission.CALL_PHONE |
15 | adb命令授权app地理位置访问权限 | adb -d shell pm grant com.ss.android.ugc.aweme android.permission.ACCESS_FINE_LOCATION |
6. P3补充
补充链接:
1 | 查看内核日志 | adb shell dmesg (前提:需要提权到root权限) |
adb查询已安装app的版本号:adb shell getprop ro.build.version.release
ro.build.version.sdk | SDK 版本 |
ro.build.version.release | Android 系统版本 |
ro.build.version.security_patch | Android 安全补丁程序级别 |
ro.product.model | 型号 |
ro.product.brand | 品牌 |
ro.product .name | 设备名 |
ro.product.board | 处理器型号 |
ro.product.cpu.abilist | CPU 支持的 abi 列表[节注一] |
persist.sys.isUsbOtgEnabled | 是否支持 OTG |
dalvik.vm.heapsize | 每个应用程序的内存上限 |
ro.sf.lcd_density | 屏幕密度 |
授权字段
adb使用-详细教程(Awesome Adb)_Deryou的博客-CSDN博客_adb使用
Android中常用的adb shell命令_龙爷linux的博客-CSDN博客_adb shell
二、PerfDog
从应用商店分别下载「快手」和「抖音」app,针对同一动作(1s上滑1次,连续滑90s)用PerfDog测试二者的性能对比。
PerfDog说明书:PerfDog Community
补充链接:PerfDog性能狗(神器) - 何卫 - 博客园
1. 举例
-
测试「快手」视频切换播放的FPS、CPU、Memory指标。
快手出现过Jank(每秒卡顿数)=1的几次小卡顿,规范化的进程CPU占用率不是很稳定,但是内存使用情况整体比较稳定。
-
测试「抖音」视频切换播放的FPS、CPU、Memory指标。
从上面三个图可以发现,在1分05s的位置,抖音软件出现了一次每秒卡顿次数=2的卡顿,并且是严重卡顿,同时导致了抖音CPU占用率提升了将近10%。内存变化比较稳定。Memory(统计FootPrint)最高为581MB,FootPrint超过650MB,引发OOM。整机可用剩余内存逐渐减少。
-
进入PerfDog云后台,对比二者曲线,生成曲线图,得出性能对比结果。
CPU几乎平分秋色,内存状况快手好一些,卡顿状况快手都是小卡顿比较多,抖音小卡顿较少大卡顿存在,整体来说从帧率和卡顿状况来说抖音好一些。
- 分析性能对比结果,理解各指标含义。是否存在内存泄露? 是否存在卡顿情况?是否存在CPU过高情况?
三、Charles
charles:网络抓包工具,用来分析和调试移动端和服务端的网络通讯协议
1. Charles的安装
charles官方下载渠道 get
2. Charles的配置
比较简单,不在赘述
四、tidevice
1.tidevice是什么
- 阿里巴巴开源工具 https://github.com/alibaba/taobao-iphone-device
- 初识Tidevice - 简书
2.tidevice安装
pip3 install -U tidevice
3.tidevice的常用命令
功能 | 对应命令 |
---|---|
将某些文件从iphone中拖取到当前目录 | tidevice -u {设备序列号} fsync pull -B com.kwai.gifshow.beta1 /Documents/AppearVC ./ |
推资源到沙盒目录 | cmd = "tidevice -u {} fsync -B {} push '{}' '{}'".format(udid, package_name, file_src, file_dir) |
删除沙盒目录文件 | cmd = "tidevice -u {} fsync -B {} rmtree {} 2>&1".format(udid, package_name, file_dir) |
查询连接的设备 | tidevice list |
查询设备中的安装好的应用 | tidevice -u {设备序列号} applist |
截图 | tidevice screenshot screenshot.jpg |
启动苹果设置 | tidevice launch com.apple.Preferences |
获取设备的的UDID | idevice_id --list # 等同于idevice_id -l |
获取设备系统信息 | tidevice info # 返回的是设备信息 |
应用管理 | tidevice install example.ipa # 安装应用,可直接跟url地址 |
手机重启/关机 | tidevice reboot # 重启手机 |
获取设备日志 | idevicesyslog | grep 'test' # 获取设备日志 idevicesyslog | grep 'test' >> iphone.log & # 获取设备日志,并后台重定向到文件中 前提条件: brew install (-v) --HEAD (--fresh --build-from-source) libimobiledevice |
获取指定应用的性能(CPU、MEM、FPS) | tidevice perf -B 包名 # 阻塞式打印 |
模拟Xcode运行XCTest,启动WebDriverAgent测试(不依赖xcodebuild) | tidevice -u $UDID xctest -B $BUNDLE_ID $UDID为ios手机设备ID(可用tidevice list获取) $BUNDLE_ID为WebDriverAgentRunne的bundleid(可用tidevice applist获取) 举例tidevice -u udid xctest -B com.facebook.WebDriverAgentRunner.xctrunner -e USB_PORT:8100
tidevice -u udid 8100 8100 tidevice -u {udid} relay {local_port} 8100 iproxy {local_port} 8100 -u {udid} 注意uiautomator需要用这个, http://localhost:{local_port} |
更多内容 | iOS自动化常用命令 - python我学的很菜 - 博客园 |
五、Monkey
FASTBOT安卓:
https://github.com/zhangzhao4444/Maximhttps://github.com/zhangzhao4444/Maxim
FASTBOT iOS
https://github.com/bytedance/Fastbot_iOShttps://github.com/bytedance/Fastbot_iOS