SecurityException 华为手机
Posted
技术标签:
【中文标题】SecurityException 华为手机【英文标题】:SecurityException Huawei phone 【发布时间】:2021-03-09 16:40:44 【问题描述】:我们的应用在华为设备(华为 P30 Pro、android 10)上获得了 SecurityEception。我们不知道是什么原因造成的,谷歌搜索也没有结果。 完整的堆栈跟踪:
java.lang.SecurityException:
at android.os.Parcel.createException (Parcel.java:2071)
at android.os.Parcel.readException (Parcel.java:2039)
at android.os.Parcel.readException (Parcel.java:1987)
at android.net.IConnectivityManager$Stub$Proxy.getActiveNetworkInfo (IConnectivityManager.java:2153)
at android.net.ConnectivityManager.getActiveNetworkInfo (ConnectivityManager.java:1006)
at com.huawei.android.totemweather.common.NetUtil.isNetworkAvaialble (NetUtil.java:107)
at com.huawei.android.totemweather.widget.controller.AutoRefreshManager.sendRefresh (AutoRefreshManager.java:78)
at com.huawei.android.totemweather.widget.controller.WidgetWeatherServiceAgent$WeatherDataObserver$WeatherReceiver.lambda$onReceive$0$WidgetWeatherServiceAgent$WeatherDataObserver$WeatherReceiver (WidgetWeatherServiceAgent.java:509)
at com.huawei.android.totemweather.widget.controller.WidgetWeatherServiceAgent$WeatherDataObserver$WeatherReceiver$$Lambda$0.run (WidgetWeatherServiceAgent.java:2)
at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641)
at java.lang.Thread.run (Thread.java:929)
Caused by: android.os.RemoteException:
at android.app.ContextImpl.enforce (ContextImpl.java:2001)
at android.app.ContextImpl.enforceCallingOrSelfPermission (ContextImpl.java:2029)
at com.android.server.ConnectivityService.enforceAccessPermission (ConnectivityService.java:2195)
at com.android.server.ConnectivityService.getActiveNetworkInfo (ConnectivityService.java:1507)
at com.android.server.HwConnectivityService.getActiveNetworkInfo (HwConnectivityService.java:2559)
有没有人知道可能是什么原因造成的?似乎这可能与从 Huawei Weather 小部件访问网络时引发的异常有关。
编辑:我们创建一个自定义启动器。
【问题讨论】:
这似乎不是来自您的应用,除非您的应用是华为天气小部件。 但如果不是来自我们的应用程序,为什么它会出现在 Google Play 商店的崩溃报告中?是否与我们正在创建自定义启动器这一事实有关? 这是可能的,但即便如此,此代码也不会在您的进程中运行。此代码将在华为进程中运行。 但这并不能解释为什么我们的应用会出现异常... 也许华为对 Android 的一些修改会混淆 Play Store 的崩溃日志记录功能。 【参考方案1】:根据经验,我可以告诉您,华为的小部件不能很好地与第三方启动器配合使用。我自己在 Google Play 上也有一个启动器,并且大量的崩溃来自(并且仍然是)来自 Hauwei 设备上的小部件。在过去的几周里,我也发生了多次类似的崩溃,特别是来自华为 P30。 问题(几乎)总是小部件内的安全异常。但是,您似乎没有可以添加到清单中来解决此问题的权限。我也没有办法捕获这些异常。
根据我从其他第三方启动器(以及我也在做的)中阅读和听到的内容,是过滤掉来自华为的所有小部件,以便无法添加它们。恐怕没有其他方法可以从您这边解决这个问题。 您可以查看 Lawnchair Launcher 的存储库,了解如何将华为小部件列入黑名单: https://github.com/LawnchairLauncher/Lawnchair/blob/87c0ab17050bca7fe354bf99d41a461b04aa9958/src/com/android/launcher3/compat/AppWidgetManagerCompat.java
但是,P30 上至少有一个来自华为的小部件不排除在此之外。如果有一份来自 Hauwei 的小部件列表,那就太酷了,这样可以更可靠地排除它们。
【讨论】:
【参考方案2】:所以我搜索了 remoteException 的含义,它似乎是在远程对象不再可用时发生的,通常意味着它崩溃了。鉴于它是他们尝试访问其信息的小部件,小部件或应用程序可能会在尝试访问不可用的信息时崩溃。正在报告的安全异常可能是由于缺少权限引起的。因此,可能缺少权限,这会阻止小部件/应用程序的信息被正确访问,从而导致崩溃并且无法按预期工作。请检查您的清单是否缺少权限,尤其是连接/互联网访问权限。
【讨论】:
以上是关于SecurityException 华为手机的主要内容,如果未能解决你的问题,请参考以下文章
SecurityException:权限拒绝:读取(仅在模拟器上)
尝试使用 JSR-179 时引发 SecurityException
Android SecurityException: getDataNetworkTypeForSubscriber问题修复
Android SecurityException: getDataNetworkTypeForSubscriber问题修复
8.0之后 java.lang.SecurityException: Permission Denial: null asks to run as user 864 but is calling f