7

我正在尝试从我的 java 代码安装系统应用程序,到目前为止,我还没有成功。

以下是我到目前为止所做的:

  1. 我的设备已植根。
  2. 我的“安装程序”应用程序作为系统应用程序安装。(手动复制到/system/app)
  3. 我已经使用平台密钥签署了安装程序 apk,并且我android:sharedUserId="android.uid.system"在清单中。
  4. 我一直在尝试(并尝试,然后更多)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.
    
  5. 我已在清单中请求INSTALL_PACKAGES许可。

我尝试了许多 exec("") 格式的变体,包括'su -c'与每个命令一起使用。我得到了断管异常和安全异常。有时,我没有得到异常,但文件没有被复制。


请让我知道我在这里缺少什么。有没有人有这个工作?

谢谢!

4

1 回答 1

4

我继续挖掘,结果如下:

  • Android 在 su.c 中有此检查:[“android 源的根目录”/system/extras/su/su.c]
/* 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

我现在接受这个作为答案。

于 2012-05-23T01:43:09.263 回答