ADB使用学习

ADB是Android调试桥(Android Debug Bridge)的缩写,是一个用于在电脑和Android设备之间进行通信和调试的工具。

参考:https://blog.csdn.net/Sugar_wolf/article/details/127806122

ADB服务相关

使用:adb devices列出当前设备状态,存在三种

image-20231209215346895

image-20231209215357842

image-20231209215439833

  • 当出现offline状态时,使用adb kill-serveradb start-server实现重连。

  • 当出现unauthorized状态,说明被连接设备未接受连接设备的公钥,应该会弹窗。

使用命令adb shell,获取手机命令行:

image-20231209215712193

ADB软件操作

安装卸载

adb install xxx.apk用来安装软件;

adb install 实际是分三步完成:

  1. push apk 文件到 /data/local/tmp
  2. 调用 pm install 安装。
  3. 删除 /data/local/tmp 下的对应 apk 文件。

adb install -r <文件路径\apk>:覆盖安装
adb install -d <文件路径\apk>:允许降级覆盖安装
adb install -g <文件路径\apk>:授权/获取权限,安装软件时把所有权限都打开

安装可能出现的失败情况:

  • Failure:代表安装失败。APK 安装失败的情况有很多,Failure状态之后有安装失败输出代码。常见安装失败输出代码、含义及可能的解决办法如下:
输出代码 含义 解决办法
INSTALL_FAILED_ALREADY_EXISTS 应用已经存在,或卸载了但没卸载干净 adb install 时使用 -r 参数,或者先 adb uninstall 再安装
INSTALL_FAILED_INVALID_APK 无效的 APK 文件
INSTALL_FAILED_INVALID_URI 无效的 APK 文件名 确保 APK 文件名里无中文
INSTALL_FAILED_INSUFFICIENT_STORAGE 空间不足 清理空间
INSTALL_FAILED_DUPLICATE_PACKAGE 已经存在同名程序
INSTALL_FAILED_NO_SHARED_USER 请求的共享用户不存在
INSTALL_FAILED_UPDATE_INCOMPATIBLE 以前安装过同名应用,但卸载时数据没有移除;或者已安装该应用,但签名不一致 先 adb uninstall 再安装
INSTALL_FAILED_SHARED_USER_INCOMPATIBLE 请求的共享用户存在但签名不一致
INSTALL_FAILED_MISSING_SHARED_LIBRARY 安装包使用了设备上不可用的共享库
INSTALL_FAILED_REPLACE_COULDNT_DELETE 替换时无法删除
INSTALL_FAILED_DEXOPT dex 优化验证失败或空间不足
INSTALL_FAILED_OLDER_SDK 设备系统版本低于应用要求
INSTALL_FAILED_CONFLICTING_PROVIDER 设备里已经存在与应用里同名的 content provider
INSTALL_FAILED_NEWER_SDK 设备系统版本高于应用要求
INSTALL_FAILED_TEST_ONLY 应用是 test-only 的,但安装时没有指定 -t 参数
INSTALL_FAILED_CPU_ABI_INCOMPATIBLE 包含不兼容设备 CPU 应用程序二进制接口的 native code
INSTALL_FAILED_MISSING_FEATURE 应用使用了设备不可用的功能
INSTALL_FAILED_CONTAINER_ERROR 1. sdcard 访问失败;2. 应用签名与 ROM 签名一致,被当作内置应用。 1. 确认 sdcard 可用,或者安装到内置存储;2. 打包时不与 ROM 使用相同签名。
INSTALL_FAILED_INVALID_INSTALL_LOCATION 1. 不能安装到指定位置;2. 应用签名与 ROM 签名一致,被当作内置应用。 1. 切换安装位置,添加或删除 -s 参数;2. 打包时不与 ROM 使用相同签名。
INSTALL_FAILED_MEDIA_UNAVAILABLE 安装位置不可用 一般为 sdcard,确认 sdcard 可用或安装到内置存储
INSTALL_FAILED_VERIFICATION_TIMEOUT 验证安装包超时
INSTALL_FAILED_VERIFICATION_FAILURE 验证安装包失败
INSTALL_FAILED_PACKAGE_CHANGED 应用与调用程序期望的不一致
INSTALL_FAILED_UID_CHANGED 以前安装过该应用,与本次分配的 UID 不一致 清除以前安装过的残留文件
INSTALL_FAILED_VERSION_DOWNGRADE 已经安装了该应用更高版本 使用 -d 参数
INSTALL_FAILED_PERMISSION_MODEL_DOWNGRADE 已安装 target SDK 支持运行时权限的同名应用,要安装的版本不支持运行时权限
INSTALL_PARSE_FAILED_NOT_APK 指定路径不是文件,或不是以 .apk 结尾
INSTALL_PARSE_FAILED_BAD_MANIFEST 无法解析的 AndroidManifest.xml 文件
INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION 解析器遇到异常
INSTALL_PARSE_FAILED_NO_CERTIFICATES 安装包没有签名
INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES 已安装该应用,且签名与 APK 文件不一致 先卸载设备上的该应用,再安装
INSTALL_PARSE_FAILED_CERTIFICATE_ENCODING 解析 APK 文件时遇到 CertificateEncodingException
INSTALL_PARSE_FAILED_BAD_PACKAGE_NAME manifest 文件里没有或者使用了无效的包名
INSTALL_PARSE_FAILED_BAD_SHARED_USER_ID manifest 文件里指定了无效的共享用户 ID
INSTALL_PARSE_FAILED_MANIFEST_MALFORMED 解析 manifest 文件时遇到结构性错误
INSTALL_PARSE_FAILED_MANIFEST_EMPTY 在 manifest 文件里找不到找可操作标签(instrumentation 或 application)
INSTALL_FAILED_INTERNAL_ERROR 因系统问题安装失败
INSTALL_FAILED_USER_RESTRICTED 用户被限制安装应用
INSTALL_FAILED_DUPLICATE_PERMISSION 应用尝试定义一个已经存在的权限名称
INSTALL_FAILED_NO_MATCHING_ABIS 应用包含设备的应用程序二进制接口不支持的 native code
INSTALL_CANCELED_BY_USER 应用安装需要在设备上确认,但未操作设备或点了取消 在设备上同意安装
INSTALL_FAILED_ACWF_INCOMPATIBLE 应用程序与设备不兼容
INSTALL_FAILED_TEST_ONLY APK 文件是使用 Android Studio 直接 RUN 编译出来的文件 通过 Gradle 的 assembleDebug 或 assembleRelease 重新编译,或者 Generate Signed APK
does not contain AndroidManifest.xml 无效的 APK 文件
is not a valid zip file 无效的 APK 文件
Offline 设备未连接成功 先将设备与 adb 连接成功
unauthorized 设备未授权允许调试
error: device not found 没有连接成功的设备 先将设备与 adb 连接成功
protocol failure 设备已断开连接 先将设备与 adb 连接成功
Unknown option: -s Android 2.2 以下不支持安装到 sdcard 不使用 -s 参数
No space left on device 空间不足 清理空间
Permission denied … sdcard … sdcard 不可用
signatures do not match the previously installed version; ignoring! 已安装该应用且签名不一致 先卸载设备上的该应用,再安装

