一、安装步骤
1.安装homebrew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2.安装adb
brew cask install android-platform-tools
3.启动adb
adb devices
遇到的问题:
启动adb后找不到设备的情况:
命令行输入system_profiler SPUSBDataType,找到Vendor ID,将VendorID的值写入/.android/adb_usb.ini,然后使用adb kill-server 、adb start-server 、
adb devices
这里安卓手机除了设置文件传输外,还需要打开开发者模式
二、常用命令:
1.查看应用包名
adb shell dumpsys activity | grep MAIN
2.手机启动应用后,打印出当前窗口应用
adb shell dumpsys window windows | grep -E 'mFocusedApp'
3.获取手机的序列号
adb get-serialno
4.安装应用到手机
adb -s device_id(上一步的序列号) install -r apk_path
如:adb -s 034c6aa3094b6c54 install -r ~/Downloads/jokeEssay.apk
5.卸载手机上的应用
adb (-s deviceid) uninstall packagename
6.启动手机应用
adb shell am start -n (-W 看启动时间)packagename/packagename+classname(-n classname,-a action,-d date,-m MIME-TYPE,-c category,-e 扩展数据
7.观察应用Mem情况
adb shell dumpsys meminfo packagename
Native Heap :本地堆内存占用 (如果程序中大量使用了 JNI 的相关,则需要关注)
Dalvik Heap :虚拟机内存占用 (java 申请的内存、包括webview、bitmap等。测试关注)
注:
JNI是什么?
JNI即Java Native Interface(Java本地接口),是一个协议,主要作用为:实现Java调用c/c++代码(类库),或者C/C++调用Java代码
重点关注上面截图中红框框出来的部分,其中的参数含义:
Naitve Heap Size: 从mallinfo usmblks获得,代表最大总共分配空间
Native Heap Alloc: 从mallinfo uorblks获得,总共分配空间
Native Heap Free: 从mallinfo fordblks获得,代表总共剩余空间
Native Heap Size 约等于Native Heap Alloc + Native Heap Free
mallinfo是一个C库, mallinfo 函数提供了各种各样的通过C的malloc()函数分配的内存的统计信息。
Dalvik Heap Size:从Runtime totalMemory()获得,Dalvik Heap总共的内存大小。
Dalvik Heap Alloc: Runtime totalMemory()-freeMemory() ,Dalvik Heap分配的内存大小。
Dalvik Heap Free:从Runtime freeMemory()获得,Dalvik Heap剩余的内存大小。
Dalvik Heap Size 约等于Dalvik HeapAlloc + Dalvik Heap Free
参考链接:https://www.jianshu.com/p/67c4f0dde528
如果Native/Dalvik Heap 信息中的Heap Alloc的值一直增长,则可能出现了内存泄漏。
JVM管理的内存可以总体划分为两部分:Heap Memory和Native Memory。
Heap Memory是供Java应用程序使用的,后者也称为C-Heap,是供JVM自身进程使用的。
按照官方的说法:“Java 虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此处分配。堆是在 Java 虚拟机启动时创建的。”“在JVM中堆之外的内存称为非堆内存(Non-heap memory)”
heap空间完全由程序员控制,我们使用的malloc、C++ new和java new所申请的空间都是heap空间, C/C++申请的内存空间在native heap中,而java申请的内存空间则在dalvik heap中。
8.观察CPU情况
adb shell dumpsys cpuinfo | grep packagename
9.获取应用uid pid
PID:adb shell ps | grep packagename | awk 'END {print $2}' #PID就是各进程的身份标识,程序一运行系统就会自动分配给进程一个独一无二的PID
UID:adb shell cat /proc/$PID/status | grep Uid | awk '{print $2}' #一般理解为User Identifier,UID在linux中就是用户的ID,表明时哪个用户运行了这个程序,主要用于权限的管理
10.截图
adb shell screencap -p /sdcard/screen.png后者是保存路径和保存名字
推送至电脑:adb pull /sdcard/screen.png推送至电脑当前开启adb的路径
11.查看日志
adb logcat <tag>:[priority]










网友评论