• adb命令


    $提示符普通权限,#表示拥有root权限

    注:低版本的adb可能有一些问题,建议升级到最新的版本 

    https://developer.android.com/studio/releases/platform-tools

    更多adb命令,请查看:awesome-adb

    adb version  // 查看adb的版本信息

    adb shell wm size  // 查看手机的分辨率

    adb install d:abyclock.apk  // 安装d盘下的babyclock.apk文件到正在运行的android设备中   注:需要在开发者模式中打开“USB安装”开关

                                                     // -r 覆盖安装,保留数据和缓存文件;  -d 解决低版本version问题;  -s 安装apk到sd卡

    adb push c: est.txt /data/local  // 将C盘下的test.txt放到正在运行的android设备/data/local目录中

    adb push G: IntermediateAndroidAPKobjlocalarmeabi-v7alibUE4.so /sdcard/libUE4.so   // 拷贝PC上的libUE4.so到手机的/sdcard目录中

    adb pull /data/local/test.txt  // 将正在运行的android设备/data/local/test.txt文件传输到本地当前目录中

    adb uninstall com.babyclock  // 卸载babyclock应用(应用具体名称可在android设备的/data/data目录中去查看)

    adb uninstall -k com.babyclock // 卸载babyclock应用(-k表示保留配置与缓存文件)

    adb root // 以root方式重启adb(用于缺省非管理员权限的win7、win10系统)

    adb unroot // 以非root方式重启adb(用于缺省非管理员权限的win7、win10系统)

    adb remount  // 将system分区重新挂在为可读写分区

    adb reboot  // 重启设备

    adb reboot bootloader // 以刷机模式重启设备

    adb reboot recovery // 以恢复模式重启设备

    adb shell  // 在运行的android设备中执行shell命令(进入命令模式,用exit退出)

    adb -s RW9H8LJZDYEUWCV4  shell  // 进入ID码为RW9H8LJZDYEUWCV4的设备中执行shell命令

    adb -s 346d59dd shell "echo $EXTERNAL_STORAGE"  // 查询ID码为346d59dd的设备上外部存储器根目录  返回:/sdcard

    adb -s 346d59dd shell rm -r /sdcard/UE4Game/UAGameTest1  // 递归子目录删除346d59dd的设备上的/sdcard/UE4Game/UAGameTest1目录

    adb -s f2f53b9e  shell getprop ro.product.cpu.abi  // 获取cpu的架构   返回:arm64-v8a

    adb.exe -s f2f53b9e shell "echo 'APK: 2020/5/22 19:33:47' > /sdcard/UE4Game/UAGameTest1/APKFileStamp.txt"  // 把APK: 2020/5/22 19:33:47覆盖方式写入到/sdcard/UE4Game/UAGameTest1/APKFileStamp.txt

    // 将手机上/sdcard/UE4Game/UAGameTest1/Manifest_UFSFiles_Android.txt拷贝到PC上的G:svnUAGameTest1SavedStagedBuildsAndroid_ASTCManifest_UFSFiles_Android_346d59dd.txt
    adb.exe -s f2f53b9e pull /sdcard/UE4Game/UAGameTest1/Manifest_UFSFiles_Android.txt "G:svnUAGameTest1SavedStagedBuildsAndroid_ASTCManifest_UFSFiles_Android_346d59dd.txt"

    // 将手机上/sdcard/UE4Game/UAGameTest1/Manifest_NonUFSFiles_Android.txt拷贝到PC上的G:svnUAGameTest1SavedStagedBuildsAndroid_ASTCManifest_NonUFSFiles_Android_346d59dd.txt
    adb.exe -s f2f53b9e pull /sdcard/UE4Game/UAGameTest1/Manifest_NonUFSFiles_Android.txt "G:svnUAGameTest1SavedStagedBuildsAndroid_ASTCManifest_NonUFSFiles_Android_346d59dd.txt“

    adb.exe -s f2f53b9e shell cat /sdcard/UE4Game/UAGameTest1/APKFileStamp.txt  // 打印出 APK: 2020/5/22 19:33:47

    // 将PC上的G:svnUAGameTest1SavedStagedBuildsAndroid_ASTC中的内容拷贝到手机的/sdcard/UE4Game/UAGameTest1目录中
    adb.exe -s f2f53b9e push "G:svnUAGameTest1SavedStagedBuildsAndroid_ASTC" "/sdcard/UE4Game/UAGameTest1"

    // 删除手机上/sdcard/obb/com.tencent.mf.test1/main.1.com.tencent.mf.test1.obb文件
    adb.exe -s f2f53b9e shell rm /sdcard/obb/com.tencent.mf.test1/main.1.com.tencent.mf.test1.obb

    // 删除手机上/sdcard/obb/com.tencent.mf.test1/patch.1.com.tencent.mf.test1.obb文件
    adb.exe -s f2f53b9e shell rm /sdcard/obb/com.tencent.mf.test1/patch.1.com.tencent.mf.test1.obb

    adb.exe -s f2f53b9e shell am start -n com.tencent.mf.test1/com.epicgames.ue4.SplashActivity  // 启动com.tencent.mf.test1游戏

    adb.exe -s f2f53b9e shell am start -n "com.tencent.mf.test1/com.epicgames.ue4.SplashActivity" -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -D  // 启动com.tencent.mf.test1游戏

    adb shell pm list packages  // 查看所有安装的应用

    adb shell pm list packages -f // 查看所有安装应用所在路径

    adb shell pm list packages com.tencent.mf.test1  // 查看是否安装com.tencent.mf.test1应用

    adb shell dumpsys diskstats  // 查看手机存储空间占用情况

    adb shell ps -ux // 在运行的android设备中执行shell命令(ps -ux)

    adb shell ps | grep com.tencent.tmgp.pubgm // 查看android设备上名为com.tencent.tmgp.pubgm应用的进程信息,可获取进程ID

    adb shell ps | find /i "com.tencent.tmgp.pubgm"  // 查看com.tencent.tmgp.pubgm进程是否存在

    adb shell top -m 8 -d 1 -s cpu -t | egrep "(com.tencent.tmgp.pubgm|IOW|CPU%)"  // 查看com.tencent.tmgp.pubgm按cpu消耗降序排序的前8线程(刷新频率为1s)

    User 19%, System 10%, IOW 0%, IRQ 3%
    User 162 + Nice 0 + Sys 84 + Idle 554 + IOW 0 + IRQ 18 + SIRQ 7 = 825
    PID TID USER PR NI CPU% S VSS RSS PCY Thread Proc
    25672 30878 u0_a223 10 -10 6% S 1931316K 493784K ta RenderNico com.tencent.tmgp.pubgm
    25672 25701 u0_a223 10 -10 4% S 1931316K 493784K ta GameNico com.tencent.tmgp.pubgm
    25672 25918 u0_a223 10 -10 1% S 1931316K 493784K ta NativeThread com.tencent.tmgp.pubgm

    adb shell top -d 1 -s | egrep "(com.tencent.tmgp.pubgm|IOW|CPU%)"  // 查看com.tencent.tmgp.pubgm的进程信息(刷新频率为1s)

    User 15%, System 11%, IOW 0%, IRQ 2%
    User 344 + Nice 0 + Sys 250 + Idle 1522 + IOW 0 + IRQ 41 + SIRQ 13 = 2170
    PID USER PR NI CPU% S #THR VSS RSS PCY Name
    25672 u0_a223 10 -10 15% S 100 1933236K 504644K ta com.tencent.tmgp.pubgm

    adb shell kill 1535  // 杀掉pid为1535的进程

    adb shell free -k  // 以KB为单位显示系统当前内存占用

    adb shell cat /proc/meminfo  // 查看系统当前更详细的内存占用

    MemTotal:所有可用RAM大小。
    MemFree:LowFree与HighFree的总和,被系统留着未使用的内存。
    Buffers:用来给文件做缓冲大小。
    Cached:被高速缓冲存储器(cache memory)用的内存的大小(等于diskcache minus SwapCache)。
    SwapCached:被高速缓冲存储器(cache memory)用的交换空间的大小。
            已经被交换出来的内存,仍然被存放在swapfile中,用来在需要的时候很快的被替换而不需要再次打开I/O端口。
    Active:在活跃使用中的缓冲或高速缓冲存储器页面文件的大小,除非非常必要,否则不会被移作他用。
    Inactive:在不经常使用中的缓冲或高速缓冲存储器页面文件的大小,可能被用于其他途径。
    SwapTotal:交换空间的总大小。
    SwapFree:未被使用交换空间的大小。
    Dirty:等待被写回到磁盘的内存大小。
    Writeback:正在被写回到磁盘的内存大小。
    AnonPages:未映射页的内存大小。
    Mapped:设备和文件等映射的大小。
    Slab:内核数据结构缓存的大小,可以减少申请和释放内存带来的消耗。
    SReclaimable:可收回Slab的大小。
    SUnreclaim:不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)。
    PageTables:管理内存分页页面的索引表的大小。
    NFS_Unstable:不稳定页表的大小。

    adb shell cat  /proc/cupinfo // 查看系统cpu信息

    adb shell cat  /proc/stat // 查看cpu占用情况

    adb shell cat /proc/31530/status    // 查看pid为31530的进程的状态

    Name: MainThread-UE4
    Umask: 0077
    State: S (sleeping)
    Tgid: 31530
    Ngid: 0
    Pid: 31530
    PPid: 698
    TracerPid: 0
    Uid: 10513 10513 10513 10513
    Gid: 10513 10513 10513 10513
    FDSize: 256
    Groups: 3001 3002 3003 9997 20513 50513
    VmPeak: 8234340 kB  // 虚拟地址空间峰值
    VmSize: 8072764 kB   // 虚拟地址空间大小
    VmLck: 0 kB
    VmPin: 0 kB
    VmHWM: 542204 kB
    VmRSS: 480152 kB
    RssAnon: 193292 kB
    RssFile: 285684 kB
    RssShmem: 1176 kB
    VmData: 1922072 kB
    VmStk: 8192 kB
    VmExe: 28 kB
    VmLib: 332512 kB
    VmPTE: 2840 kB
    VmSwap: 8408 kB
    CoreDumping: 0
    Threads: 117   // 共创建117个线程
    SigQ: 0/29011
    SigPnd: 0000000000000000
    ShdPnd: 0000000000000000
    SigBlk: 0000000080001204
    SigIgn: 0000000000001001
    SigCgt: 0000000e400084f8
    CapInh: 0000000000000000
    CapPrm: 0000000000000000
    CapEff: 0000000000000000
    CapBnd: 0000000000000000
    CapAmb: 0000000000000000
    NoNewPrivs: 0
    Seccomp: 2
    Speculation_Store_Bypass: thread vulnerable
    Cpus_allowed: ff
    Cpus_allowed_list: 0-7
    Mems_allowed: 1
    Mems_allowed_list: 0
    voluntary_ctxt_switches: 154686
    nonvoluntary_ctxt_switches: 20269

    adb shell cat  /sys/devices/system/cpu/possible // 查看cpu的核数  返回0-7表示当前cpu为8核

    adb shell procrank  // ①获取所有进程内存使用的排行榜(需root权限,否则会显示empty)②输出手机的整个内存使用信息

    <empty>

    ZRAM: 0K physical used for 464008K in swap (2097148K total swap)
    RAM: 7806540K total, 2424876K free, 1268K buffers, 1432820K cached, 9952K shmem, 390424K slab

    adb shell uname -a  // 查看linux内核信息

    Linux localhost 4.19.81-18334340 #1 SMP PREEMPT Wed Apr 1 20:04:36 KST 2020 aarch64

    adb shell cat /proc/version  // 查看更详细的linux内核信息

    Linux version 4.19.81-18334340 (dpi@SWDH7011) (clang version 8.0.12 for Android NDK) #1 SMP PREEMPT Wed Apr 1 20:04:36 KST 2020

    adb shell vmstat  // 实时动态监视操作系统的虚拟内存和cpu活动

    procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
    r b swpd free buff cache si so bi bo in cs us sy id wa
    1 0 857988 482796 5916 4104428 1 3 114 169 0 1530 8 6 86 0

    adb shell cat  /sys/class/net/wlan0/address // 获取手机wlan mac地址

    adb shell run-as com.tencent.tmgp.pubgm cat /proc/26218/limits  // 查看pid为26218的进程限值

    Limit       Soft Limit     Hard Limit     Units
    Max cpu time   unlimited      unlimited      seconds
    Max file size    unlimited      unlimited      bytes
    Max data size    unlimited      unlimited      bytes
    Max stack size  8388608       unlimited      bytes
    Max core file size 0          unlimited      bytes
    Max resident set   unlimited     unlimited      bytes
    Max processes  22097       22097        processes
    Max open files  4096       4096        files
    Max locked memory 67108864    67108864         bytes
    Max address space unlimited      unlimited      bytes
    Max file locks unlimited        unlimited      locks
    Max pending signals 22097      22097       signals
    Max msgqueue size 819200       819200        bytes
    Max nice priority   40      40
    Max realtime priority  0                   0
    Max realtime timeout unlimited       unlimited                 us

    adb shell cat /proc/sys/kernel/threads-max   // 查看一个进程创建线程数目的上限   需要root权限

    adb shell run-as com.tencent.tmgp.pubgm cat /proc/26218/maps  // 查看pid为26218的进程的模块信息

    adb shell run-as com.tencent.tmgp.pubgm cat /proc/26218/task/20438/status // 查看pid为26218的进程中的线程id为20438的详细信息

    adb shell getprop | grep heapgrowthlimit  // 查看单个应用的java虚拟机堆内存上限值

    adb shell cat /system/build.prop | grep dalvik.vm  // 另一种方法查看单个应用的java虚拟机堆内存上限值

    dalvik.vm.heapgrowthlimit和dalvik.vm.heapsize都是java虚拟机的最大内存限制,
    应用如果不想在dalvikheap达到heapgrowthlimit限制的时候出现OOM(Out Of Memory,OutOfMemoryError),
    需要在Manifest中的application标签中声明android:largeHeap=“true”,
    声明后应用dalvik heap达到heapsize的时候才会出现OOM

    除了上面之外,还有以下情况也会出现OOM的报错:

    ① 超过Max open files限制

    触发大量网络连接(每个连接处于独立的线程中)并保持,每打开一个socket都会增加一个fd(/proc/pid/fd下多一项)
    注:不只有这一种增加fd数的方式,也可以用其他方法,比如打开文件,创建handlerthread等等

    ② 线程数超限

    ③ 虚拟地址空间不足   // 对于armv7 32位游戏,总地址空间为4GB,用户空间为3GB

    adb shell dumpsys meminfo com.tencent.tmgp.pubgm // 查看android设备上名为com.tencent.tmgp.pubgm应用的内存信息

    VSS : Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
    RSS : Resident Set Size 实际使用物理内存(包含共享库占用的内存)
    PSS : Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
    USS : Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
    USS 是针对某个进程开始有可疑内存泄露的情况,是一个程序启动了会产生的虚拟内存,一旦这个程序进程杀掉就会释放。不过USS需要通过root的手机

    ① Heap Size、Heap Alloc、Heap Free分别表示历史分配最大值、当前占用的值和可用的值

        Native Heap、Dalvik Heap为通过操作系统分配的内存(malloc分配的native对象)和通过虚拟机分配的内存 (java对象)

    ② Shared | Private表示内存是否被共享。被共享过则为Shared,否则为Private

        Dirty | Clean表示内存是否被修改过。被修改过则为Dirty,否则为Clean 

        Shared Dirty:应用进程间共享的写时复制的内存。如:系统库在堆上申请的结构实例

        Private Dirty:进程中不能被换出的内存,不与其他进程共享,当进程结束,这部分内存立刻被释放。如:应用在堆上分配的结构实例。手机上是没有SWAP的,所以这部分内存会一直常驻内存。

        Shared Clean:共享代码段。如:系统库,boot.vdex、libboost.so

        Private Clean:私有代码段。如:应用自己的库,class.dex、libUE4.so

        Swap Dirty:基于性能考虑,Android系统不会将Private Dirty的内存交换到磁盘上,而是使用zram机制压缩部分Private Dirty不常用的物理内存。

    ③ Ashmem:/dev/ashmem   进程的匿名共享内存(Anonymous Shared Memory) 除了DVM以外通过asmmem_create_region函数申请的内存映射空间。如:SurfaceFlinger

         Gfx dev:/dev/kgsl-3d0   显存。通常是gpu上资源,如:texture、buffer、shader

         Other dev:/dev/*   如:Android属性系统服务和进程间通信的binder机制所用到的设备文件内存映射

        .so mmap:so动态链接库  如:/system/lib64/libstdc++.so

        .jar mmap:java动态链接库   如:/system/framework/framework.jar

        .apk mmap:apk映射  如: /system/framework/framework-res.apk

        .ttf mmap:字库  如:/system/fonts/Roboto-BlackItalic.ttf

        .dex mmap:dex字节码   如:/system/framework/boot.vdex

        .oat mmap:oat机器码   如:/system/framework/arm64/boot-ext.oat

        .art mmap:art字节码   如:/system/framework/arm64/boot.art

         Other mmap:其他非匿名内存映射的内容。如:Android框架动态链接库/system/framework/*.odex、unicode编码动态链接库/system/usr/*.dat、栈[stack]、

                                [vectors]ARM特有的东西、代码段/system/bin/app_process、运行时链接器/system/bin/linker

         EGL mtrack:读取进程在GPU上分配的内存

         GL mtrack:读取进程在GPU上分配的内存

         Unknown:匿名内存映射:图形驱动、窗口surfaces、音频缓冲、mmap方式的内存分配

    ④ Java Heap:Dalvik Heap(Private Dirty) // 包含任何写过zygote分配的页面(应用是从zygote fork 出来的)和应用本身分配的。

                             + .art mmap(Private Dirty  & Private Clean)  // 应用的bootimage,任何private页面也算在应用上。

         Native Heap:Native Heap(Private Dirty)  // 通过libc_malloc库分配的大小

         Code:.所有私有静态资源求和

                    =  so mmap(Private Dirty & Private Clean) +  .jar mmap(Private Dirty & Private Clean) + .apk mmap(Private Dirty & Private Clean)

                      + .ttf mmap(Private Dirty & Private Clean)+ .dex mmap(Private Dirty & Private Clean)+ .oat mmap(Private Dirty & Private Clean)

         Stack:Stack(Private Dirty)  // 进程栈占用的大小

         Graphics:进程在GPU上分配的内存

                   = Gfx dev(Private Dirty & Private Clean) +  .EGL mtrack(Private Dirty & Private Clean) + GL mtrack(Private Dirty & Private Clean)

         Private Other: Dalvik Other(Private Dirty & Private Clean) +  .Ashmem(Private Dirty & Private Clean) + Other dev(Private Dirty & Private Clean)

                                 +  Other mmap(Private Dirty & Private Clean)+ Unknown(Private Dirty & Private Clean)

         System:Pss Total - Java Heap - Native Heap - Code - Stack - Graphics - Private Other

    cat /d/kgsl/proc/30968/mem | grep ion   // 查看pid为30968的Graphic相关的内存数据   注:需root权限

    adb shell dumpsys SurfaceFlinger  // 显示android设备的Surface信息

    adb shell dumpsys SurfaceFlinger --list // 显示android设备的获取可视窗口列表

    adb shell dumpsys SurfaceFlinger | grep com.tencent.tmgp.pubgm // 获取com.tencent.tmgp.pubgm的Surface信息

    adb shell dumpsys SurfaceFlinger --latency com.tencent.tmgp.pubgm/com.epicgames.ue4.GameActivity  // 获取com.tencent.tmgp.pubgm应用的帧时延数据

    第1行为设备本身固有的帧耗时,单位为ns,通常在16.7ms左右
    从第2行开始,分为3列,一共有127行,代表每一帧的几个关键时刻,单位也为ns
    第1列t1: when the app started to draw (开始绘制图像的瞬时时间)
    第2列t2: the vsync immediately preceding SF submitting the frame to the h/w (VSYNC信令将软件SF帧传递给硬件HW之前的垂直同步时间)
    第3列t3: timestamp immediately after SF submitted that frame to the h/w (SF将帧传递给HW的瞬时时间,及完成绘制的瞬时时间)

    将第i行和第i-1行t2相减,即可得到第i帧的绘制耗时

    16666666
    0 0 0
    0 0 0
    ... ...
    0 0 0
    418243456489096 418243468251857 418243457645242
    418243480331232 418243484980451 418243481196024
    418243577706857 418243585352586 418243579044565
    418318173790110 418318176869276 418318174024745
    418326274237294 418326288588388 418326275332919

    adb shell dumpsys gfxinfo com.tencent.tmgp.pubgm  // 查看android设备上名为com.tencent.tmgp.pubgm应用的图形信息

                                                                                    // 注:开发者选项中有个“ GPU呈现模式分析(ProfileGPU rendering)”功能,在开启该功能后,系统就会记录保留每个界面最后128帧图像绘制的相关时间信息

    adb shell dumpsys batterystats com.tencent.tmgp.pubgm >d:1.log  // 获取单个应用的电量消耗信息,并写入到d:1.log文件中

                                      // 可通过google编写的historian.py脚本把数据信息转换为可读性很好的html文件,类似TraceView生成的列表数据

                                      // python historian.py xxx.txt > xxx.html

    adb shell dumpsys procstats com.tencent.tmgp.pubgm   // 输出系统内存使用、Pre Package统计、App进程信息、运行时间统计、内存使用统计、PSS收集统计等

    adb shell dumpsys statusbar  // 查看那些应用占据了状态栏

    adb shell dumpsys activity a  // 查看activity详细信息

    adb shell dumpsys input | grep Focus  // 查看焦点窗口

    adb shell dumpsys window windows  // 查看所有windows信息

    adb shell dumpsys window windows | findstr /i "mCurrent"  // 获得当前活动窗口的信息

    adb shell cat /sys/class/thermal/thermal_zone0/temp  // 查看当前手机的温度

    adb shell sqlite3  // 在运行的android设备中执行shell命令(sqlite3:进入sqlite数据库)

    adb shell cd /data/local;ls  // 在运行的android设备中执行shell命令(先执行cd /data/local,再执行ls命令

    adb shell su -c 'cp /sdcard/libUE4.so /data/app/com.tencent.tmgp.pubgm-1/lib/arm/libUE4.so' // 使用root权限将手机/sdcard目录中libUE4.so拷贝到/data/app/com.tencent.tmgp.pubgm-1/lib目录中

    adb forward tcp:6100 tcp:7100  // 建立从主机端口6100到Android设备端口7100的转发

    adb shell getprop  // 查看手机设备等信息

    adb shell getprop ro.build.version.release // 获取当前Android手机的系统版本  如返回:9  // 当前手机系统为Android 9

    adb shell getprop ro.build.version.sdk  // 获取当前Android手机的API版本  如返回:28  // 当前手机的API版本为28

    adb logcat -c // 清除缓存区中日志

    adb logcat  // 显示所有日志

    adb logcat *:V  // 详细模式显示所有日志

                            // V — 详细(最低优先级)
                            // D — 调试
                            // I — 信息(缺省)
                            // W — 警告
                            // E — 错误
                            // F — 致命
                            // S — 静默(最高优先级,不会打印任何内容)

    adb logcat -v time -s Test > d:ww1.log  // 打印出log信息中的时间并且包含关键字 “Test” 的所有log以覆盖写的方式输出到d:ww1.log文件中

    adb logcat UE4:V DEBUG:V *:S -v tag // 过滤TAG为UE4输出级别大于V的日志与TAG为DEBUG输出级别大于V的日志,同时输出tag内容

    方法 说明
    Log.v(String tag,String text) 显示全部(vervbose)信息
    Log.d(String tag,String text) 显示调试(debug)信息
    Log.i(String tag,String text) 显示一般(information)信息
    Log.w(String tag,String text) 显示警告(waning)信息
    Log.e(String tag,String text) 显示错误(error)信息


    adb -s RW9H8LJZDYEUWCV4 logcat >d:ww1.log
    // 连接ID码为RW9H8LJZDYEUWCV4的设备,并将log输出到d:ww1.log文件中

    adb shell dumpsys package com.tencent.tmgp.pubgm  // 查看app相关所有信息,包括action,codepath,version,需要的权限等等信息

    aapt dump badging NZGame-Android-Shipping-armv7-es2.apk  // 查看NZGame-Android-Shipping-armv7-es2.apk版本号、权限等详细信息(版本号为:$versionName$.$versionCode$)

    aapt dump badging NZGame-armv7-es2.apk | grep -c application-debuggable  // 查看NZGame-armv7-es2.apk是否可调式(debuggable)   1表示可调式,0为不可调式

    AndroidManifest.xml中application标签中将debuggable设为true

    <manifest xmlns:android="http://schemas.android.com/apk/res/android" ...>
         <application android:debuggable="true" ...>

    adb shell pm path com.tencent.tmgp.pubgm  // 查看app的安装路径

    adb shell "am broadcast -a android.intent.action.RUN -e cmd 'stat fps'"  // 向设备发送一条广播,内容为stat fps

    adb shell chmod 777 /data/local/tmp/gdbserver  // 为gdbserver增加可执行权限

    adb shell su -c 'chmod 777 /data/data/com.tencent.tmgp.pubgm/gdbserver'  // 使用root为gdbserver增加可执行权限

    adb shell run-as com.tencent.tmgp.pubgm  // 进入应用的私有目录:/data/data/com.tencent.tmgp.pubgm

    adb shell run-as com.tencent.tmgp.pubgm ls -li /data/data/com.tencent.tmgp.pubgm

    // com.tencent.tmgp.pubgm(app必须是debuggable)不需要root权限情况下,查看自己私有目录下的文件信息

    adb shell run-as com.tencent.tmgp.pubgm killall -9 gdbserver  // 结束所有名为gdbserver的进程

    adb shell run-as com.tencent.tmgp.pubgm ls -l /proc/9122/fd  // 列出com.tencent.tmgp.pubgm进程(pid为9122)打开的文件列表(句柄数)

    adb shell ulimit -n  // 查看当前系统下进程的句柄数上限

    adb devices  // 查看正在运行的android设备

    adb -s emulator-5554 install d:helloWorld.apk  // 安装d盘下的helloWorld.apk文件到名为emulator-5554的android设备中

    adb shell am force-stop com.tencent.tmgp.pubgm  // 结束所有用户空间下的包名com.tencent.tmgp.pubgm相关的信息

    adb shell am dumpheap com.tencent.tmgp.pubgm /data/local/tmp/test.hprof  // 保存com.tencent.tmgp.pubgm的java虚拟机内存文件test.hprof到/data/local/tmp目录中

                    adb shell mv /data/local/tmp/test.hprof /storage/emulated/0/Download  // 移动test.hprof文件到内置sd卡的Download目录中,然后连上数据线就可以拷贝到电脑中

                    hprof-conv D: emp est.hprof D:com.tencent.tmgp.pubgm_mat.hprof  // 转换hprof文件为MemoryAnalyzer工具能解析的hprof文件格式  注:hprof-conv在android-sdk-windowsplatform-tools目录中

    adb shell screencap -p /sdcard/screen.png  // 截屏并screen.png并保存到手机的/sdcard目录下

    adb pull /sdcard/screen.png ./   // 将手机的/sdcard/screen.png拷贝到PC上的当前目录

    adb shell rm /sdcard/screen.png  // 删除手机的/sdcard/screen.png文件

    adb shell screenrecord  --time-limit 10 --size 1280x720 --bit-rate 6000000 /sdcard/demo.mp4 //录制一个名为demo.mp4分辨率为1280*720比特率为6Mbps的10s视频,并保存在手机的/sdcard目录下

    注1:支持Android4.4(API level 19)以上

    注2:默认录制时间为180s,默认使用手机的分辨率,默认比特率为4Mbps

    注3:某些设备可能无法直接录制,原因是分辨率太高,如果遇到此类问题,请试着指定较低的分辨率

    注4:不支持录制过程中屏幕旋转,如果录制过程中旋转,有可能画面被切断

    注5:录制视频的时候声音不会被录下来

    run-as com.tencent.mf.uam pmap -x 31530 | grep -E 'Address|libUE4.so|[stack]|----------------|total'   // 查看pid为31530,应用为com.tencent.mf.uam过滤信息为Address或libUE4.so或[stack]或----------------或total的内存映射信息

    run-as com.tencent.mf.uam cat /proc/31530/maps | grep -E 'libUE4.so|[stack]'  // 查看pid为31530,应用为com.tencent.mf.uam过滤信息为libUE4.so或[stack]的内存映射信息

    run-as com.tencent.mf.uam showmap -a 8027 | grep -E 'start|addr|--------|libUE4.so|[stack]|TOTAL' // 查看pid为8027,应用为com.tencent.mf.uam过滤信息为start或addr或--------或libUE4.so或[stack]或TOTAL的内存映射信息

    run-as com.tencent.mf.uam lsof -p 31530 | grep -E 'COMMAND|libUE4.so|.log|socket'   // 查看pid为31530,应用为com.tencent.mf.uam过滤信息为COMMAND或libUE4.so或.log或socket的文件信息

    adb shell export  // 查看当前手机的所有系统级环境变量

    ANDROID_ASSETS
    ANDROID_BOOTLOGO
    ANDROID_DATA
    ANDROID_ROOT
    ANDROID_RUNTIME_ROOT
    ANDROID_SOCKET_adbd
    ANDROID_STORAGE
    ANDROID_TZDATA_ROOT
    ASEC_MOUNTPOINT
    BOOTCLASSPATH
    DEX2OATBOOTCLASSPATH
    DOWNLOAD_CACHE
    EXTERNAL_STORAGE
    HOME
    HOSTNAME
    LOGNAME
    PATH
    SHELL
    SYSTEMSERVERCLASSPATH
    TERM
    TMPDIR
    USER

    adb shell set  // 查看当前手机的所有系统级环境变量及其数值

    ANDROID_ASSETS=/system/app
    ANDROID_BOOTLOGO=1
    ANDROID_DATA=/data
    ANDROID_ROOT=/system
    ANDROID_RUNTIME_ROOT=/apex/com.android.runtime
    ANDROID_SOCKET_adbd=19
    ANDROID_STORAGE=/storage
    ANDROID_TZDATA_ROOT=/apex/com.android.tzdata
    ASEC_MOUNTPOINT=/mnt/asec
    BASHPID=20429
    BOOTCLASSPATH=/apex/com.android.runtime/javalib/core-oj.jar:/apex/com.android.runtime/javalib/core-libart.jar:/apex/com.android.runtime/javalib/okhttp.jar:/apex/com.android.runtime/javalib/bouncycastle.jar:/apex/com.android.runtime/javalib/apache-xml.jar:/system/framework/framework.jar:/system/framework/ext.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/miuisdk@boot.jar:/system/framework/miuisystemsdk@boot.jar:/system/framework/android.test.base.jar:/system/framework/tcmiface.jar:/system/framework/telephony-ext.jar:/system/framework/com.nxp.nfc.nq.jar:/system/framework/QPerformance.jar:/system/framework/UxPerformance.jar:/system/framework/WfdCommon.jar:/system/framework/hydra.jar:/apex/com.android.conscrypt/javalib/conscrypt.jar:/apex/com.android.media/javalib/updatable-media.jar
    COLUMNS
    DEX2OATBOOTCLASSPATH=/apex/com.android.runtime/javalib/core-oj.jar:/apex/com.android.runtime/javalib/core-libart.jar:/apex/com.android.runtime/javalib/okhttp.jar:/apex/com.android.runtime/javalib/bouncycastle.jar:/apex/com.android.runtime/javalib/apache-xml.jar:/system/framework/framework.jar:/system/framework/ext.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/ims-common.jar:/system/framework/miuisdk@boot.jar:/system/framework/miuisystemsdk@boot.jar:/system/framework/android.test.base.jar:/system/framework/tcmiface.jar:/system/framework/telephony-ext.jar:/system/framework/com.nxp.nfc.nq.jar:/system/framework/QPerformance.jar:/system/framework/UxPerformance.jar:/system/framework/WfdCommon.jar:/system/framework/hydra.jar
    DOWNLOAD_CACHE=/data/cache
    EPOCHREALTIME=1609385251.695699
    EXTERNAL_STORAGE=/sdcard
    HOME=/
    HOSTNAME=umi
    IFS=$' '
    KSHEGID=2000
    KSHGID=2000
    KSHUID=2000
    KSH_VERSION='@(#)MIRBSD KSH R57 2019/03/01 Android'
    LINES
    LOGNAME=shell
    OPTIND=1
    PATH=/sbin:/system/sbin:/product/bin:/apex/com.android.runtime/bin:/system/bin:/system/xbin:/odm/bin:/vendor/bin:/vendor/xbin
    PATHSEP=:
    PGRP=20429
    PIPESTATUS=0
    PPID=8211
    PS1='$ '
    PS2='> '
    PS3='#? '
    PS4='+ '
    PWD=/
    RANDOM=14876
    SECONDS=0
    SHELL=/system/bin/sh
    SYSTEMSERVERCLASSPATH=/system/framework/services.jar:/system/framework/ethernet-service.jar:/system/framework/wifi-service.jar:/system/framework/com.android.location.provider.jar
    TERM=xterm-256color
    TMOUT=0
    TMPDIR=/data/local/tmp
    USER=shell
    USER_ID=2000

    adb shell export $PATH   // 查看当前系统的$PATH环境变量

    /sbin:/system/sbin:/product/bin:/apex/com.android.runtime/bin:/system/bin:/system/xbin:/odm/bin:/vendor/bin:/vendor/xbin

    export test1=hello!  //为当前shell设置环境变量   注:必须先通过adb shell进入一个shell实例

    https://www.jianshu.com/p/0693b841c83b

    https://developer.android.com/studio/command-line/adb.html

    https://mazhuang.org/awesome-adb

    https://github.com/mzlogin/awesome-adb

    https://developer.android.com/studio/releases/platform-tools

    https://github.com/aosp-mirror/platform_system_core/tree/master/adb

    https://android.googlesource.com/platform/system/core/+/master/adb/

    https://www.jb51.net/article/112562.htm?&_=1523982707733

    https://blog.csdn.net/feelabclihu/article/details/105534175

  • 相关阅读:
    PHP中laravel拼接原生语句使用find_in_set
    PHP合并某个字段相同的数组,并重组数据算法
    ajax结合php简单的城市三级联动
    简单的qq第三方登录的实现
    laravel设置子域名
    如何在闹钟响时马上起床
    Badminton-playing robot and energy efficiency software
    [阅读技巧] 快速阅读之二 进一步提升阅读资料的速度
    [阅读技巧] 快速阅读入门
    [动态规划] 放置街灯 Uva 10859
  • 原文地址:https://www.cnblogs.com/kekec/p/13522002.html
Copyright © 2020-2023  润新知