卸载:

adb uninstall [-k] \<package-name>

-k 参数可选,表示卸载应用但保留数据和缓存目录。

卸载软件思路

要卸载软件,首先需要获知<package-name>,记录一下我个人的探究过程:

在进入android shell后(使用 adb shell),常见的相关工具有两个:

pm

pm(package-manager)是Android系统中的包管理器工具,用于管理应用程序包(APK)及其相关信息。它允许用户执行各种操作,包括安装、卸载、查询应用程序信息等。

pm list packages可以列出应用列表:

image-20231209225340339

然而并没有什么用,依然不太清楚哪个package对应哪个app;

因此,可以使用一些比较方便的option进行筛选:

pm list packages -3 显示第三方应用,即用户自己安装的应用,也对应着手机操作者唯一具有卸载权限的应用;

pm list packages -u显示由用户安装的应用,这里实际就包括系统预装了;

pm list packages -s只显示系统应用程序。

那么三者究竟有什么关系,经过对于结果的统计,发现 -u的输出几乎是 -3 和 -s的并集,在我的手机(oppo)上验证,-u的输出与 -3 和 -s的并集之间仅仅相差几个pakcage;

dumpsys

dumpsys是Android系统中一个强大的调试命令,用于提供关于系统服务状态和信息的详细报告。它可以展示各种系统级别的信息,包括运行中的服务、内存状态、CPU信息、网络状态、传感器数据等。

