夺回你的剪贴板

发表于:

Android 12 更新带来的一个小众功能,就是躲在隐私设置中的「剪贴板访问警告」。开启后,每当有应用读取你剪贴板,都会弹出这样一个提示: App #1 pasted from your clipboard

如果你开启了这个功能(我这里默认是关闭的),就会发现

怎么有这么多 app 1都在无缘无故读剪贴板!

早就听说很多应用会偷摸读取剪贴板,但本人是没有太注意过。 手机也没啥其他重要的隐私信息可以复制? 但有了这个功能之后,每天看着屏幕下边蹦 toast ,确实觉得这个行为挺流氓的。 既然这样,干脆把重点 app 的剪贴板权限关闭好了。

剪贴板权限

我们要关心的权限有两个:READ_CLIPBOARDWRITE_CLIPBOARD,默认值都是allow2。 这里有个问题,如果安卓真的在乎剪贴板隐私,又为什么要默认允许应用随意读写用户的剪贴板呢?

其实很简单:安卓的剪贴板框架并不知道收到的请求是有用户主动操作,还是应用偷摸发起的。毕竟,你长按文本框出现的菜单,很可能是应用自己实现的。

微信自定义悬浮菜单
说这种话题就肯定要拿小而美开刀啦

想要在应用里正常复制和粘贴文本,就必须给这两个权限,而应用拿到这两个默认不需要询问直接允许的权限,自然是想干嘛干嘛。

还有些流氓程序为了跨应用追踪,往用户的剪贴板里丢垃圾,可以说是比偷剪贴板更恶心: 垃圾 这种可以直接关掉该应用的剪贴板写权限。

使用adb撤销权限

此处默认你已经安装了adb,并且可以正常连接手机。安装过程相见官方文档

先看一下到底有那些应用有READ_CLIPBOARD权限(另一个同理):

❯ adb shell cmd appops query-op --user 0 READ_CLIPBOARD allow


com.sec.android.app.desktoplauncher
com.google.android.apps.maps
...省略100行

我是没有那么多乱七八糟的应用,只有少数行为可疑需要处理。

撤销权限:

adb shell cmd appops set "com.example.app" READ_CLIPBOARD ignore

这里包名换成你自己的。

闲的没事还整了个批量修改的 one-liner ,有需要可以复制粘贴:

echo "Type in one app name on each line, then send EOF(ctrl+D twice)";echo "$(</dev/stdin)" | xargs -I {} adb shell cmd appops set {} READ_CLIPBOARD ignore

大概就这样了吧。

注意

在撤销READ_CLIPBOARD权限之后,在该应用中没法使用 长按悬浮窗-粘贴 或者 IME键盘 中的粘贴按钮。 但亲测某些输入法(Gboard)的剪贴板历史中可以正常点击粘贴,不是很影响使用。

没有WRITE_CLIPBOARD权限无法复制文本,这个没找到方法绕过。

Wechat的”已复制到剪贴板“toast
想不到吧,这个 toast 也是应用自己单独加的

  1. 这个现象还真只集中在国产大厂app,不予评价。 ↩︎

  2. 理论上来说需要在manifest.xml中申报,但只要写了就会给,也不会在安装过程在给用户提示。 ↩︎