我正在尝试从我的java代码安装系统应用程序,到目前为止,我没有取得任何成功。
以下是我到目前为止所做的:
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'
。我得到了Broken Pipe异常和安全异常。有时候,我没有异常,但文件没有被复制。
请告诉我这里缺少的东西。有人有这个工作吗?
谢谢!
答案 0 :(得分:4)
我继续挖掘,结果如下:
/* Until we have something better, only root and the shell can use su.*/ myuid = getuid(); if (myuid != AID_ROOT && myuid != AID_SHELL) { fprintf(stderr,"su: uid %d not allowed to su\n", myuid); return 1; }
ChainsDD(SuperUser)和cyanogen mod通过实现自己的su.c来解决这个问题:https://github.com/CyanogenMod/android_system_su/blob/master/su.c
/system/app
有什么特别之处?似乎事实是该分区在非root用户设备上是只读的,因此无法修改/卸载放在那里的应用程序。 https://android.stackexchange.com/questions/17871/what-are-the-differences-between-a-system-app-and-user-app
使用平台密钥和sharedUserId = system
签名的应用程序“足够好”,我不需要将其复制到/system/app.
我现在接受这个答案。