常见问题
一些可能影响使用体验的问题和对应解决方案, 某些方案可能并不适用您的机型系统
如您有更好的方案或想对现有方案进行补充, 请点击底部 为此页提供修改建议
渠道区别
目前有两个渠道在使用,它们可互相安装覆盖,但存在区别
渠道 | 下载方式 | 自更新逻辑 | 受限制的设置 | 无障碍工具声明 |
---|---|---|---|---|
gkd | 官网/GitHub | 弹窗更新(镜像加速) | 可能受限 | 有 |
play | Google Play | 无(必须Google Play) | 不会 | 无 |
根据 Google Play 政策,必须以 支持残障人士为主要用途 才能使用 无障碍工具声明
如果没有这个声明,系统会隔段时间显示通知(discussions#744),内容如下
查看权限设置(GKD可以查看和控制您的屏幕。点按即可查看。)
如果你无法忍受这个通知,切换到 gkd 渠道即可
耗电说明
首先 GKD 默认情况下并不耗电,有的人以为关闭更新检测,关闭日志就能减少耗电,并不正确
真正的耗电在于 启用的规则 和 当前应用界面无障碍节点数量及无障碍事件刷新频率
如果想追求低耗电,那应该开启少量的规则,由于之前的默认规则数量有 1300+,很多人喜欢无脑开启规则
甚至有的用户同时开启多个订阅, 而这些订阅基本都 fork 自默认订阅, 这相当于同时开启多个重复规则
开启这么多规则,并且在这些规则匹配的界面使用手机,不耗电是不可能的
此外,某些软件如抖音的无障碍节点数量比较多,并且产生无障碍事件频率也比较高
长时间下使用此类软件的规则会比较耗电,请自行考虑后再启用
shizuku
界面识别
单纯靠无障碍提供的 API 无法准确判断当前处于应用的哪个子界面 (activityId)
在此种情况下, GKD 将运行当前应用的所有规则, 容易造成无效匹配和误触
授权 shizuku 后可以让 GKD 准确识别当前应用子界面
强制点击
使用无障碍 API 发出的点击事件 clickCenter
会被某些应用识别到, 导致点击表现无效
授权 shizuku 后可以让 GKD 发出的点击事件无法被应用识别到, 从而正常触发点击
工作空间
某些用户可能选择将应用安装到其他用户空间隔离
这导致 GKD 无法从当前应用列表识别到应用已安装
授权 shizuku 后可以让 GKD 识别到其他用户空间的应用
- 只识别主空间未安装应用
- 只在主空间有应用变更行为时才全量更新用户空间应用列表
如果不开启此项, 对于未安装的应用, 有以下影响
- 全局规则 的内部配置禁用失效
- 应用规则 不会启用
对于 全局规则
可使用手动编辑禁用, 添加 appId 到禁用列表后将生效
若要开启 应用规则
, 在对应订阅-应用规则-显示未安装应用-打开右侧开关即可
不生效原因
这是因为某些订阅有将近 2k 个应用, 而一般用户最多使用到 200 个
如果将 未安装的应用 的应用规则也全部开启, 这将额外占用 1800 个应用的无效规则配置内存
后台运行
如何尽量保持后台运行不被系统暂停/杀死
- 任务切换界面给 GKD 应用卡片加锁即可
一般情况下, 使用此项即可正常后台运行, 如果不行请使用下面的步骤
- 打开 GKD 首页, 开启
常驻通知
- 允许后台活动, 关闭省电策略, 或者设置 GKD 的省电策略为无限制
- 允许 GKD 自启动
某些系统如 MagicOS9 需要打开 允许后台活动
, 否则 GKD 在后台时会被系统暂停执行
受限制的设置
无障碍列表界面提示
受限制的设置(出于安全考虑,此设置目前不可用)
或提示
系统已拒绝向此应用授予访问权限
这是因为某些系统对于 不在应用商店等可信任来源安装的 不能直接开启无障碍权限
解除步骤: GKD 应用信息 - 允许受限制的设置, 注意某些设备位置不太一样
原生系统 应用信息 - 右上角 - 允许受限制的设置 | 小米系统 应用信息 - 高级设置 - 允许受限制的设置 |
---|---|
如果按步骤开启后 无障碍列表 仍然提示不可用, 可尝试 重启设备
如果应用信息右上角没有 允许受限制的设置
选项, 请参考下一节方案
无法开启无障碍
某些系统如 ColorOS 有更严格的无障碍限制
如果你是其他来源安装或 GKD 内部更新后也会无法开启无障碍, 表现以下行为
- 提示 受限制的设置, 但是没有找到 允许受限制的设置 的选项
- 不提示 受限制的设置, 无障碍开启按钮可点击, 但点击后没有响应, 无法开启
可以通过以下方式解决, 可在 设置 - 关于 - 分享应用 获取 APK 文件
使用系统信任的方式进行安装, 例如在系统文件管理中查看 APK 文件后点击安装, 是覆盖安装无需卸载
如果使用系统安装器, 但是在冻结了应用安装器
com.oplus.appdetail
状态下安装的 APK, 需解冻后重新安装使用 App Ops 在权限管理中手动授予 ACCESS_RESTRICTED_SETTINGS 权限
关闭无障碍警告弹窗
建议
授予 写入安全设置权限
后可自行开启无障碍, 而无需设置此项
这个方案不一定适用所有机型
大多数设备开启无障碍时都会出现 10s 的无障碍警告弹窗
若是只需要开启一次则无所谓但是如果开启次数比较多每次都有这个警告等待就很烦人了
你可能已经看到这个界面还有一个开关, 也就是下方的 快捷方式
开关
打开一次下面这个快捷方式开关后, 上面的的开启按钮就不会出现警告弹窗了, 但是你会发现屏幕侧边出现了一个应用小图标, 多数情况下我们并不需要这个图标
到无障碍界面-"无障碍"按钮-使用按钮或手势-点击切换为手势即可隐藏
以 Xiaomi HyperOS 为例子, 下面是完整的关闭弹窗流程截图
adb 授权失败
在使用 adb 手动授予 写入安全设置权限
时可能会提示权限不够,具体报错如下:
adb shell pm grant li.songe.gkd android.permission.WRITE_SECURE_SETTINGS
Exception occurred while executing 'grant':
java.lang.SecurityException: grantRuntimePermission: Neither user 2000 nor current process has android.permission.GRANT_RUNTIME_PERMISSIONS.
at android.app.ContextImpl.enforce(ContextImpl.java:2384)
at android.app.ContextImpl.enforceCallingOrSelfPermission(ContextImpl.java:2412)
at com.android.server.pm.permission.PermissionManagerServiceImpl.grantRuntimePermissionInternal(PermissionManagerServiceImpl.java:1383)
at com.android.server.pm.permission.PermissionManagerServiceImpl.grantRuntimePermission(PermissionManagerServiceImpl.java:1365)
at com.android.server.pm.permission.PermissionManagerService.grantRuntimePermission(PermissionManagerService.java:573)
at android.permission.PermissionManager.grantRuntimePermission(PermissionManager.java:610)
at com.android.server.pm.PackageManagerShellCommand.runGrantRevokePermission(PackageManagerShellCommand.java:2717)
at com.android.server.pm.PackageManagerShellCommand.onCommand(PackageManagerShellCommand.java:301)
at com.android.modules.utils.BasicShellCommandHandler.exec(BasicShellCommandHandler.java:97)
at android.os.ShellCommand.exec(ShellCommand.java:38)
at com.android.server.pm.PackageManagerService$IPackageManagerImpl.onShellCommand(PackageManagerService.java:6840)
at android.os.Binder.shellCommand(Binder.java:1092)
at android.os.Binder.onTransact(Binder.java:912)
at android.content.pm.IPackageManager$Stub.onTransact(IPackageManager.java:4352)
at com.android.server.pm.PackageManagerService$IPackageManagerImpl.onTransact(PackageManagerService.java:6824)
at android.os.Binder.execTransactInternal(Binder.java:1392)
at android.os.Binder.execTransact(Binder.java:1299)
下面参考 shizuku 文档 的解决方案
HyperOS/MIUI(小米、POCO)
在开发者选项
中开启USB 调试(安全设置)
,注意不是USB 调试
如果开启USB 调试(安全设置)
后继续报错,可以尝试在 adb 命令前添加 sudo
提升权限后再执行 adb 命令ColorOS(OPPO & OnePlus)
在开发者选项
中关闭权限监控
或打开禁止权限监控
Flyme(魅族)
在开发者选项
中关闭Flyme 支付保护
关闭限制后重新运行命令即可