【发布时间】:2012-05-28 07:43:01
【问题描述】:
我正在尝试从我的 java 代码安装系统应用程序,到目前为止,我还没有成功。
以下是我到目前为止所做的:
- 我的设备已root。
- 我的“安装程序”应用程序作为系统应用程序安装。 (手动复制到 /system/app)
- 我已经使用平台密钥签署了安装程序 apk,并且我在 Manifest 中有
android:sharedUserId="android.uid.system"。 -
我一直在为
Runtime.getRuntime.exec("su")尝试(尝试,然后更多)。我打算将系统分区挂载为rw,为apk做一个cat,然后将系统分区设置为ro。以下是命令列表:mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system<br> cat /sdcard/application.apk > /system/app/application.apk<br> mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system<br><br>The application.apk here is the app being installed from the installer app. This app is also signed with platform key, and has the sharedUserId configured. - 我已请求清单中的
INSTALL_PACKAGES权限。
我尝试了许多 exec("") 格式的变体,包括在每个命令中使用'su -c'。我得到了断管异常和安全异常。有时,我没有收到异常,但文件没有被复制。
请让我知道我在这里缺少什么。有人搞定了吗?
谢谢!
【问题讨论】:
-
在相关说明中,使用平台密钥签名的应用与 sharedUserId=system; 的区别是什么?和 /system/app 中存在的应用程序?
-
/system/app 中的应用程序可以访问权限级别 2(据我所知不是 1)。无论授予的权限如何,sharedUserId 为 system 的应用程序都会继承授予“父”应用程序的权限,并且在与其“父”应用程序相同的进程 ID 中运行。各种 API 检查应用程序的进程 ID,如果它们不是特定类型,则拒绝访问它们。尽管这 2 者大多紧密相连,但它们并不总是齐头并进。这是描述它的非技术方式,我相信其他人会做得更好......
标签: android root android-install-apk su