然而,在dumpsys后面添加各类服务的名字,就可以对于信息进行粗筛,如dumpsys windowdumpsys battery等,然而这些对于非系统开发者并没有什么用;

网上的教程一般都说,

image-20231209235712166

亲测在oppo机型不太行,作为替代,可以使用:dumpsys activity activities | grep mControlTarget c查看正在受控的activity:

image-20231209235825042

也可以通过屏幕状态筛选正在活动的应用,如命令:dumpsys window windows | grep mSurface

image-20231210000056184

这样一来,据此就可以尝试寻找需要进行卸载的App;

huawei系统软件卸载案例

参考,摘抄自:http://www.usbmi.com/5700.html

正常操作的情况下,安卓手机的控制只需要单用户即可,因此卸载用户目录下的软件即可,不需要从系统目录连根拔起斩尽杀绝(这样刷机的时候还能恢复)

第一步:

手机的”设置”—“系统”—“开发人员选项”,界面下滑找到”调试”,打开“USB调试”、“连接USB时总是弹出提示”“监控ADB安装应用”、“仅充电模式下允许USB调试”这四个选项,有些不让选也影响不大。

第二步:

电脑下载调试工具包 ADB Kits

数据线连接电脑和手机,连接后在手机选择仅充电

手机还会有一条连接确认,确认即可。

第三步:

adb命令(做打码处理):

1
2
3
C:\Users\xxx\Desktop\Andriod\adb>adb devices
List of devices attached
KWG5Txxxxxx07xx5 device

说明已经连接了设备,下面就可以操作了

第四步:

1
2
3
4
获取系统当前用户的安装列表:
adb shell pm list packages >alist.txt
已启用的应用列表:
adb shell pm list packages -s -e >enabled.txt

输出到文件方便查看。

第五步:

开始动手!

禁用命令格式:adb shell pm disable-user 软件包名

启用命令格式:adb shell pm enable 软件包名

删除命令格式:adb shell pm uninstall --user 0 软件包名

附录1,常见软件包名称对应

摘抄自:http://www.8fe.com/jiaocheng/1201.html(个人认为非常全面了)

直接找到相应的包名执行命令开删就可以了!

