应用程序启动前崩溃:SecurityException:Permission Denial:INTERACT_ACROSS_USERS_FULL

时间:2014-01-30 12:13:11

标签: android root android-permissions securityexception

背景

我有一个root设备,即Galaxy S3 I9300,基于Android 4.3的基于三星股票的ROM。

运行我正在使用此设备的应用时,我从未遇到任何问题。

问题

从昨天开始(我没有更改设备上的任何内容),每次打开应用程序时,它会显示很短的时间,关闭自身而没有任何崩溃对话框,但它显示下一个日志:

01-30 09:27:18.325: E/DatabaseUtils(2366): Writing exception to parcel
01-30 09:27:18.325: E/DatabaseUtils(2366): java.lang.SecurityException: Permission Denial: get/set setting for user asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL
01-30 09:27:18.325: E/DatabaseUtils(2366):  at com.android.server.am.ActivityManagerService.handleIncomingUser(ActivityManagerService.java:13140)
01-30 09:27:18.325: E/DatabaseUtils(2366):  at android.app.ActivityManager.handleIncomingUser(ActivityManager.java:2038)
01-30 09:27:18.325: E/DatabaseUtils(2366):  at com.android.providers.settings.SettingsProvider.callFromPackage(SettingsProvider.java:607)
01-30 09:27:18.325: E/DatabaseUtils(2366):  at android.content.ContentProvider$Transport.call(ContentProvider.java:279)
01-30 09:27:18.325: E/DatabaseUtils(2366):  at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:273)
01-30 09:27:18.325: E/DatabaseUtils(2366):  at android.os.Binder.execTransact(Binder.java:388)
01-30 09:27:18.325: E/DatabaseUtils(2366):  at dalvik.system.NativeStart.run(Native Method)

它甚至没有得到扩展Application的类的代码......

我发现了什么

似乎这个问题非常普遍(许多人已经报道过这个问题),但我找不到任何解决方案以及为什么会出现这种情况,除了拥有一个有根设备。

人们还说这里写的权限实际上是一个系统权限,但我从来没有听说过它,更不用说使用它了(甚至不确定它是什么)。

问题是,我正在处理的应用程序没有与root相关的任何内容,而且它在几天前就已经运行了。

我尝试重新安装ROM(Omega ROM v54)并禁用与xposed框架相关的任何内容。它没有帮助。

问题

如何解决此问题?我怎么知道其他用户不会有这个问题?

它甚至与root设备有关吗?


编辑:我认为我找到了一个解决方法,通过在设置屏幕的开发人员部分选择“撤消USB调试...”来解决问题。它似乎起初工作,但后来问题又回来了,点击它就没有任何帮助......


编辑:我认为这只是应用程序本身或ROM上的一个错误,因为我无法重现它。这很奇怪,因为我很确定我已经尝试调试应用程序并在acCreate方法(可能是应用程序类本身)上放置一个断点,并且它并没有就此止步。

4 个答案:

答案 0 :(得分:1)

01-30 09:27:18.325: E/DatabaseUtils(2366): java.lang.SecurityException: Permission Denial: get/set setting for user asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL

此错误来自您在应用中get/set任何用户/系统设置的位置。此特定错误日志显示您的设置get/set(来自您的应用代码)正在从用户0(USER_OWNER)进行调用,但您正在更改的设置是针对用户-2({{1 }})。

您无法更改其他用户'没有权限USER_CURRENT的设置。

您可能没有考虑在代码中使用不同的用户ID(在调用userID和设置所针对的用户ID之间)以及使用不正确的用户ID调用android.permission.INTERACT_ACROSS_USERS_FULL设置的情况(I我不知道为什么他们在发生这种情况时会有所不同 - 例如,当设备上有多个用户帐户时可能会发生这种情况。

您需要修改代码以将正确的userID转换为逻辑,并为相应的userID调用设置set/get(调用用户ID和修改设置的用户ID应该相同)。< / p>

答案 1 :(得分:0)

你可以尝试将apk移动到/ system / app /并检查它是否有效,因为它将以用户0的形式执行。之后你可以比较两个日志(工作一个和常规一个)来查看该应用程序是否停止。

从你的shell安装它:

adb remount
adb push yourApp.apk /system/app/
adb reboot

答案 2 :(得分:0)

apk移至/system/app/。它不会以用户0的形式执行,但它允许您使用此权限:

android.permission.INTERACT_ACROSS_USERS_FULL

答案 3 :(得分:0)

我在Android Wear手表上遇到过这种SecurityException,它发生在我执行通知操作时。 我也无法复制它,但注意到,当我使用IDE或adb install重新安装应用程序时,它才会发生。我从来没有在我的Google Play密钥签名的正确版本上看到它。