小编Cha*_*bul的帖子

SecurityException:调用 setPrimaryClip 时不允许来自 uid xxx 的 <<other_package>> 执行 READ_CLIPBOARD

我收到了有关以下崩溃的报告

SecurityException: <<other_package>> from uid xxx not allowed to perform READ_CLIPBOARD
Run Code Online (Sandbox Code Playgroud)

当用户单击将文本复制到剪贴板的按钮时发生崩溃,如下所示。

val clipboard = context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
val clip = ClipData.newPlainText("label", shareUrl)
clipboard.setPrimaryClip(clip)
Run Code Online (Sandbox Code Playgroud)

所以我的应用程序不会尝试从剪贴板读取任何内容。真的很令人困惑为什么会发生这个错误。

有谁知道这个崩溃是如何发生的以及我该如何解决这个问题?

附加信息

这种崩溃仅发生在 Android 9 和 Android 10 中,并且不容易发生(20 万月活跃用户中只有 6 个用户)

我在 Crashlytics 中只看到两个 <<other_package>>(一个是银行应用程序,另一个是音乐应用程序)。

ClipboardService.java我尝试阅读和的源代码AppOpsManager.java,发现崩溃可能来自noteOpAppOpsManager.

这是崩溃的堆栈跟踪:

Fatal Exception: java.lang.SecurityException: <<other_package>> from uid xxx not allowed to perform READ_CLIPBOARD
       at android.os.Parcel.createException(Parcel.java:2087)
       at android.os.Parcel.readException(Parcel.java:2055)
       at android.os.Parcel.readException(Parcel.java:2003)
       at android.content.IClipboard$Stub$Proxy.setPrimaryClip(IClipboard.java:293)
       at android.content.ClipboardManager.setPrimaryClip(ClipboardManager.java:106)
       at my.package.MyClass.copyToClipboard(MyClass.java:63)
       at android.view.View.performClick(View.java:7375)
       at android.view.View.performClickInternal(View.java:7336)
       at android.view.View.access$3900(View.java:822) …
Run Code Online (Sandbox Code Playgroud)

android clipboardmanager android-app-ops

5
推荐指数
1
解决办法
1744
查看次数