包名 应用名称
com.android.networkstack.inprocess
com.android.providers.downloads 下载管理器
com.huawei.android.totemweather 天气
com.huawei.desktop.explorer 我的文件
com.huawei.arengine.service 华为AR引擎
com.google.android.overlay.settingsProvider
com.android.soundrecorder 录音机
com.google.android.configupdater
com.android.mms.service 短信服务
com.android.companiondevicemanager
com.huawei.imedia.dolby 杜比音效
com.google.android.ext.shared
com.google.android.onetimeinitializer 谷歌one time
com.huawei.desktop.systemui
com.huawei.multimedia.audioengine
com.huawei.numberidentity
com.huawei.KoBackup 备份
com.google.ar.core 谷歌AR服务
com.android.nfc NFC服务
com.android.mms 信息
com.huawei.systemserver 系统服务
com.android.ons
com.huawei.himovie.partner1
com.huawei.cloud 华为云
com.huawei.profile 华为Profile
com.huawei.himovie.partner2
com.android.contacts 联系人
com.android.systemui.overlay
com.android.simappdialog
com.android.vending Google Play商店
com.android.frameworkhwext.honor
com.huawei.wallet.sdk.walletsdk
com.android.modulemetadata
com.android.providers.media 媒体存储
com.huawei.bluetooth 通过蓝牙导入
com.android.email 电子邮件
com.android.providers.blockednumber 存储已屏蔽的号码
com.android.wallpaperbackup 壁纸备份
com.Qunar 去哪儿
com.google.android.gsf.login 谷歌组件
com.huawei.android.mirrorshare 无线分享
com.svox.pico Pico TTS
com.android.packageinstaller 打包安装程序
com.android.frameworkhwext.overlay.dark 安卓框架
com.google.android.printservice.readb 谷歌组件
com.huawei.android.hwpay 华为钱包安全支付
com.android.imedia.syncplay
com.android.providers.userdictionary 用户词典
com.android.providers.telephony 通话/信息存储
com.huawei.android.launcher 华为桌面
com.huawei.camerakit.impl
com.huawei.androidx AndroidX
com.android.phone.recorder 录音机
com.huawei.hidisk 文件管理
com.huawei.featurelayer.featureframework
com.android.providers.calendar 日历存储
com.huawei.android.tips
com.huawei.camera 相机
com.android.exchange Exchange服务
com.baidu.haokan 好看视频
com.smile.gifmaker gif制造商
com.huawei.hiskytone 天际通
com.huawei.nlp
cn.wps.moffice_eng WPS
com.android.hwmirror 镜子
com.huawei.dmsdp
com.huawei.hicar 华为汽车
com.huawei.hiboard 负一屏
com.huawei.ihealth 华为健康
com.huawei.yellowpage 在线黄页
com.huawei.internetaudioservice 智能线控
com.huawei.livewallpaper.matewenty 华山
com.google.android.backuptransport 谷歌备份传输
com.huawei.android.thememan 主题
com.ifytek.speechsuite 讯飞语音引擎
com.android.inputmethod.latin AOSP输入法
com.android.providers.contacts 联系人存储
com.android.permissioncontroller 安卓权限控制
com.huawei.assetsync
com.android.systemui 系统界面
com.huawei.hwvoipservice
com.huawei.assetsyncservice
com.android.bluetooth 蓝牙
com.huawei.hff hff服务
com.huawei.aod 灭屏显示
com.android.vebding 谷歌play商店
com.andeoid.wallpaper.livepicker 稻穗屏保
com.szzc.ucar.pilot 神州租车
com.amap.android.ams 高德位置服务
com.huawei.remoteassistant 远程协助
com.autonavi.minimap 高德地图
ctrip.android.view 携程旅行
com.huawei.retaildemo 演示程序
com.huawei.android.location.activityrecognition 行为识别
com.huawei.geofence 地理围栏
com.stupeflix.replay Quik
com.ifeng.news2 凤凰新闻
com.nuance.swype.emui 华为Swype输入法
com.dianping.v1 大众点评
com.google.android.ext.services android Services Library
com.huawei.locationsharing 位置共享
com.huawei.cryptosms.service 短信加密
com.android.defcontainer 软件包访问帮助程序
com.realvnc.android.remote VNC远程控制
com.android.deskclock 时钟
com.android.location.fused 融合定位
com.google.android.syncadapters.contacts
com.android.server.telecom 通话管理
com.google.android.webview 安卓内置浏览器
com.android.gallery3d 图库
android.ext.services
com.google.android.gsf 谷歌服务框架
com.google.android.gms 谷歌play服务
com.google.android.overlay.gmsconfig
androidx.camera.extensions.impl
com.android.providers.settings
com.huawei.livewallpaper.matetwenty
com.android.calendar 日历
com.android.incallui 拨号
com.huawei.systemmanager 手机管家
com.huawei.securityserver
com.android.se
com.google.android.partnersetup 谷歌合作伙伴设置
com.android.localtransport
com.android.calculator2 计算器
com.huawei.deviceauth
com.android.networkstack.permissionconfig
com.huawei.android.remotecontroller 华为智能遥控
com.huawei.android.hwupgradeguide 升级向导
com.android.huawei.HiMediaEngine 定制多媒体引擎
com.android.shell
com.android.phone 拨号
com.android.settings
com.qeexo.smartshot 智能截屏
com.huawei.vrservice 华为VR眼镜服务
com.huawei.compass 指南针
com.google.android.printservice.recommendation
com.huawei.android.dsdscardmanager 双卡管理
com.tencent.qqlivehuawei 腾讯视频华为版
com.huawei.powergenie 省电精灵
com.android.apps.tag 标记
com.huawei.watch.sync 手表应用同步
com.ss.android.ugc.aweme 抖音短视频
com.huawei.mmitest 华为测试组件
com.android.wallpaper.livepicker 动态壁纸
com.huawei.android.wfdft WLAN直连
com.huawei.android.instantonline 华为一键热点应用
com.huawei.android.projectmenu 工程菜单
com.android.vpndialogs VPN设置
com.huawei.android.pushagent 推送服务
com.android.cts.ctsshim 旅行助手
com.android.dreams.phototable 图片屏保程序
com.huawei.hitouch Hi Touch功能
com.huawei.vassistant 语音助手
com.android.onetimeinitializer 一次性
com.huawei.hilink.framework 智能家居连接服务
com.huawei.hwstartupguide 安装向导
com.android.calllogbackup 通讯录备份
com.android.managedprovisioning 工作资料设置
com.android.proxyhandler 处理器信息
com.huawei.fido.uafclient 在线快速验证
com.android.emergency 个人紧急信息
com.huawei.ims 华为云镜像服务
com.huawei.hwpolicyservice 华为旅行助手服务管理
com.huawei.hwapplet 旅行助手策略管理
com.huawei.hicard 卡片管理
com.huawei.hiview 状态栏通知有关
com.huawei.trustspace 支付保护中心
com.huawei.spaceservice 云空间
com.huawei.fastapp 快应用中心
com.huawei.hisuite 华为手机助手
com.android.captiveportallogin Captive Portal Login
com.huawei.bd 用户体验计划
com.huawei.hwdetectrepair 智能检测
com.android.bluetoothmidiservice 蓝牙模组
com.huawei.ca ca服务
com.huawei.android.karaoke K歌特效
com.huawei.rcsserviceapplication 华为rcs服务
com.huawei.hiaction 智能识屏中控模块
com.android.inputdevices 输入设备
com.android.frameworkres.overlay
com.android.externalstorage 外部存储设备
com.android.documentsui 文件
com.huawei.secime 华为安全输入法
com.android.htmlviewer HTML查看器
com.huawei.regservice 注册服务
com.huawei.trustcircle 支付保护中心
com.huawei.wallet 华为钱包
com.iflytek.speechsuite 讯飞语音引擎
com.huawei.parentcontrol 学生模式
com.huawei.recsys 华为智能系统还原
com.huawei.iaware 智能优化
com.huawei.android.UEInfoCheck 自注册短信
com.huawei.synergy 输入设备
com.huawei.android.chr HwChrService
com.android.wallpapercropper 壁纸裁剪器
com.huawei.intelligent 情景智能
com.huawei.android.FloatTasks 悬浮导航
com.huawei.nearby 华为附近
com.huawei.phoneservice 会员服务
com.huawei.iconnect 智能家居连接
com.android.statementservice Intent Filter Verification Services
com.huawei.trustagent 智能解锁
com.huawei.android.instantshare Huawei Share
com.huawei.android.internal.app Huawei Share
com.huawei.hwasm
com.android.printspooler 打印处理服务
com.android.sharedstoragebackup
com.huawei.wifiprobqeservice WiFi服务
com.android.backupconfirm 第三方的应用程序
com.android.stk sim应用
com.android.pacprocessor 电脑连接辅助
com.huawei.hiviewtunnel 电量优化
com.huawei.android.AutoRegSms 自动注册
com.android.frameworkhwext.HONOR 荣耀框架
com.android.certinstaller 证书安装器
com.android.mtp MTP服务
com.android.frameworkhwext.dark
com.huawei.printservice 谷歌组件
com.huawei.featurelayer.sharedfeature.map 华为地图服务
com.huawei.motionservice 手势服务
com.sankuai.meituan 美团
com.huawei.health 运动健康
org.simalliance.openmobileapi.service SmartcardService
com.huawei.hnreader 荣耀阅读
com.huawei.vdrive 驾驶模式
companiondevicemanager 系统状态栏
com.huawei.android.FMRadio 收音机
com.android.dreams.basic 基本互动屏保
com.huawei.tips 智能提醒
com.huawei.gameassistant 游戏助手
com.android.storagemanager 存储设备管理
com.huawei.scanner 扫一扫
com.huawei.mycenter 会员中心
com.huawei.contactscamcard 名片全能王
com.huawei.hwireader 华为阅读
com.android.browser 浏览器
com.huawei.hwvplayer.youku 华为视频优酷版
com.taobao.mobile.dipei
com.hicloud.android.clone 手机克隆
com.xunmeng.pinduoduo 拼多多
com.huawei.HwMultiScreenShot 滚动截屏
com.ss.android.article.news 今日头条
com.UCMobile UC浏览器
com.android.keychain 密钥链
com.example.android.notepad 备忘录
com.huawei.nb.service 可删可禁用
com.huawei.lives 生活
com.google.android.marvin.talkback TalkBack
com.android.carrierconfig 运营商配置
com.android.systEMUI.overlay 主题界面
com.huawei.fans 花粉俱乐部
com.baidu.searchbox 百度搜素
com.huawei.gamebox 华为游戏中心
com.wuba 58同城
com.unionpay.tsmservice tsm服务
com.huawei.hifolder 精品推荐
com.huawei.screenrecorder 屏幕录制
com.huawei.browser 浏览器
com.android.mediacenter 音乐
com.huawei.android.hiaidsengine 屏幕录制
com.huawei.contentsensor 取词
com.huawei.msdp 综合传感信息处理平台
com.huawei.suggestion 情景智能
com.huawei.search 智慧搜索
com.huawei.himovie 华为视频
com.huawei.android.findmyphone 查找我的手机
com.huawei.android.airsharing 多屏互动
com.huawei.skytone 天际通数据服务
com.huawei.hbs.framework
com.huawei.lbs HwLBSService
com.huawei.smartlocation
com.huawei.appmarket 华为应用市场
com.huawei.android.hwouc 系统更新
com.huawei.pengine 智能建议
com.huawei.videoeditor 视频编辑
com.huawei.contacts.sync 联系人同步
com.android.frameworkhwext.nova 更换主题
com.huawei.android.thememanager 主题
com.bjbyhd.screenreader_huawei 屏幕阅读
com.huawei.android.hwaps 智能分辨率
com.huawei.scenepack 华为旅行助手
com.android.printservice.recommendation 谷歌组件
com.huawei.pcassistant 电脑端工具
com.android.keyguard 华为杂志锁屏
com.android.providers.downloads.ui 下载内容
com.huawei.hiai 智慧引擎
com.huawei.languagedownloader 下载语言
com.huawei.securitymgr 隐私空间
com.huawei.imedia.sws 音效管理
com.huawei.android.hsf 华为框架服务
com.baidu.input_huawei 百度输入法华为版
com.huawei.hwid 华为移动服务
com.android.cts.priv.ctsshim 旅行助手

