Android 运行exec()时出错。命令

Android 运行exec()时出错。命令,android,process,processbuilder,pptp,Android,Process,Processbuilder,Pptp,我尝试从VPN连接PPTP 但也出现了一些错误: Error running exec(). Command: [su] Working Directory: null Environment: [ANDROID_ROOT=/system, BOOTCLASSPATH_EX=/system/framework/mediatek-op.jar, EMULATED_STORAGE_SOURCE=/mnt/shell/emulated, USBOTG_STORAGE=/storage/usbo

我尝试从VPN连接PPTP

但也出现了一些错误:

    Error running exec(). Command: [su] Working Directory: null Environment: [ANDROID_ROOT=/system, BOOTCLASSPATH_EX=/system/framework/mediatek-op.jar, EMULATED_STORAGE_SOURCE=/mnt/shell/emulated, USBOTG_STORAGE=/storage/usbotg, LOOP_MOUNTPOINT=/mnt/obb, EMULATED_STORAGE_TARGET=/storage/emulated, ANDROID_BOOTLOGO=1, LD_LIBRARY_PATH=/vendor/lib:/system/lib, EXTERNAL_STORAGE=/storage/emulated/legacy, ANDROID_SOCKET_zygote=9, ANDROID_DATA=/data, PATH=/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin, ANDROID_ASSETS=/system/app, ASEC_MOUNTPOINT=/mnt/asec, BOOTCLASSPATH=/system/framework/core.jar:/system/framework/conscrypt.jar:/system/framework/okhttp.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/framework2.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/mms-common.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar:/system/framework/webviewchromium.jar:/system/framework/mediatek-common.jar:/system/framework/mediatek-framework.jar:/system/framework/CustomProperties.jar:/system/framework/mediatek-telephony-common.jar:/system/framework/mediatek-tablet.jar:/system/framework/com.htc.android.home.clock.jar:/system/framework/cei-wrapper.jar, ANDROID_PROPERTY_WORKSPACE=8,0, ANDROID_STORAGE=/storage]
             java.io.IOException: Error running exec(). Command: [su] Working Directory: null Environment: [ANDROID_ROOT=/system, BOOTCLASSPATH_EX=/system/framework/mediatek-op.jar, EMULATED_STORAGE_SOURCE=/mnt/shell/emulated, USBOTG_STORAGE=/storage/usbotg, LOOP_MOUNTPOINT=/mnt/obb, EMULATED_STORAGE_TARGET=/storage/emulated, ANDROID_BOOTLOGO=1, LD_LIBRARY_PATH=/vendor/lib:/system/lib, EXTERNAL_STORAGE=/storage/emulated/legacy, ANDROID_SOCKET_zygote=9, ANDROID_DATA=/data, PATH=/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin, ANDROID_ASSETS=/system/app, ASEC_MOUNTPOINT=/mnt/asec, BOOTCLASSPATH=/system/framework/core.jar:/system/framework/conscrypt.jar:/system/framework/okhttp.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/framework2.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/mms-common.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar:/system/framework/webviewchromium.jar:/system/framework/mediatek-common.jar:/system/framework/mediatek-framework.jar:/system/framework/CustomProperties.jar:/system/framework/mediatek-telephony-common.jar:/system/framework/mediatek-tablet.jar:/system/framework/com.htc.android.home.clock.jar:/system/framework/cei-wrapper.jar, ANDROID_PROPERTY_WORKSPACE=8,0, ANDROID_STORAGE=/storage]
                 at java.lang.ProcessManager.exec(ProcessManager.java:211)
                 at java.lang.ProcessBuilder.start(ProcessBuilder.java:195)
                 at mycompany.lightvpn.util.RunCommand.run(RunCommand.java:26)
                 at mycompany.lightvpn.manager.VpnManager.startMtpd(VpnManager.java:128)
                 at mycompany.lightvpn.manager.VpnManager.startVpn(VpnManager.java:32)
                 at mycompany.lightvpn.MainActivity$6.run(MainActivity.java:248)
                 at java.lang.Thread.run(Thread.java:841)
              Caused by: java.io.IOException: Permission denied
                 at java.lang.ProcessManager.exec(Native Method)
                 at java.lang.ProcessManager.exec(ProcessManager.java:209)
                 at java.lang.ProcessBuilder.start(ProcessBuilder.java:195) 
                 at mycompany.lightvpn.util.RunCommand.run(RunCommand.java:26) 
                 at mycompany.lightvpn.manager.VpnManager.startMtpd(VpnManager.java:128) 
                 at mycompany.lightvpn.manager.VpnManager.startVpn(VpnManager.java:32) 
                 at mycompany.lightvpn.MainActivity$6.run(MainActivity.java:248) 
                 at java.lang.Thread.run(Thread.java:841)
方法:

    public static Process run(String command) throws IOException {
        LTH.dLog("GET_VPN", "Run Command -> Run -> Command : " + command);
        /*String DIR_SDCARD = Environment.getExternalStorageDirectory().getAbsolutePath();
        String DIR_APP = DIR_SDCARD + "/Android/data/" + context.getPackageName() + "/dir/";*/
        /*List<String> strings = new ArrayList<>();
        strings.add("su");
        strings.add("-c");
        strings.add(command);
        ProcessBuilder builder = new ProcessBuilder(strings);*/
        // ProcessBuilder builder = new ProcessBuilder("su");
        ProcessBuilder builder = new ProcessBuilder("su");
                /*.command(command)
                .redirectErrorStream(true);*/
        // Process p = Runtime.getRuntime().exec("su");
        Process p = builder.start(); // Error Line
        DataOutputStream dos = new DataOutputStream(p.getOutputStream());

        dos.writeBytes(command + "\n");
        dos.flush();
        dos.writeBytes("exit\n");
        dos.flush();
        return p;
    }
公共静态进程运行(字符串命令)引发IOException{
dLog(“获取VPN”,“运行命令->运行->命令:”+Command);
/*String DIR_SDCARD=Environment.getExternalStorageDirectory().getAbsolutePath();
字符串DIR_APP=DIR_SDCARD+“/Android/data/”+context.getPackageName()+“/DIR/”*/
/*列表字符串=新的ArrayList();
字符串。添加(“su”);
字符串。添加(“-c”);
strings.add(命令);
ProcessBuilder=新的ProcessBuilder(字符串)*/
//ProcessBuilder=新的ProcessBuilder(“su”);
ProcessBuilder=新的ProcessBuilder(“su”);
/*.命令(命令)
.重定向错误流(true)*/
//进程p=Runtime.getRuntime().exec(“su”);
进程p=builder.start();//错误行
DataOutputStream dos=新的DataOutputStream(p.getOutputStream());
dos.writeBytes(命令+“\n”);
dos.flush();
dos.writeBytes(“退出”);
dos.flush();
返回p;
}

如何修复它?

您正在执行“su”命令。你的安卓设备是根设备吗?@Lino?它不是根目录,我需要它来建立pptp cpn连接,如何为未根目录的设备更改它?您正在执行“su”命令。你的安卓设备是根设备吗?@Lino?它不是根目录,我需要它来建立pptp cpn连接,如何为未根目录的设备更改它?