我在尝试访问以下代码时收到 SecurityException 和 RemoteException。应用程序接口
val networkCapabilities =connectivityManager.getNetworkCapabilities(connectivityManager.activeNetwork)
异常获取
Fatal Exception: java.lang.SecurityException: Package android does not belong to 10319
at android.os.Parcel.createExceptionOrNull(Parcel.java:2385)
at android.os.Parcel.createException(Parcel.java:2369)
at android.os.Parcel.readException(Parcel.java:2352)
at android.os.Parcel.readException(Parcel.java:2294)
at android.net.IConnectivityManager$Stub$Proxy.getNetworkCapabilities(IConnectivityManager.java:3347)
at android.net.ConnectivityManager.getNetworkCapabilities(ConnectivityManager.java:1549)
Caused by android.os.RemoteException: Remote stack trace:
at android.app.AppOpsManager.checkPackage(AppOpsManager.java:7783)
at com.android.server.ConnectivityService.getNetworkCapabilities(ConnectivityService.java:2297)
at android.net.IConnectivityManager$Stub.onTransact(IConnectivityManager.java:1357)
at android.os.Binder.execTransactInternal(Binder.java:1195)
at android.os.Binder.execTransact(Binder.java:1159)
Run Code Online (Sandbox Code Playgroud)
我分析它,当我深入到AOSP代码,我得到的流量将会checkPackage从AppOpsManager类随附的屏幕截图,并从我们所知道的代码所示的方法,只要检查包的条件不等于MODE_ALLOWED那么只有我们将得到安全例外。但我没有。想法何时该条件会失败。
如果有人对此有任何想法,请帮助我,谢谢
android exception android-source android-app-ops android-connectivitymanager
我听说操作系统4.3具有隐藏功能,可以禁用某些权限,无需重新打包APK.当我们发布应用时,我们添加必要的权限并使应用工作.但该功能可以禁用权限.我知道一些应用程序已经这样做虽然它是一个黑客,我不需要关心.但是使用OS 4.3,用户可以轻松地做到这一点.
现在我的问题是,当禁用权限时,相应的API会抛出异常吗?(我想是的.)如果这是真的,我应该为一些操作添加try-catch,否则新手用户可能最终认为我的应用程序设计不佳.
或者,我将添加一些代码来检查权限是否有我的应用程序工作,如果不是我会显示一些粗鲁,没有礼貌的消息告诉不要这样做并退出应用程序.
(有人可能会关闭这个问题,说这不是一个真正的问题.)
我收到了有关以下崩溃的报告
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,发现崩溃可能来自noteOp于AppOpsManager.
这是崩溃的堆栈跟踪:
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)