模拟操作

am

am命令是Android系统中的一个重要工具,用于与Activity Manager(活动管理器)进行交互。

一般来说,am的常见使用方法有如下:

  • 启动activity:adb shell am start -n <package-name>/<activity-name>
  • 启动service:adb shell am startservice -n <package-name>/<service-name>
  • 强制停止activity:adb shell am force-stop <package-name>
  • 发送广播:adb shell am broadcast -a <action>
  • 杀死应用:adb shell am kill <package-name>

其中:

  • **-a <ACTION>**:指定要执行的操作,例如android.intent.action.VIEW
  • **-n <COMPONENT>**:明确指定要启动的Activity或Service的组件名称,例如com.example.package/.MainActivity

启动activity:

am start -a android.settings.SETTINGS # 打开系统设置页面
am start -a android.intent.action.DIAL -d tel:10086 # 打开拨号页面
am start -n com.android.mms/.ui.ConversationList # 打开短信会话列表

启动/停止service:

顺便普及一下安卓知识:

在Android中,Activity和Service是两种不同的组件,它们有不同的功能和用途,但可以相互配合实现更丰富的应用程序功能。

Activity 是用户与应用程序交互的主要界面。它表示一个屏幕上的用户界面,并且通常与用户的交互相关联,比如接收用户的输入、展示信息等。Activity通常代表应用程序的一个单独屏幕或一个交互状态。例如,一个登录界面、设置页面或游戏的不同关卡都可以是不同的Activity。

