更新Android系统应用程序,带/不带平台签名

And*_* QS 8 android platform system signature google-play

我有一个系统应用程序,OEM安装系统映像,但由我签名.如果我将更新的apk上传到市场,市场应用程序是否会自动安装此更新?

如果我的系统应用程序使用平台签名而不是我的签名,这意味着任何更新也必须使用平台签名进行签名,对吗?可以从市场更新平台签名的apk吗?

Yur*_*ury 6

让我们首先澄清所有类型的应用程序之间的差异.

系统应用程序是位于/system/app文件夹中的应用程序.这些应用程序有一个标志ApplicationInfo.FLAG_SYSTEM集.在普通设备中,/system安装分区以进行只读访问.因此,系统应用程序无法更新,因为它位于只读位置.这些应用程序只能作为OTA更新的一部分进行更新.

普通应用程序位于/ data分区,它是可读写的.因此,这些应用程序可以由系统更新.

现在让我们谈谈签名.某些Android组件受签名类型的权限保护.这意味着,如果要访问受此类权限保护的组件,则必须使用与受保护组件相同的证书对应用程序进行签名.这不仅适用于Android系统,也适用于Android应用程序,即在您的应用程序中,您可以拥有受签名权限保护的组件,因此,只有具有相同签名的应用程序才能访问此组件.

我们要回答你的问题的第三个论点是Android禁止安装具有相同包名但签名不同的包.

从而,

我有一个系统应用程序,OEM安装系统映像,但由我签名.如果我将更新的apk上传到市场,市场应用程序是否会自动安装此更新?

如果我的系统应用程序使用平台签名而不是我的签名,这意味着任何更新也必须使用平台签名进行签名,对吗?可以从市场更新平台签名的apk吗?

答案是不.虽然位于/ system/app中的应用程序可以使用与平台不同的证书进行签名,但只有系统更新才能更新这些应用程序.

要解决您的问题,您可以更改应用程序的软件包名称,使用您的应用程序进行签名(如果应用程序不需要访问受保护的Android组件)或平台(如果应用程序应该可以访问受保护的组件,并且您有权访问这个签名)并将此应用程序推向市场.然后,您将通过市场收到应用程序的更新.

  • 其他答案表明系统应用程序可以更新,例如http://stackoverflow.com/questions/7825045/can-a-system-app-be-updated.更新的apk安装到/ data/app,系统使用该更新版本.用户可能会卸载此更新版本,但不能卸载/ system/app中的原始版本. (2认同)
  • 即使谷歌应用程序位于系统应用程序文件夹中,它也会如何更新 (2认同)