【问题标题】:Update of Android system app, with/without platform signature安卓系统应用更新,有/无平台签名
【发布时间】:2013-01-23 11:34:22
【问题描述】:

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

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

【问题讨论】:

    标签: android system google-play signature platform


    【解决方案1】:

    让我们首先澄清所有类型的应用程序之间的区别。

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

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

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

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

    因此,

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

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

    答案是否定的。虽然 /system/app 中的应用程序可以使用与平台不同的证书进行签名,但这些应用程序的更新只能通过系统更新来实现。

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

    【讨论】:

    • 其他回答表示可以更新系统应用,例如stackoverflow.com/questions/7825045/can-a-system-app-be-updated。更新后的 apk 安装到 /data/app,系统使用更新后的版本。用户可能会卸载此更新版本,但不会卸载 /system/app 中的原始版本。
    • 我不知道这种可能性。但是,该应用程序将安装到 /data/app 文件夹,这与我的回答并不矛盾。 /system 文件夹只能通过系统更新进行更新。无论如何,感谢您澄清这个问题!
    • 谷歌应用程序如何更新,即使它在系统应用程序文件夹中
    【解决方案2】:

    系统不会将 /data/app 中的 apk 视为更新,除非签名与 /system/ap 中的 apk 匹配

    【讨论】:

      猜你喜欢
      • 2012-05-01
      • 1970-01-01
      • 2015-02-18
      • 2013-07-25
      • 1970-01-01
      • 2012-10-22
      • 1970-01-01
      • 2014-11-16
      相关资源
      最近更新 更多