共享用户ID和使用Android签名

时间:2010-11-05 19:07:37

标签: android

我正在尝试使用2个可以访问彼此数据的Android应用程序。我有两个测试应用程序,我正在尝试。我为每个'com.gabysoft.sharedfiles'设置了“共享用户ID”。但是,当我签署第一个应用程序并尝试安装它时,我收到错误:

11-05 16:50:33.422: ERROR/PackageManager(61): Package com.gabysoft.sharedfiles1 has no 
signatures that match those in shared user com.gabysoft.sharedfiles; ignoring!

显然,我没有正确签名(我正在使用Eclipse的“导出已签名的应用程序包”功能)。如何正确签署.apk文件,以便我没有这个问题?

谢谢

4 个答案:

答案 0 :(得分:7)

如果您设置了sharedUserId,并将应用程序从Eclipse安装到您的设备上(默认情况下在开发期间使用调试密钥对其进行签名),则会在该签名密钥和sharedUserId之间创建永久绑定。 /data/system/packages.xml以及Dalvik缓存,保存与应用程序关联的共享用户ID的信息。然而,我没有找到一种方法来持续擦除我的GN上的旧调试版本剩余部分,即使在XDA上关注相关帖子之后。

因此,如果您确实需要使用sharedUserId,您可以将任何固定字符串附加到sharedUserId,只是在开发和使用调试密钥时才在AnroidManifest.xml中更改它。但是,您应检查是否从未将其检入代码存储库或将其释放,因为一旦设置了sharedUserId并释放应用程序,就完成了。你必须永远不要改变它,否则你的应用程序将无法访问自己的文件,并且将无法使用。

注意,sharedUserId很棘手。有关可能的相关问题,请参阅此blog post

编辑:我刚刚注意到这个问题已经过了多久,但我仍然认为有人可能会找到有价值的答案,因为我在谷歌搜索时已经达到了这个问题。

答案 1 :(得分:3)

我认为这两个应用都必须使用相同的密钥进行签名。您是否可能只使用发布密钥签署了一个应用程序,另一个应用程序已经驻留在手机或模拟器上,但使用其他(调试?)密钥签名?

如果是这样,尝试卸载app 1,使用与app 2相同的密钥重新签名,然后同时安装它们。

或者可能有另一个应用程序包含相同的软件包名称但根本没有shareduserid - 可能值得尝试卸载它。也许第一个带有使用特定包名称安装的shareduserid的应用程序进入正常状态,此后包含该包和shareduserid的任何内容都必须匹配第一个签名的密钥。

答案 2 :(得分:1)

只需设置名称android:sharedUserId就像这种模式 xxx.yyy.zzz(点线)

答案 3 :(得分:0)

也许是因为你用相同的密钥库编译了两个版本..只是一个猜测