【问题标题】:Resource/Code path changing for pkg on Android App update在 Android 应用更新上更改 pkg 的资源/代码路径
【发布时间】:2014-02-07 20:00:01
【问题描述】:

如果我用新版本更新我的应用,sharedPreferences 就会消失。

LogCat 说:包 de.xxx.yyy 代码路径从 /data/app/de.xxx.yyy-1.apk 到 /data/app/de.xxx.yyy-2.apk; 保留 数据和使用新的

包装和以前一样。

清单文件的变化是:

android:versionCode="6" -> android:versionCode="7"
android:versionName="1.6.000" -> android:versionName="1.8"

并添加权限:

<uses-permission android:name="android.permission.VIBRATE" />

为什么是新的安装路径和新的数据? 有人知道发生了什么吗?

更新 也许proguard是问题所在。 ??? 新的 sharedPreferences 有其他结束字母。

OLD: de.xxx.yyy.a.f.xml
NEW: de.xxx.yyy.a.h.xml

我从课堂上得到名字。

SharedPreferences mPrefs = activity.getSharedPreferences(
                THECLASS.class.getName(), Activity.MODE_PRIVATE);

【问题讨论】:

  • 包名更改是正常的,但不应该清除首选项。您可能遇到了一些设备/模拟器错误。
  • 谢谢,但我尝试了三种不同的设备。之前的更新并没有清除偏好。
  • 您如何确认偏好已消失?你检查设备上的实际文件了吗?
  • 数据仍在设备上。但是也有新的首选项。旧:de.xxx.yyy.a.f.xml 和新的有其他结尾字母 *.a.h.xml

标签: android sharedpreferences


【解决方案1】:

永远不要使用类名作为 sharedPreferences 的键。

sharedPreferences 最好使用常量字符串而不是类名。

Proguard 会混淆您的类名,如果您在项目中添加或修改某些内容,这可能会被更改。使用 proguard,您的类名是动态的。

SharedPreferences mPrefs = activity.getSharedPreferences(
                YOURSTRING, Activity.MODE_PRIVATE);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 2021-11-05
    • 2013-08-08
    • 1970-01-01
    • 2014-08-30
    • 2014-08-29
    • 1970-01-01
    相关资源
    最近更新 更多