【问题标题】:sharedUserId: safe to change when app is already in market?sharedUserId:当应用程序已经上市时可以安全更改吗?
【发布时间】:2011-03-16 07:30:09
【问题描述】:

对于我们应用程序的下一个版本,我想更改 sharedUserId,因为我们现在使用内部控制仪表板应用程序,该应用程序必须写入其他应用程序的设置文件。

但是由于该应用程序已经安装在许多手机上,这会是一个问题吗?我在模拟器上运行了一个小测试,我在设备日志中看到无法写入 *.bak 版本的首选项文件的异常。不确定这有多重要。奇怪的是,即使 shared_prefs 文件夹是使用另一个 Linux 用户 ID 创建的,安全设置似乎仍然有效。

以前有人试过吗?

【问题讨论】:

  • 好吧,看来这不可能了,该死。当尝试访问使用未设置自定义用户 ID 的应用程序版本创建的数据库文件时,它会崩溃。无论如何,默认用户 ID 是什么?第二个应用是否可以将其用户 ID 设置为第一个应用的默认用户 ID?

标签: android userid sharedpreferences


【解决方案1】:

再回答我自己的问题:

不,这不安全。由于通过 Android 电子市场更新应用程序不会删除数据库和偏好文件,因此新版本将无法读取或写入这些文件(因为它们已创建在不同的 Linux 用户 ID 下),并且应用程序将在更新后崩溃。您必须要求您的用户完全卸载并重新安装该应用程序,这当然不推荐。

作为一般规则,我由此得出结论: 每当您开始开发新应用程序时,请务必手动设置 android:process 和 android:sharedUserId 属性!如果您不需要它并没有什么坏处,但它可以让您完全控制哪些应用可以访问此应用的私有资源。

【讨论】:

  • 感谢您发布此信息,我几乎要发布 sharedUserId 的更新了。遗憾的是,我们在创建应用程序时从未了解到这一点:/
  • 对于我们这些没有提前计划的人,有没有办法解决这个问题?
  • @BarryFruitman 如果丢失用户数据不是问题,您可以使用不同名称的新文件。由于 Android 错误导致我们的文件在某些​​设备上无法访问,我们不得不这样做一次。
  • 一个更简单的解决方案是不使用android:process(用户敌对)或android:sharedUserId(无意义,通过IPC和signature级别权限更好地解决问题)。
  • 如果我尝试使用不同的 sharedUserId 更新应用程序,它甚至不会安装。安装错误:INSTALL_FAILED_UID_CHANGED
【解决方案2】:

目前尚无解决方案,但关注已注册的问题可能会让 Google 解决此问题:

http://code.google.com/p/android/issues/detail?id=1227

http://code.google.com/p/android/issues/detail?id=14074

【讨论】:

  • 问题在于,这不是一个错误,而是一个特性。在不指定共享用户 ID 的情况下,Android(或底层 Linux)将为您分配一个。一旦你设置了一个,它的定义就会不同。由于在任何 Linux 系统上,除非获得许可,否则不允许一个用户访问另一个用户的文件,这几乎是预期的行为。
  • 没错,但提到的错误是 Android 操作系统无法识别分配/更改的 sharedId 并相应地更新已安装应用数据的权限。
猜你喜欢
  • 1970-01-01
  • 2013-01-29
  • 1970-01-01
  • 1970-01-01
  • 2021-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多