Service 是一种后台运行的组件,用于执行长时间运行的操作或处理后台任务,而不需要直接与用户交互。Service可以在后台运行,即使用户切换到了其他应用或手机处于休眠状态,Service仍然可以继续运行。Service常常用于处理网络请求、播放音乐、执行文件下载、检索数据等需要长时间运行的任务。

Activity和Service之间的关系可以是相互独立的,也可以相互配合:

  1. Activity启动Service:Activity可以通过启动Service来执行后台任务,如在用户点击一个按钮后开始下载文件或播放音乐。
  2. Service通知Activity:Service可以通过广播、回调或其他方式与Activity通信,向Activity发送数据或通知,让Activity更新界面或执行相应操作。
  3. 绑定Service到Activity:Activity可以绑定到Service,这样它们之间可以建立更紧密的连接,Activity可以直接调用Service提供的方法进行交互。

启动service:adb shell am startservice [options] <intent>

停止service:adb shell am stopservice [options] <intent>

广播操作(broadcast):

可以向所有组件广播,也可以只向指定组件广播。
例如,向所有组件广播 BOOT_COMPLETED

1
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED

又例如,只向 com.android.receiver.test/.BootCompletedReceiver 广播 BOOT_COMPLETED

1
adb shell am broadcast -a android.intent.action.BOOT_COMPLETED -n com.android.receiver.test/.BootCompletedReceiver

