在安卓模拟器中为应用程序授予系统权限。

14

我正在开发一款应用程序,将它打包为安装在Android设备上的系统应用。由于制造商还需要一段时间才能向我们交付设备,因此在此期间,我想在模拟器中授予我的应用程序系统级别权限,以便我可以开发自动更新功能,从而实现静默安装APK文件而无需用户进行任何交互。根据我的理解,在Android上执行静默安装的唯一方法是,您的应用程序必须使用与操作系统相同的证书进行签名。那么,我该如何在模拟器中模拟这个过程呢?

2个回答

32

如果您想要一个signatureOrSystem权限,您只需要被放置在系统映像中; 您不需要签署任何特殊证书。您可以像这样一次性地执行此操作(直到退出仿真器):

> adb root
> adb remount
> adb push /path/to/My.apk /system/app/My.apk

完成此步骤后,您可以使用正常的过程在数据分区上安装进一步更新(“adb install -r /path/to/My.apk”,这是在Eclipse中运行时开发工具所做的)。以这种方式安装时,应用程序保留它从系统映像上的原始版本请求的任何签名或系统权限,但不能获得任何新的这样的权限。

如果您需要纯签名权限,则需要使用与声明这些权限的证书相同的证书对您的应用程序进行签名(通常是核心框架,但媒体系统是单独的证书等)。如果您正在请求不需要安装在系统映像上的签名权限,则可以将其安装为普通应用程序,因为由于签名,它仍然可以获得权限。


有人能验证这个是否有效吗?有很多问题,但没有漂亮的绿色勾号?! - MindWire
你正在尝试检索哪些权限?毫无疑问,这是有效的——signatureOrSystem 的意思是 /system/app 中的应用程序可以获取该权限,并且这被用于平台的许多核心部分。 - hackbod
这就是在真实设备上的运行方式,所以我不明白为什么在模拟器上不能运行。值得庆幸的是,现在原型设备已经建成,我们不再需要模拟器了。顺便提一下,这是设备的链接:http://www.youtube.com/watch?v=LyV0sWEJXP4 - Ben
感谢您对升级的澄清。 - domen
这在真实设备上真的有效吗?当我的应用程序安装在/system/app中时,我没有看到所有系统权限都被授予。请参见:https://dev59.com/DWAf5IYBdhLWcg3wwlC5 - davidgyoung

2
据我所知,您需要执行以下操作:
  • 下载Android源代码并构建模拟器固件映像。
  • 使用Android源代码树中的密钥对应用程序进行签名,位置为/build/target/product/security/
  • 在您的应用程序清单中添加android:sharedUserId="android.uid.system"
  • 使用第1步中构建的映像在模拟器上运行您的应用程序。
之所以必须构建自己的固件映像,是为了能够获取密钥。现在,标准模拟器映像的密钥可能可用于其他用途,这样就可以节省构建Android的漫长而枯燥的过程,但很遗憾,我不知道这些密钥可能在哪里。
免责声明:本人从未尝试过此操作。

这正是我担心的... 你有没有想过在哪里寻找现有模拟器的密钥? - Ben
绝对没有。构建固件映像并不是那么难;大约需要一个小时进行大规模下载,然后再花费四个小时进行构建...如果您正在运送制造商ROM,则可能需要从他们那里获取源代码发布以进行集成测试。 - David Given
2
你可以尝试使用来自Android Git的密钥。例如:https://github.com/android/platform_build/tree/master/target/product/security 如果我没记错的话,你需要使用“platform”密钥进行签名。 - zapl
值得一试 --- 这取决于模拟器镜像是否构建了BUILD_SECURE。 - David Given

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接