我已经在一个项目上工作了一段时间,目标是至少4.0 ICS。最近,我得到了一个新的Play版Moto G,在运行所有更新后,运行4.4(KK)。所以我决定尝试在其上部署程序以及我拥有的其他两个测试设备。
一切都很顺利,直到我的程序达到了尝试通过PreferenceManager.getDefaultSharedPreferences(Context)访问SharedPreference的程度。在调试并运行每个帧之后,我能够确定值实际上是写入首选项文件(或者至少看起来是因为SharedPreference对象中的Map容器包含我之前放在那里的值)。但是,当我尝试使用各自的键读取任何值时,我得到一个INSTALL_FAILED_SHARED_USER_INCOMPATIBLE值,这导致我的程序崩溃(不是直接但它导致正在进行的函数需要来自Preferences的正确输出失败)。据我所知,这只发生在4.4上。
我已经在网上搜索了SO以获得答案,我似乎无法找到解决我问题的任何东西。我的清单没有声明sharedUserId或sharedUserLabel所以我认为这不会导致问题。我已经卸载并重新安装了包几次无济于事。我的印象是,用于SharedPreference的XML文件被写入程序的本地目录,据我所知,程序本身至少允许读/写访问(除非这是4.4中的更改)。并且它似乎没有将该位置存储在外部源上,因为Moto G中没有SD卡。
有谁知道如何解决这个问题?就目前而言,我的程序无法部署在4.4设备上,我真的希望不会出现这种情况。
答案 0 :(得分:0)
经过一番调查后,我终于弄明白了我的问题。它是多个不连贯的SO帖子的高潮,也是许多近乎毫无价值的谷歌搜索。
我的一些偏好需要在它们写入文件之前加密,显然因为4.2 Android使用OpenSSL作为传统加密的新安全提供程序。因此,经过几天的研究,我能够通过强制使用Crypto SP并更清楚地指定加密和转换算法/模式/填充来解决我的问题,以帮助不仅使块大小一致,而且使它&# 39;更清楚的是发生了什么,而不是让API确定什么是最好的。在这种情况下,即使在执行Crypto之后,它仍然被打破,因此进一步深入A / M / P.
所以我最初的问题是掩盖了实际的异常,想出这个问题真的很有趣。