这是我面临的一个相当奇怪的问题。我有一个解析JSON文件的应用程序来获取一些URL。该文件存储在assets文件夹中。现在,当我从Eclipse运行未签名的应用程序时,应用程序按预期运行;显示很好,一切。
PlayStore版本存在问题。当我尝试运行PlayStore的应用程序时,我明白了:
08-17 22:03:38.932: E/DatabaseUtils(2350): Writing exception to parcel
08-17 22:03:38.932: E/DatabaseUtils(2350): 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
08-17 22:03:38.932: E/DatabaseUtils(2350): at com.android.server.am.ActivityManagerService.handleIncomingUser(ActivityManagerService.java:13140)
08-17 22:03:38.932: E/DatabaseUtils(2350): at android.app.ActivityManager.handleIncomingUser(ActivityManager.java:2038)
08-17 22:03:38.932: E/DatabaseUtils(2350): at com.android.providers.settings.SettingsProvider.callFromPackage(SettingsProvider.java:607)
08-17 22:03:38.932: E/DatabaseUtils(2350): at android.content.ContentProvider$Transport.call(ContentProvider.java:279)
08-17 22:03:38.932: E/DatabaseUtils(2350): at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:273)
08-17 22:03:38.932: E/DatabaseUtils(2350): at android.os.Binder.execTransact(Binder.java:388)
08-17 22:03:38.932: E/DatabaseUtils(2350): at dalvik.system.NativeStart.run(Native Method)
08-17 22:03:38.992: E/SystemClock(2711): File Open Failed
08-17 22:03:40.954: E/DatabaseUtils(2350): Writing exception to parcel
08-17 22:03:40.954: E/DatabaseUtils(2350): 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
08-17 22:03:40.954: E/DatabaseUtils(2350): at com.android.server.am.ActivityManagerService.handleIncomingUser(ActivityManagerService.java:13140)
08-17 22:03:40.954: E/DatabaseUtils(2350): at android.app.ActivityManager.handleIncomingUser(ActivityManager.java:2038)
08-17 22:03:40.954: E/DatabaseUtils(2350): at com.android.providers.settings.SettingsProvider.callFromPackage(SettingsProvider.java:607)
08-17 22:03:40.954: E/DatabaseUtils(2350): at android.content.ContentProvider$Transport.call(ContentProvider.java:279)
08-17 22:03:40.954: E/DatabaseUtils(2350): at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:273)
08-17 22:03:40.954: E/DatabaseUtils(2350): at android.os.Binder.execTransact(Binder.java:388)
08-17 22:03:40.954: E/DatabaseUtils(2350): at dalvik.system.NativeStart.run(Native Method)
应用程序没有崩溃但是JSON文件没有被解析以显示数据。这是奇怪的原因,这是我几分钟前没有签名的同一个应用程序。
这是因为我使用与之前应用相同的密钥对应用进行了签名吗?
PS:我尝试添加声明的权限,但它没有帮助。
答案 0 :(得分:2)
错误消息非常明确:
this requires android.permission.INTERACT_ACROSS_USERS_FULL
您需要尝试将该权限添加到AndroidManifest.xml
您正在运行的未签名版本在Android的开发者模式下运行,因此有可能为什么它不需要该权限(我可以找到一个参考来支持这个我自己没时间测试它,或者你正在构建的未签名版本有代码更改,包括额外的权限。
除非您的运行系统与您的应用系统具有相同的签名,否则它不应授予您的系统级权限。
编辑:为了它的价值,至少有一次声称错误可能是空指针异常的红色鲱鱼:http://www.silverbaytech.com/2014/04/11/android-error-android-permission-interact_across_users_full/
ProGuard的简短摘要是:Permission Denial Error - SpeechRecognizer as a continuous service? (android.permission.INTERACT_ACROSS_USERS_FULL)
答案 1 :(得分:1)
我修改了ProGuard
配置,以包含提到的所有规则here。
基于another answer by Eric LaFortune,我必须将GSON
使用的所有类添加为ProGuard
配置的例外。所以,因为我的应用程序中有一个名为Response
的类,所以我必须添加规则:
-keepclassmembers com.littlejava.myapp.util.Response { <fields> };
应用程序工作文件。正如Rob S.
所提到的,logcat只是一个红色的鲱鱼。