我有一个 OEM 使用系统映像安装的系统应用程序,但由我签名。如果我将更新的 apk 上传到市场,市场应用会自动静默安装此更新吗?
如果我的系统应用程序使用平台签名而不是我的签名,这意味着任何更新也必须使用平台签名进行签名,对吗?可以从市场上更新平台签名的 apk 吗?
我有一个 OEM 使用系统映像安装的系统应用程序,但由我签名。如果我将更新的 apk 上传到市场,市场应用会自动静默安装此更新吗?
如果我的系统应用程序使用平台签名而不是我的签名,这意味着任何更新也必须使用平台签名进行签名,对吗?可以从市场上更新平台签名的 apk 吗?
让我们首先澄清所有类型的应用程序之间的区别。
系统应用程序是位于/system/app
文件夹中的应用程序。这些应用程序有一个标志ApplicationInfo.FLAG_SYSTEM
集。在普通设备中,分区/system
被安装为只读访问。因此,系统应用程序无法更新,因为它位于只读位置。这些应用程序只能作为 OTA 更新的一部分进行更新。
普通应用程序位于/data 分区,是可读写的。因此,这些应用程序可以由系统更新。
现在让我们谈谈签名。某些 Android 组件受签名类型权限的保护。这意味着如果您想访问受此类权限保护的组件,您的应用程序必须使用与受保护组件相同的证书进行签名。这不仅适用于Android系统,也适用于Android应用程序,即在您的应用程序中,您可以拥有一个受签名权限保护的组件,因此,只有具有相同签名的应用程序才能访问该组件。
我们需要回答您的问题的第三个论点是,Android 禁止安装具有相同包名但不同签名的包。
因此,
我有一个 OEM 使用系统映像安装的系统应用程序,但由我签名。如果我将更新的 apk 上传到市场,市场应用会自动静默安装此更新吗?
如果我的系统应用程序使用平台签名而不是我的签名,这意味着任何更新也必须使用平台签名进行签名,对吗?可以从市场上更新平台签名的 apk 吗?
答案是不。尽管 /system/app 中的应用程序可以使用与平台不同的证书进行签名,但这些应用程序的更新只能通过系统更新来实现。
要解决您的问题,您可以更改应用程序的包名,使用您的(如果应用程序不需要访问受保护的 Android 组件)或平台(如果应用程序应该可以访问受保护的组件并且您可以访问此签名)并将此应用程序投放市场。然后,您将通过市场收到您的应用程序的更新。
除非签名与 /system/ap 中的签名匹配,否则系统不会将 /data/app 中的 apk 视为更新