Android中常用的adb shell命令

2022-07-01 15:06:56 浏览数 (1)

大家好,又见面了,我是你们的朋友全栈君。

注意事项

代码语言:javascript复制
这里写的命令,网页可能会重新编辑格式,比如我写了两个减号,发布后变成了一个减号;
如果这里的命令不能正确执行,请手动输入命令,切记切换英文状态。
android 常用shell命令记录下来备忘
n 在shell命令中的作用是换行(而rn会将一个二进制文件格式从unicode变为混合格式)
& 可以用来连接多个命令
-help 可以快速知道一个命令怎么用的
比如adb -help 可以知道adb的用法

参考文章 https://github.com/mzlogin/awesome-adb

设置adb环境变量

代码语言:javascript复制
其实就是将adb.exe的路径放到Path中,目的是cmd直接可以使用adb命令
比如我的adb.exe路径G:toolsadt-bundlesdkplatform-toolsadb.exe
我的电脑》高级》设置》环境变量》Path》增加G:toolsadt-bundlesdkplatform-tools

(注意不要adb.exe) ##检测环境变量

代码语言:javascript复制
打开cmd窗口,输入adb看效果
如果出现一堆adb信息说明配置成功         
如果出现'adb' is not recognized as an internal or external command

进入shell adb shell 如果有多个设备怎么办? adb devices查看你的设备; adb -s xiaomi shell:-s命令表示选择设备,这里是选择xiaomi设备进shell ls查看文件

代码语言:javascript复制
 ls -l /system/app/Demo.apk
rwxr-xr-x root     root        48550 2016-02-22 21:55 CertificateInstallerProviders.apk

Linux的文件基本上分为三个属性:可读®,可写(w),可执行(x)。 对rwxr-xr-x 的解读: rwx(Owner)r-x(Group)r-x(Other) 这个例子表示的权限是:使用者自己可读,可写,可执行;同一组的用户可读,不可写,可执行;其它用户可读,不可写,可执行。 命令中r=4,w=2,x=1,比如

代码语言:javascript复制
chmod 644  system/app/Demo.apk命令执行以后,查看这个文件发现权限被修改了
 ls -l /system/app/Demo.apk
 -rw-r--r-- root     root        48550 2016-02-22 21:55 Demo.apk(将这个apk放在了system下面,而且还让它具有root权限了)

ls -a 列出当前目录下的所有文件

##cd切换路径 cd /mnt/sdcard 切换到内存卡 mount挂载 mount -o remount,rw /system 将/system目录挂载,设置为可以读写 实例:

代码语言:javascript复制
127|shell@android:/mnt/sdcard $ mount -o remount,rw /system
mount -o remount,rw /system
mount: Operation not permitted

如果出现mount: Operation not permitted说明没有root权限

su获取ROOT权限 前提是你的手机已经root了 su命令表示切换ROOT用户下运行(就是说你有了root权限啦) 下面先获取root,获取root成功的时候$变成了#

代码语言:javascript复制
255|shell@android:/mnt/sdcard $ su
su
root@android:/storage/sdcard0 # mount -o remount,rw /system 
mount -o remount,rw /system

此时在执行挂载就可以成功

注意:$表示普通权限用户;#表示ROOT权限用户。

cp复制文件

代码语言:javascript复制
cp -f /sdcard/SDKLongRrs.apk /system/app/SDKLongRrs.apk##

如果 cp: not found,说明该手机中cp命令不存在,换cat复制试试

代码语言:javascript复制
127|root@android:/storage/sdcard0 # cat  /sdcard/SDKLongRrs.apk> /system/app/SDKLongRrs.apk

右箭头>指明拷贝的方向哈

获取md5值

代码语言:javascript复制
 md5 /system/app/SDKLongRrs.apk

获取一个目录下所有文件的md5