常见的事件有以下:

action 触发时机
android.net.conn.CONNECTIVITY_CHANGE 网络连接发生变化
android.intent.action.SCREEN_ON 屏幕点亮
android.intent.action.SCREEN_OFF 屏幕熄灭
android.intent.action.BATTERY_LOW 电量低,会弹出电量低提示框
android.intent.action.BATTERY_OKAY 电量恢复了
android.intent.action.BOOT_COMPLETED 设备启动完毕
android.intent.action.DEVICE_STORAGE_LOW 存储空间过低
android.intent.action.DEVICE_STORAGE_OK 存储空间恢复
android.intent.action.PACKAGE_ADDED 安装了新的应用
android.net.wifi.STATE_CHANGE WiFi连接状态发生变化
android.net.wifi.WIFI_STATE_CHANGED WiFi状态变为启用/关闭/正在启动/正在关闭/未知
android.intent.action.BATTERY_CHANGED 电池电量发生变化
android.intent.action.INPUT_METHOD_CHANGED 系统输入法发生变化
android.intent.action.ACTION_POWER_CONNECTED 外部电源连接
android.intent.action.ACTION_POWER_DISCONNECTED 外部电源断开连接
android.intent.action.DREAMING_STARTED 系统开始休眠
android.intent.action.DREAMING_STOPPED 系统停止休眠
android.intent.action.WALLPAPER_CHANGED 壁纸发生变化
android.intent.action.HEADSET_PLUG 插入耳机
android.intent.action.MEDIA_UNMOUNTED 卸载外部介质
android.intent.action.MEDIA_MOUNTED 挂载外部介质
android.os.action.POWER_SAVE_MODE_CHANGED 省电模式开启

然而:

image-20231210112859464

推测没有root权限是不能进行广播的。

终止程序:

  • 强制停止activity:adb shell am force-stop <package-name>
  • 停止应用:adb shell am kill <package-name>

二者的区别是,kill是正常停止应用进程,而force-stop是立即终止应用程序的所有组件,故后者的威力更大,但force-stop不会释放应用程序的资源或清除其数据,只是强制停止应用程序的运行。因此,当应用程序进程出现问题或者卡死时,使用force-stop,一般情况则使用kill就行。

文件操作

文件操作实际并不复杂,和linux相同的rmmkdirpwdtouchcpmv等命令不做赘述。

比较指的关注且常用的就是push和pull,用于手机和终端进行交互:

从模拟器/设备下载指定的文件到计算机:adb pull <remote> [local]

指定的文件从计算机上传到模拟器/设备:adb push <local> <remote>

(pull和push需要在adb shell以外操作,毕竟不是adb shell pull)

image-20231210125315496

内部储存:

手机文件管理-设备储存对应的目录是:/sdcard
各个应用的储存在:/sdcard/Andriod/data/<package-name>目录下,也就是应用数据目录:

image-20231210130305506

如相册为:/sdcard/DCIM;即/sdcard/Andriod/data/以外的储存位置就是非应用数据目录,两者的差异就是卸载应用的时候系统会清除应用数据目录下的文件。

外部储存:

用户软件目录为:/data 然而这个目录是需要root权限的,否则不可读,在对应目录下有权限划分,软件只能读取自身目录下的文件。

举个例子:

如何打开网易云音乐呢,首先我们手动打开网易云音乐软件,然后使用命令dumpsys获取activity名:

image-20231210151128822

然后am start -n com.netease.cloudmusic/com.netease.cloudmusic.activity.IconChangeDefaultAlias

就打开该软件啦;

输入操作

input

input命令是在 Android 系统上模拟用户输入的工具,可以模拟各种输入设备(如触摸屏、键盘、鼠标等)的操作。以下是该命令的基本用法和参数:

基本用法

1
2
bashCopy code
input [<source>] [-d DISPLAY_ID] <command> [<arg>...]

命令参数解释

  • <source>:指定输入设备的来源,如触摸屏(touchscreen)、键盘(keyboard)、鼠标(mouse)等。
  • -d DISPLAY_ID:指定显示器 ID。
  • <command>:指定要执行的操作命令。
  • <arg>...:相关参数。

