English 中文(简体)
Android : 在程序上将 Apk 复制到 / system/ app
原标题:Android : programmatically copying apk to /system/app

我试图从我的 Java 代码中安装一个系统应用程序, 到目前为止, 我还没有成功。
以下是我至今所做的:

  1. My device is rooted.
  2. My "installer" app is installed as a system app. (copied it manually to /system/app)
  3. I have signed the installer apk with platform key, and I have android:sharedUserId="android.uid.system" in the Manifest.
  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. I have requested for the INSTALL_PACKAGES permission in the manifest.

我尝试过一些执行(")格式的变异, 包括使用 su - c 和每个命令。 我得到了破碎管道例外和安全例外。 有时, 我没有得到例外, 但文件没有复制 。


请告诉我我错过了什么。有人能成功吗?
谢谢!

最佳回答

我不断挖掘,结果如下:

  • Android has this check in su.c: ["root of android source"/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
", myuid);
    return 1;
}

链条DD(超级用户)和氰化物模式通过实施自己的 su.c: < a href="https://github.com/Cyanogenmod/android_system_su/blob/master/su.c" rel=“nofollow noreferrer">https://github.com/Cyanogenmod/android_system_su/blob/master/su.c