【问题标题】:Create System Application创建系统应用程序
【发布时间】:2013-06-17 20:02:16
【问题描述】:

我应该怎么做才能创建一个系统应用程序(以获得在清单文件中使用android:sharedUserId="android.uid.system"的权利而不会收到包管理器关于认证问题的错误?

我使用带有股票固件的 root 手机。

【问题讨论】:

  • 我怀疑这是可能的。
  • 你不能。您必须使用系统证书签署应用程序,或构建自定义 ROM。
  • 但是有些人编辑股票应用程序,准备 zip 文件,用户可以通过恢复来更新系统应用程序。我不相信,这些开发人员有 ie。三星证书。

标签: android android-manifest root


【解决方案1】:

好的,我想我从优秀的 xda 开发人员那里找到了解决方案:http://forum.xda-developers.com/showthread.php?t=1776095 这里是完整的描述如何获得对平台密钥签名的应用程序的访问权限。 你应用这种方法吗?
PS 有趣的是,用户从堆栈而不是立即调查困难问题说你无法解决它,然后降低新手用户的声誉......

【讨论】:

  • 他们正在做的是用他们自己的签名密钥对固件进行签名。
  • 实际上,他们从 apk 中删除了所有数字签名。他们还会删除所有 odex 文件。所以这套新的应用程序应该比标准软件慢,但它让我有机会创建可以完全访问所有电话功能的应用程序。
  • 所有 APK 都必须经过数字签名,否则无法运行。
  • 在哪一步重新签名?
  • @MichałRowicki:您是否能够成功地将您的应用程序作为系统应用程序?我也想做同样的事情,需要你的帮助。你做了这个链接中提到的任何事情吗(由 natz0r 回答):“stackoverflow.com/questions/9475576/…”?
【解决方案2】:

我应该怎么做才能创建一个系统应用程序

有两种类型的系统应用:

  • 系统分区上安装的应用,可以由root权限的用户完成

  • 由与固件签名相同的签名密钥签名的应用程序

获取使用android:sharedUserId="android.uid.system"的权利

这肯定需要您的应用使用与固件签名相同的签名密钥进行签名。任何android:sharedUserId 都是如此。

但是有些人编辑股票应用程序,准备 zip 文件,用户可以通过恢复来更新系统应用程序。

欢迎您提供任何证据证明他们的所作所为涉及android:sharedUserId="android.uid.system"

【讨论】:

  • 让我们看看forum.xda-developers.com/showthread.php?t=2001564,这里有一个使用 android:sharedUserId="android.uid.phone" 的修改后的股票调用应用程序示例。也许可以通过我的证书/密钥下载所有带有 framework.apk 的系统应用程序并重新上传到库存 ROM?
  • @MichałRowicki:“这里有一个使用 android:sharedUserId="android.uid.phone" 的修改后的股票调用者应用程序示例”——这意味着该应用程序需要通过相同的签名进行签名使用android.uid.phone 签署所有其他应用程序的密钥。我不知道哪些应用程序都使用它。
  • 这个 sharedUserID 使用例如 com.android.providers.telephony 包,所以这个包应该使用与这个开发者创建的相同的密钥签名,我怀疑三星将你的证书发布到开放社区,因为它会对使用手机的普通人有害。
  • 我可以像这个应用一样获得管理员权限吗==> play.google.com/store/apps/…
  • 有人能告诉我安装在系统应用程序上的应用程序与实际系统应用程序之间的区别吗?至于访问权限?如果我的 apk 与系统 ROM 具有相同的签名,那么我可以将其安装为普通应用程序还是安装在系统分区中?
【解决方案3】:

必须使用平台密钥对系统应用进行签名。这是由开发人员在自己的设备或移动运营商上部署 android 平台来完成的。

如果是这种情况,最简单的方法是将其添加到您的 Android.mk:

LOCAL_CERTIFICATE := platform
LOCAL_PRIVILEGED_MODULE := true

如果您添加这些行而不将 android:sharedUserId="android.uid.system" 添加到您的清单中,您将成为一个平台应用程序。系统应用程序比平台应用程序更有特权。它使用平台密钥并以系统用户身份运行。

如果您不是平台供应商,则平台供应商需要使用他们的平台密钥对您的应用程序进行签名。包括我的公司在内的一些供应商会为第 3 方这样做,以证明这样做的正当理由。

没有签名,您的应用程序只能在有根设备上使用。

【讨论】:

  • 感谢您最近对此的回答。你能提供一些供应商的例子吗?如果我需要为所有三星手机发布系统应用程序,是否可以进行单个签名并进行操作?我应该向三星要求吗?
  • @KeshanFernando 我无法与其他供应商交谈。您需要通过他们的技术支持询问三星。移动设备管理器 (MDM) 应用程序和病毒扫描程序经常使用此技术。大多数供应商将为每部手机使用不同的签名。如果三星这样做,您将需要为每部手机创建和发布不同版本的应用程序。
【解决方案4】:

我不需要使用固件签名对我的应用程序进行签名!我有一个根设备。因此,我可以授予自己使用 adb 写入某些目录的权限。

我使用以下步骤将我的应用移至 /system/priv-app 而不是 /system/appPush my apk to /system/app

现在,我可以访问系统权限,例如android.permission.SHUTDOWN

【讨论】:

  • 现在适用于有根设备。
  • 所以你刚刚在 /system/priv-app 中安装了你的应用程序并且系统自动授予你 SHUTDOWN 权限?或者你必须做其他事情?因为它对我不起作用。它安装在那里(我也有 root 权限),我在清单上要求它,它仍然说我没有它。如果有帮助,我会在此之后将其安装为“更新”,以便在 SD 卡上安装文件以供使用。这是问题吗?因为它需要从 SD 卡中获取文件。如果不是这个,不知道会是什么。您知道这里可能存在问题吗?
【解决方案5】:

有两种类型的系统应用程序。

Type 1:与Device ROM同签名的App。

类型 2:在您的设备存储位置中的 system/priv-app 中的签名应用(可能因 adnroid 版本而异)。

访问此链接 -> http://www.archive.ricston.com/blog/explaining-behavior-android-application-system-apps-nonsystem-apps/

【讨论】:

    猜你喜欢
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    相关资源
    最近更新 更多