可用命令及默认来源

  1. text <string>:在当前焦点位置输入文本(默认来源为 touchscreen)。
  2. keyevent [--longpress|--doubletap] <key code number or name> ...:发送按键事件,可以是按键代码或者名称(默认来源为 keyboard)。
  3. tap <x> <y>:在指定位置模拟点击(默认来源为 touchscreen)。
  4. swipe <x1> <y1> <x2> <y2> [duration(ms)]:在屏幕上模拟滑动操作(默认来源为 touchscreen)。
  5. draganddrop <x1> <y1> <x2> <y2> [duration(ms)]:模拟拖放操作(默认来源为 touchscreen)。
  6. press:执行按压操作(默认来源为 trackball)。
  7. press<dx> <dy>:模拟滚动操作(默认来源为 trackball)。
  8. motionevent <DOWN|UP|MOVE|CANCEL> <x> <y>:发送原始的 MotionEvent 事件(默认来源为 touchscreen)。
  9. keycombination [-t duration(ms)] <key code 1> <key code 2> ...:发送组合键事件(默认来源为 keyboard)。

以text为例:

adb shell input text "hello world"就可以在手机焦点处输入hello world

按钮事件 - keyevent实例

具体可参看

https://developer.android.com/reference/android/view/KeyEvent

adb shell input keyevent <keycode> 命令:

keycode 含义 代码
3 HOME 键 KEYCODE_HOME
4 返回键 FLAG_KEEP_TOUCH_MODE
5 打开拨号应用 KEYCODE_CALL
24 增加音量 KEYCODE_VOLUME_UP
25 降低音量 KEYCODE_VOLUME_DOWN
26 电源键 KEYCODE_POWER
27 摄像机照相(首先要启动相机应用) KEYCODE_CAMERA
122 移动光标到行首或列表顶部 KEYCODE_MOVE_HOME
123 移动光标到行末或列表底部 KEYCODE_MOVE_END
220 降低屏幕亮度 KEYCODE_BRIGHTNESS_DOWN
221 提高屏幕亮度 KEYCODE_BRIGHTNESS_UP
164 静音 KEYCODE_VOLUME_MUTE

使用keycode 或者 对应的代码都可以。

坐标

press、roll等操作都需要手机上的坐标,因此稍微研究一下:

image-20231210144459159

打开坐标后,会有屏幕上面的一部分显示坐标情况:

当触摸时,会显示X、Y实时坐标(图中没有),完成一道轨迹后,会显示dx、dy,即起止点的变化情况,滑动时还会有Xv、Yv表示速度。

有一些关键点:

  • (0,0)在手机左上角,X向右增长、Y向下增长

  • 左下角坐标约为(1450,3200),实际大小其实可以命令查到:

    image-20231210151612535

  • 正常滑动速度也就是Xv = 1左右

因此综上,举个例子,模拟一下锁屏的滑动操作:

swipe <x1> <y1> <x2> <y2>swipe 300 1000 300 500

从坐标(300,1000)滑到(300,500)即在手机的左侧的上半部分,模拟了一次短程的向上滑动;

截图

截图保存在电脑:adb exec-out screencap -p > sc.png

或者先保存在手机adb shell screencap -p /sdcard/sc.png,然后导出到电脑adb pull /sdcard/sc.png

录制屏幕以 mp4 格式保存到 /sdcard:adb shell screenrecord /sdcard/filename.mp4

需要停止时按 Ctrl-C,默认录制时间和最长录制时间都是 180 秒。
如果需要导出到电脑:

adb pull /sdcard/filename.mp4

获取activity

https://www.cnblogs.com/yongfengnice/p/14268229.html

android开发获取手机当前界面Activity完整包名的解决方法

  1. 电脑连上手机,终端输入:adb shell //进入手机终端

  2. 输入 logcat | grep cmp= //然后终端就进入了堵塞监听状态,比如 logcat | grep cmp=com.suyf.test 可以只查看该包名的信息

  3. 操作手机打开APP,终端就会监听显示出当前打开的APP包名和Activity名称。

    比如: START u0 {flg=0x10000000 cmp=com.miui.securitycenter/com.miui.permcenter.autostart.AutoStartManagementActivity} from uid 10514

    这个方法一般用于查看要跳转的第三方页面,很方便就可以查看到完整的页面路径。