代码语言:javascript复制
 md5 /system/app/*

chmod修改文件权限 让apk变成可以安装的

代码语言:javascript复制
 chmod 644 /system/app/SDKLongRrs.apk

pm安装apk卸载应用

代码语言:javascript复制
pm install -r /system/app/SDKLongRrs.apk
pm uninstall com.baidu.map.location

安装应用

代码语言:javascript复制
adb install  C:UsersAdministratorDesktopRoot.apk

这个将电脑桌面的Root.apk安装到手机上 有可能不成功,直接看信息,对照英文找原因,比如小米的需要点击允许安装,在比如空间不足,在比如应用已经存在手机上。 卸载应用

adb uninstall com.baidu.map.location (你需要知道应用的包名哈、打开界面、执行如下操作就可以看到包名)

代码语言:javascript复制
adb shell dumpsys window | grep mCurrentFocus

不用root手机也能够卸载系统应用 这里 –user 0就是以root身份去执行命令

代码语言:javascript复制
 adb shell pm uninstall -k --user 0 com.qihoo.browser

启动应用 (1)启动Activity am start -n com.googleplayapp.storerootsuaction/.MainActivity( 你得知道对应的界面的Activity路径以及包名哈)

代码语言:javascript复制
adb shell am start -n com.test.provider/.MainActivity

(2)启动service

代码语言:javascript复制
	<service
        android:name=".MyService"
        android:description="@string/Desciption"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="com.nandhan.myservice" />
        </intent-filter>
    </service>     
代码语言:javascript复制
adb shell am startservice com.nandhan.myservice/.MyService

查看正在运行的 Services

代码语言:javascript复制
adb shell dumpsys activity services [<packagename>]
包名是必须的、不需要写完整的包名、支持模糊匹配
例如adb shell dumpsys activity services com.linux.example

查看正在运行的 activity

代码语言:javascript复制
adb shell dumpsys activity [<packagename>]
包名是必须的、不需要写完整的包名、支持模糊匹配
例如adb shell dumpsys activity com.linux.example

clear 清除应用数据

代码语言:javascript复制
pm clear com.googleplayapp.storerootsuaction

##cmd下直接使用adb shell命令 如果不进入shell的,如何执行以上命令 cmd下面直接使用adb shell 后面跟上对应的命令就好 比如清除应用数据

代码语言:javascript复制
adb shell pm clear com.googleplayapp.storerootsuaction

##电脑输入文字到手机 比如手机要上百度,手机打开浏览器,点击地址栏,输入法切换到英文,cmd命令

代码语言:javascript复制
adb shell input text "www.baidu.com"

你会看到手机浏览器的网址变成百度了 文件传输 电脑复制文件到手机 方法1:cmd下面使用push命令

代码语言:javascript复制
adb push "C:UsersAdministratorDownloadsRoot.apk" /mnt/sdcard/goodRoot/

将电脑下载里面的Root.apk复制到手机sdcard的goodRoot文件夹下面 方法2:直接使用eclipse里面的File Explorer(对android程序员而言的哈) 复制手机文件到电脑

代码语言:javascript复制
adb pull  /sdcard/packages.xml  C:UserslinuxDesktoppackages.xml

导出手机上的app到电脑上 如何导出 一个apk?首先获取包名,然后找到它在手机上的安装路径,接下来拉取到电脑上.首先adb shell dumpsys activity | findstr ResumedActivity获取包名,然后adb shell pm path 包名获取安装路径,接下来adb pull app-path pc-path导出到电脑上。举例子:

代码语言:javascript复制
D:Program Filescmder_mini
λ adb shell dumpsys activity | findstr ResumedActivity
adb server version (39) doesn't match this client (41); killing...
* daemon started successfully
    mResumedActivity: ActivityRecord{ 
   fa0a1d4 u0 com.samsung.android.app.dressroom/.settings.MyWallpapersActivity t2352}
 ResumedActivity:ActivityRecord{ 
   fa0a1d4 u0 com.samsung.android.app.dressroom/.settings.MyWallpapersActivity t2352}
  ResumedActivity: ActivityRecord{ 
   fa0a1d4 u0 com.samsung.android.app.dressroom/.settings.MyWallpapersActivity t2352}

D:Program Filescmder_mini
λ adb shell pm path com.samsung.android.app.dressroom
package:/system/priv-app/DressRoom/DressRoom.apk

D:Program Filescmder_mini
λ adb pull /system/priv-app/DressRoom/DressRoom.apk  C:UsersAdministratorDownloadsDressRoom.apk
/system/priv-app/DressRoom/DressRoom.apk: 1 file pulled, 0 skipped. 31.6 MB/s (7197293 bytes in 0.217s)

快速获取文件路径 打开cmd,将文件拖进来,你就可以看到文件的路径哈 ##eclipse中File Explorer的使用 手机调试模式连接电脑,使用File Explorer可以查看手机文件; root以后的手机可以查看data下面的文件 如果已经root,但是data打不开,使用以下命令 cmd下面

代码语言:javascript复制
adb shell
shell@android:/ $ su root
chmod -R 755 /data    

(R必须大写,linux命令区分大小写的,cmd命令不区分大小写,shell命令是一种linux命令) 点击这里查看chmod 755的含义 ##rm 删除命令

代码语言:javascript复制
 rm -r  /mnt/sdcard/AppFolder/a.mp3  移除a.mp3文件

删除文件夹的时候需要加上-r参数

代码语言:javascript复制
 rm -r  /mnt/sdcard/AppFolder

关闭程序

代码语言:javascript复制
 adb shell am force-stop 包名

一次卸载多个应用

代码语言:javascript复制
adb uninstall com.android.a
adb uninstall com.android.b
adb uninstall com.android.c
adb uninstall com.android.d
adb uninstall com.android.e

将这多条命令写成一个.bat文件,直接点击bat就可以卸载多个应用了。 reboot重启手机

代码语言:javascript复制
adb reboot  重启
adb reboot recovery 重启进入recovery模式

cat查看文件 cat error.txt 这个命令可以查看error.txt文件的内容 批量执行多条adb shell命令 adb命令带参数,cmd下面带上参数,先获取su,然后做其他事 演示在cmd下面可以直接使用su权限来删除/system/bin/testa文件和/system/xbin/testb

代码语言:javascript复制
adb shell "su -c 'rm -r -f /system/bin/testa'"
adb shell "su -c 'rm -r -f /system/xbin/testb'"

如果是直接一条条执行shell命令将是下面的4条命令

代码语言:javascript复制
adb shell
su
rm -r -f /system/bin/testa
rm -r -f /system/xbin/testb

如何批量执行多条命令呢 写一个.bat文件,文件内容如下:

代码语言:javascript复制
adb shell "su -c 'rm -r -f /system/bin/testa'"
adb shell "su -c 'rm -r -f /system/xbin/testb'"
pause

保存为bat文件,直接点击执行.(windows系统下)。 (pause表示不关闭cmd窗口,这样就可以看到执行的结果了) 查看进程加载的库 可以根据进程id,查看进程加载了哪些库,cat /proc/pid/maps kill 干掉进程 adb shell am force-stop 作用:强制关闭一个应用程序 举例:adb shell am force-stop com.lt.test adb shell am force-stop比使用 kill -9 要方便 参考http://blog.sina.com.cn/s/blog_6294abe70101275q.html ps可以查看到进程的pid kill -s 9 pid干掉指定pid的进程 批量干掉进程

代码语言:javascript复制
busybox pkill -9 父进程
ps
USER         PID     PPID  VSIZE  RSS     WCHAN    PC         NAME
u0_a145   10608 134   292960 26816 ffffffff 4019ca70 S com.ex.thre
u0_a146   10755 134   302420 32152 ffffffff 4019ca70 S com.ex.two

使用kill -s 9 134,就可以干掉 PID =134. PID =10608. PID =10755三个进程

查看内存信息 看手机内存信息cat /proc/meminfo 查看应用的内存信息 dumpsys meminfo 应用包名 查看应用是否安装 查看应用的安装路径 pm path 应用包名 获取手机上已经安装的所有的程序 pm list packages 过滤grep 和findstr 在windows上直接使用findstr来过滤你想要的信息

代码语言:javascript复制
adb shell ps|findstr baidu

这个命令找出手机上正在运行并且这个名字包含baidu的进程

代码语言:javascript复制
//下面的写法也对
adb shell ps baidu
adb shell ps|findstr -i baidu

对应的android或者linux中的shell命令是grep

代码语言:javascript复制
ps|gerp  baidu

提示 :有的手机上没有grep命令,这时候可以采用findstr;或者往手机里放一个busybox文件,然后使用busybox grep命令,效果一样

高版本上需要加-A否则命令无效

代码语言:javascript复制
adb shell ps -A|grep baidu

查看运行的程序 查看手机正在运行的程序 ps 查看自己的程序是否在运行 ps | grep 应用包名 如果没有grep命令,可以放置一个busybox工具到手机 查看360对应的程序是否在运行 ps | busybox grep m.qihoo* 删除多个文件 cd dir rm * 删除dir中所有文件 adb获取手机参数 adb获取手机所有参数参考这个 adb shell getprop adb获取iccid

代码语言:javascript复制
service call iphonesubinfo 4(需要权限android.permission.READ_PHONE_STATE)

adb获取imei

代码语言:javascript复制
adb -d shell dumpsys iphonesubinfo

adb获取androidid androidid藏在这里[net.hostname]: [android-b33f3ac550112627] 命令:getprop net.hostname adb获取serialno

代码语言:javascript复制
命令:getprop ro.boot.serialno或者getprop ro.serialno

adb获取imei

代码语言:javascript复制
service call iphonesubinfo 1

更多信息参考这个 http://stackoverflow.com/questions/27002663/adb-shell-dumpsys-iphonesubinfo-not-working-since-android-5-0-lollipop 使用”读取proc的方式”获取正在运行的进程 // 1,遍历”/proc”文件夹下面的文件夹,其中有些”文件夹名称”就是进程id(PID) ls /proc // 2,cat命令获取对应进程的名字(cat /proc/PID/cmdline) cat /proc/1/cmdline 得到结果/init 查看进程具体的信息 (实例:12073是要查看的进程的PID)

代码语言:javascript复制
cat /proc/12073/maps   查看进程的文件结构
cat /proc/12073/status   查看进程的状态

##通过packages.xml文件查看app安装信息 在/data/system/packages.xml文件中,找到你应用相关内容 我在小米上使用cat /data/system/packages.xml命令得到以下数据

代码语言:javascript复制
<package name="com.trafficctr.miui" codePath="/system/app/TrafficControl" nativeLibraryPath="/system/app/TrafficControl/lib" flags="540229" ft="152fdda2cc0" it="152fdda2cc0" ut="152fdda2cc0" version="29" userId="10069">
       .....
    </package>

显然name就是包名,codePath就是安装的路径 使用shell启动和终止模拟器

代码语言:javascript复制
adb shell stop//停止
adb shell start//启动

##多设备选择 adb devices//显示处于调式模式的devices adb -s emulator-5554 shell//表示选择5554模拟器的进入shell 42.busybox的安装

查看进程优先级 假设要查看程序com.test.app.a的进程优先级 adb shell(进入shell) ps|grep com.test.app.a(列出这个进程)

代码语言:javascript复制
u0_a37    28155 164   909516 36900 ffffffff b75baa27 S com.test.app.a

cat /proc/28155/oom_adj(获取这个进程的adj值) adj值则在ProcessList中定义,adj的取值范围[-17,16],取值越大说明优先级越低。adj取值说明参考这里 dumpsys 查看内存,cpu,电量信息 1)查看所有内存信息 命令:dumpsys meminfo 2)查看某个包的内存信息 命令:dumpsys pkg_name 3)查看CPU使用情况、查看你的应用占了多少CPU 命令:adb shell dumpsys cpuinfo

代码语言:javascript复制
C:UsersAdministrator
λ adb shell dumpsys cpuinfo
Load: 6.48 / 5.54 / 5.02
CPU usage from 688557ms to 354472ms ago with 99% awake:
  16% 11015/com.tencent.mm: 12% user   3.6% kernel / faults: 106584 minor 3083 major
  6% 1645/system_server: 3.2% user   2.8% kernel / faults: 50408 minor 244 major
  2.5% 350/surfaceflinger: 1.1% user   1.4% kernel / faults: 729 minor 16 major

4)如何查看android cpu是32位还是64位

代码语言:javascript复制
adb shell getprop ro.product.cpu.abi

5)查看电量信息 命令:dumpsys battery 参考这里:Android 通过adb shell命令查看内存,CPU,启动时间,电量等信息

findstr 和grep过滤搜索 1)cmd下搜索包名为com.linux.test的进程

代码语言:javascript复制
adb shell ps|findstr /i "com.linux.test"

2)shell下面搜索 先使用adb shell进去,然后使用grep命令过滤

代码语言:javascript复制
ps|grep "com.linux.test"

##查看最上层成activity名字

代码语言:javascript复制
adb shell dumpsys activity | findstr "mFocusedActivity"

9.0以上高版本也可以

代码语言:javascript复制
adb shell dumpsys activity | findstr ResumedActivity
代码语言:javascript复制
adb shell dumpsys activity | grep ResumedActivity

##查看activity栈

代码语言:javascript复制
adb shell dumpsys activity activities | findstr your.package.name
代码语言:javascript复制
//万能方法 
adb shell dumpsys activity | findstr your.package.name

##栈顶Fragment:

代码语言:javascript复制
adb shell dumpsys activity your.package.name

##查看最上层窗口信息

代码语言:javascript复制
 adb shell dumpsys window windows | findstr  mCurrent

查看端口

代码语言:javascript复制
显示已连接的端口:netstat -ntup
显示正监听的端口:netstat -ntupl
查询端口进程应关系cat /proc/net/tcp6

如果查询14752端口被那个进程占用? (1)16进制39A0=10进制14752; (2)39A0对应的进程ID(也叫uid)是10096 sl local_address remote_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode 0: 00000000000000000000000000000000:39A0 00000000000000000000000000000000:0000 0A 00000000:00000000 00:00000000 00000000 10096 0 8887 1 00000000 100 0 0 2 -1 (3)使用ps命令 在android中,uid大于10000的是应用程序创建的用户。 ps的第一列是uid,大于10000的uid会以u0_a开头,10096 显示为u0_a96,最后一列就是进程名。 adb发送广播

代码语言:javascript复制
adb shell am broadcast -n com.lt.test/.MyBroadcast
adb shell am broadcast -a "MyBroadcastAction"

##通过 ADB Shell 获取 Android ID https://cherysunzhang.com/2017/04/getting-android-id-from-adb-shell/

代码语言:javascript复制
adb shell settings get secure android_id

adb shell content query --uri content://settings/secure/android_id --projection value

清除数据和缓存

代码语言:javascript复制
adb shell pm clear <PACKAGE>

屏幕截图

代码语言:javascript复制
adb shell /system/bin/screencap -p /sdcard/screenshot.png&adb pull /sdcard/screenshot.png D:linuxsdktestscreenshot.png&D:linuxsdktestscreenshot.png

屏幕录制

代码语言:javascript复制
**录屏**
adb shell screenrecord /sdcard/test.mp4
#导出到电脑中(记得先在电脑建立一个文件)
adb spull  /sdcard/test.mp4 D:linuxsdktesttest.mp4

模拟点击

代码语言:javascript复制
#模拟滑动
向左滑动
adb shell input swipe 800 300 200 300
向右滑动
adb shell input swipe 200 300 800 300
向上滑动
adb shell input swipe 300 800 300 200
向下滑动
adb shell input swipe 300 200 300 800
#模拟点击
adb shell input tap 250 250
#模拟点击home键
adb shell input keyevent 3

更多参考
https://lavenderstream.github.io/2016/11/10/android-sendevent模拟滑动点击事件/

查看anr日志

代码语言:javascript复制
adb shell cat data/anr/traces.txt >C:UsersAdministratorDesktoptraces.txt

日志一般开头是这样的

代码语言:javascript复制
----- pid 9830 at 2019-03-27 21:08:08 -----
    Cmd line: com.tencent.mm

如果过滤你的应用日志?Cmd line: com.tencent.mm(记得换成你的包名)

查看当前Activity是否销毁

代码语言:javascript复制
adb shell dumpsys activity>activity.txt

将当前的四大组件(Activity,Service,BroadCase,ContentProvider)的存在情况打印到当前目录的activity.txt文件中。然后直接输入activity.txt就可以打开这个文件了。当然用pwd命令可以打印当前目录的路径。

或者直接用下面的命令一步到位,导出到activity.txt文件,同时打开activity.txt文件(Windows系统)

代码语言:javascript复制
adb shell dumpsys activity>activity.txt&activity.txt

查看过滤log 显示所有优先级大于等于“warning”的日志

代码语言:javascript复制
adb logcat *:W

批量获取包名、应用版本号

linux

代码语言:javascript复制
adb shell  dumpsys package packages | grep -E 'Package [|versionName'

windows

代码语言:javascript复制
adb shell dumpsys package packages | findstr -E 'Package [|versionName'

查看某一个应用的版本号 比如gms
adb shell pm dump com.google.android.gms | findstr “versionName” 

aab安装 Android App Bundle(aab)是一种分包技术、根据设备分发不同大代码片段、减少无用的代码下载和安装。aab安装到手机分两步、首先是转为apk、然后是安装。 官网参考 https://developer.android.com/studio/command-line/bundletool 工具下载https://github.com/google/bundletool/releases 一条命令将aab安装到手机

代码语言:javascript复制
java -jar C:UsersAdministratorAppDataLocalAndroidSdkplatform-toolsbundletool-all-1.0.0.jar build-apks --bundle=E:gpGirlyWallpapersapp105491v1app105491-release.aab --output=E:gpGirlyWallpapersapp105491v1app105491-release.apks&java -jar C:UsersAdministratorAppDataLocalAndroidSdkplatform-toolsbundletool-all-1.0.0.jar install-apks --apks=E:gpGirlyWallpapersapp105491v1app105491-release.apks

获取md5值

代码语言:javascript复制
certutil -hashfile E:demomusicbuildoutputsapkreleasecom.oztdemo.music-V2.0.0-1811.apk MD5

wifi调式

连接设备 adb connect 10.223.161.1:23046 断开连接 adb disconnect 10.223.161.1:23046 查看文件和修改文件 创建文件 echo "Raspberry" > test.txt 查看文件用cat cat test.txt androids shell默认没有vi命令,可以用cat命令修改追加内容 cat>> test.txt<<EOF 这句意思是往test.txt文件追加内容遇到EOF时结束 接下来输入你要追加的内容,按enter键,最后输入EOF就可以了

代码语言:javascript复制
umi:/storage/emulated/0 # cat>>test.txt<<EOF 
> hello world world
> EOF

这样就向文件尾部加上一句hello world world 查询系统信息

获取系统版本:

代码语言:javascript复制
adb shell getprop ro.build. version .release

获取系统api版本:

代码语言:javascript复制
adb shell getprop ro.build.version.sdk

查询安装app版本号:

代码语言:javascript复制
adb shell dumpsys package com.meizu.cloud | findstr versionName

网络控制

打开WiFi

代码语言:javascript复制
adb shell svc wifi enable

关闭WiFi

代码语言:javascript复制
adb shell svc wifi disable

打开移动网络

代码语言:javascript复制
adb shell svc data enable

关闭移动网络

代码语言:javascript复制
adb shell svc data disable

关闭模拟器

代码语言:javascript复制
adb emu kill

查看tcp_keepalive_time

代码语言:javascript复制
    adb shell cat /proc/sys/net/ipv4/tcp_keepalive_time

APP安装位置

查询三星相机安装位置(com.sec.android.app.camera可以换为你想找的app的包名)

代码语言:javascript复制
adb shell pm list packages -f |findstr com.sec.android.app.camera

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/131099.html原文链接:https://javaforall.cn

0 人点赞