android
2025-06-12
2025-06-12
毫无疑问,从幼年开始的好习惯是最完美的,我们把这叫做‘教育’,因为教育其实就是一种早年开始的习惯。所以我们看到与以后的时期相比,幼年时代学语言,舌头学习表达方式和发音时更柔顺,学各种技巧动作时,关节更灵活。——培根
源码地址:
https://gitee.com/VampireAchao/honor-calc-automation
Honor Calc Automation:Android 无障碍自动化计算器开发全流程详解
项目简介
Honor Calc Automation 是一个基于 Kotlin 的 Android 自动化工具,利用无障碍服务(AccessibilityService)自动操作荣耀计算器,实现批量、自动化输入和计算数学公式。项目结构清晰,界面简洁,支持日夜间主题,适合学习 Android 无障碍自动化开发。
技术栈与项目结构
- 开发语言:Kotlin(核心),部分 Java
- 构建工具:Gradle
- UI 框架:Material Components
- 主要模块:
MainActivity.kt
:主界面与用户交互MyAccessibilityService.kt
:无障碍自动化服务res/
:布局与主题资源
主要功能
- 批量自动计算:用户输入公式,应用自动调用荣耀计算器并模拟按钮输入,完成计算。
- 无障碍服务自动操作:通过 AccessibilityService 实现对第三方应用(计算器)的自动化控制。
- 主题适配:支持日夜间模式,提升视觉体验。
- 权限引导:自动检测无障碍权限,便捷引导用户开启。
开发流程与调试技巧
1. 如何确定不同手机的计算器包名
在自动化开发中,不同品牌手机的计算器包名可能不同。推荐用 logcat 快速筛选:
- 步骤:
-
在 Android Studio 的 logcat 面板,输入
cmp=
或Starting:
作为过滤条件。 -
在手机上手动打开计算器应用,观察 logcat 输出,通常会出现如下日志:
1
Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.hihonor.calculator/.Calculator }
其中
cmp=
后面的com.hihonor.calculator
就是包名。 -
也可以用 adb 命令辅助:
1
adb shell "dumpsys window | grep mCurrentFocus"
切换到计算器界面,命令输出会包含当前前台应用的包名。
-
2. 节点结构分析与调试
开发无障碍自动化时,首先要了解目标应用界面控件结构。项目中实现了递归遍历所有节点,打印详细信息和 actions 的调试代码:
- 作用:输出当前界面所有控件(节点)的类名、文本、资源ID、描述、可编辑性、子节点数和可用操作,便于分析每个按钮的属性。
- 开发流程:
- 先实现递归遍历并打印所有节点信息。
- 运行服务,在目标界面(如计算器)触发无障碍事件,查看日志输出。
- 分析日志,查找每个按钮(如数字、运算符、等号)对应的
text
、resourceId
等属性。 - 根据日志信息,选择合适的查找方式(如通过
text
或resourceId
)。 - 用分析得到的节点信息,编写代码自动查找并点击对应按钮,实现自动化输入。
这种方式极大提高了无障碍自动化开发的准确性和效率,避免了盲目猜测控件属性。
关键代码逻辑详解
1. 主界面交互(MainActivity.kt
)
- 公式输入与提交:用户在输入框填写公式,点击“计算”按钮后,调用无障碍服务的静态方法
enqueueFormula
提交公式。 - 无障碍权限检测:如未开启无障碍服务,点击“开启无障碍”按钮跳转系统设置。
- 用户反馈:通过 Toast 显示提交状态或错误提示。
1 |
|
2. 无障碍自动化服务(MyAccessibilityService.kt
)
2.1 服务初始化与事件监听
- 单例模式:通过
companion object
保证服务唯一实例,并存储待处理公式。 - 服务连接:
onServiceConnected
设置监听窗口变化和点击事件,确保只在计算器界面处理公式。
2.2 公式处理流程
- 公式队列:
enqueueFormula
静态方法接收公式,触发处理。 - 自动启动计算器:
launchCalculator
方法通过显式 Intent 启动荣耀计算器。 - 窗口变化监听:
onAccessibilityEvent
检测到计算器界面时自动处理公式。
2.3 节点遍历与按钮点击
- 递归遍历节点并打印:
logAllNodes
方法递归遍历所有节点,输出详细信息,辅助开发调试。 - 输入公式:
inputFormula
遍历界面节点,查找并点击对应数字、运算符按钮,最后点击等号。 - 节点查找:
findNodeByResId
递归查找指定资源 ID 的节点,确保兼容不同界面结构。 - 日志调试:详细日志输出,便于调试和问题定位。
1 |
|
主题适配与资源管理
- 日夜间主题:通过
values/themes.xml
和values-night/themes.xml
分别定义日间与夜间配色,自动适配系统模式。 - 布局资源:
activity_main.xml
提供输入框、按钮等基础交互组件。
部署与体验
- 克隆仓库
git clone git@gitee.com:VampireAchao/honor-calc-automation.git
- 用 Android Studio 打开项目
- 运行应用,按提示开启无障碍服务
- 输入公式,点击“计算”体验自动化功能
总结与亮点
- 自动化与无障碍结合:通过 AccessibilityService 实现对第三方应用的自动操作,适合批量计算等场景。
- 开发流程科学:先用 logcat 确定包名,再递归打印节点,分析日志,确定控件属性,再实现自动点击,极大提升开发效率和准确性。
- 代码结构清晰:主界面与服务解耦,易于扩展和维护。
- 丰富日志与调试支持:便于开发者定位问题。
- 适合学习与二次开发:可作为 Android 无障碍自动化的入门项目。
欢迎感兴趣的开发者参与贡献或提出建议!