Android Open Source - UltraExplorer C M D Processor






From Project

Back to project page UltraExplorer.

License

The source code is released under:

GNU General Public License

If you think the Android project UltraExplorer listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.mirrorlabs.filebrowser;
/*from  ww  w. j a  v  a 2 s  . c  om*/
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;

import android.util.Log;

public class CMDProcessor {

  private static final String LD_LIBRARY_PATH = System.getenv("LD_LIBRARY_PATH");
  private static final String TAG = "CMD Processor";
  private Boolean can_su;
  public SH sh;
  public SH su;

  public CMDProcessor() {
    sh = new SH("sh");
    su = new SH("su");
  }

  public SH suOrSH() {
    return canSU() ? su : sh;
  }

  public boolean canSU() {
    return canSU(false);
  }

  public class CommandResult {
    public final String stdout;
    public final String stderr;
    public final Integer exit_value;

    CommandResult(final Integer exit_value_in) {
      this(exit_value_in, null, null);
    }

    CommandResult(final Integer exit_value_in, final String stdout_in,
        final String stderr_in) {
      exit_value = exit_value_in;
      stdout = stdout_in;
      stderr = stderr_in;
    }

    public boolean success() {
      return exit_value != null && exit_value == 0;
    }
  }

  public class SH {
    private String SHELL = "sh";

    public SH(final String SHELL_in) {
      SHELL = SHELL_in;
    }

    private String getStreamLines(final InputStream is) {
      String out = null;
      StringBuffer buffer = null;
      final DataInputStream dis = new DataInputStream(is);

      try {
        if (dis.available() > 0) {
          buffer = new StringBuffer(dis.readLine());
          while (dis.available() > 0) {
            buffer.append("\n").append(dis.readLine());
          }
        }
        dis.close();
      } catch (final Exception ex) {
        Log.e(TAG, ex.getMessage());
      }
      if (buffer != null) {
        out = buffer.toString();
      }
      return out;
    }

    public Process run(final String cmd) {
      Process process = null;
      Runtime runtime = Runtime.getRuntime();
      try {
        process = runtime.exec(SHELL);
        final DataOutputStream toProcess = new DataOutputStream(
            process.getOutputStream());
        // On some versions of Android (ICS) LD_LIBRARY_PATH is unset when using su
        // We need to pass LD_LIBRARY_PATH over su for some commands to work correctly.
        String setenv = "";
        if ("su".equals(SHELL)) {
          setenv = "LD_LIBRARY_PATH=" + LD_LIBRARY_PATH + " ";
        }
        toProcess.writeBytes(setenv + "exec " + cmd + "\n");
        toProcess.flush();
      } catch (final Exception e) {
        Log.e(TAG, "Exception while trying to run: '" + cmd + "' "
            + e.getMessage());
        process = null;
      }
      return process;
    }

    public CommandResult runWaitFor(final String s) {
      final Process process = run(s);
      Integer exit_value = null;
      String stdout = null;
      String stderr = null;
      if (process != null) {
        try {
          exit_value = process.waitFor();
          stdout = getStreamLines(process.getInputStream());
          stderr = getStreamLines(process.getErrorStream());
        } catch (final InterruptedException e) {
          Log.e(TAG, "runWaitFor " + e.toString());
        } catch (final NullPointerException e) {
          Log.e(TAG, "runWaitFor " + e.toString());
        }
      }
      return new CommandResult(exit_value, stdout, stderr);
    }

    public Process run(final String[] cmds) {
      Process process = null;
      try {
        process = Runtime.getRuntime().exec(SHELL);
        final DataOutputStream toProcess = new DataOutputStream(
            process.getOutputStream());
        // On some versions of Android (ICS) LD_LIBRARY_PATH is unset when using su
        // We need to pass LD_LIBRARY_PATH over su for some commands to work correctly.
        String setenv = "";
        if (SHELL.equals("su")) {
          setenv = "LD_LIBRARY_PATH=" + LD_LIBRARY_PATH + " ";
        }
        for (String cmd : cmds) {
          toProcess.writeBytes(setenv + cmd + "\n");
        }
        toProcess.writeBytes("exit\n");
        toProcess.flush();
      } catch (final Exception e) {
        Log.e(TAG, "Exception while trying to run cmds"
            + e.getMessage());
        process = null;
      }
      return process;
    }

    public CommandResult runWaitFor(final String cmds[]) {
      final Process process = run(cmds);
      Integer exit_value = null;
      String stdout = null;
      String stderr = null;
      if (process != null) {
        try {
          exit_value = process.waitFor();
          stdout = getStreamLines(process.getInputStream());
          stderr = getStreamLines(process.getErrorStream());
        } catch (final InterruptedException e) {
          Log.e(TAG, "runWaitFor " + e.toString());
        } catch (final NullPointerException e) {
          Log.e(TAG, "runWaitFor " + e.toString());
        }
      }
      return new CommandResult(exit_value, stdout, stderr);
    }
  }

  public boolean canSU(final boolean force_check) {
    if (can_su == null || force_check) {
      final CommandResult r = su.runWaitFor("id");
      final StringBuilder out = new StringBuilder();

      if (r.stdout != null) {
        out.append(r.stdout).append(" ; ");
      }
      if (r.stderr != null) {
        out.append(r.stderr);
      }
             
      Log.d(TAG, "canSU() su[" + r.exit_value + "]: " + out);
      can_su = r.success();
    }
    return can_su;
  }
}




Java Source Code List

com.android.gestures.CreateGestureActivity.java
com.android.gestures.GestureBuilderActivity.java
com.android.gestures.GestureMonitorActivity.java
com.markupartist.android.widget.ActionBar.java
com.markupartist.android.widget.ScrollingTextView.java
com.mirrorlabs.customcheckboxwidget.DontPressWithParentCheckBox.java
com.mirrorlabs.customtoast.Toaster.java
com.mirrorlabs.filebrowser.BackupManager.java
com.mirrorlabs.filebrowser.BaseActivity.java
com.mirrorlabs.filebrowser.BitmapManager.java
com.mirrorlabs.filebrowser.BookmarksProvider.java
com.mirrorlabs.filebrowser.CMDProcessor.java
com.mirrorlabs.filebrowser.CompressManager.java
com.mirrorlabs.filebrowser.DesEncrypter.java
com.mirrorlabs.filebrowser.DrawableManager.java
com.mirrorlabs.filebrowser.DrawableThreadLoader.java
com.mirrorlabs.filebrowser.DuplicatesManager.java
com.mirrorlabs.filebrowser.ExtractManager.java
com.mirrorlabs.filebrowser.FileUtils.java
com.mirrorlabs.filebrowser.FilebrowserULTRAActivity.java
com.mirrorlabs.filebrowser.ImageThreadLoader.java
com.mirrorlabs.filebrowser.LinuxShell.java
com.mirrorlabs.filebrowser.MimeTypes.java
com.mirrorlabs.filebrowser.MyApplication.java
com.mirrorlabs.filebrowser.PDFViewer.java
com.mirrorlabs.filebrowser.PreferenceActivity.java
com.mirrorlabs.filebrowser.ProcessManager.java
com.mirrorlabs.filebrowser.RootUtils.java
com.mirrorlabs.filebrowser.SearchFilesDialog.java
com.mirrorlabs.filebrowser.SearchFilesWidget.java
com.mirrorlabs.filebrowser.UltraBaseAdapter.java
com.mirrorlabs.imageviewer.EclairMotionEvent.java
com.mirrorlabs.imageviewer.ExpandImage.java
com.mirrorlabs.imageviewer.TouchImageView.java
com.mirrorlabs.imageviewer.WrapMotionEvent.java
com.mirrorlabs.menupopup.MenuItem.java
com.mirrorlabs.menupopup.PopupMenu.java
com.mirrorlabs.musicplayer.DBHelper.java
com.mirrorlabs.musicplayer.PlayerActivity.java
com.mirrorlabs.quickaction3D.ActionItem.java
com.mirrorlabs.quickaction3D.PopupWindows.java
com.mirrorlabs.quickaction3D.QuickAction.java
com.mirrorlabs.quickaction.ActionItem.java
com.mirrorlabs.quickaction.PopupWindows.java
com.mirrorlabs.quickaction.QuickAction.java
com.mirrorlabs.ui.widgets.ClickableSlidingDrawer.java
com.mirrorlabs.ui.widgets.DropDownMenu.java
com.mirrorlabs.ui.widgets.IcsListPopupWindow.java
com.mirrorlabs.ui.widgets.JavaYoutubeDownloader.java
com.mirrorlabs.ui.widgets.Panel.java
com.mirrorlabs.ui.widgets.ScrollPager.java
com.mirrorlabs.ui.widgets.SlidingFrameLayout.java
com.mirrorlabs.widgets.ExampleAppWidgetProvider1.java
com.mirrorlabs.widgets.ExampleAppWidgetProvider.java
com.mirrorlabs.widgets.UpdateWidgetService1.java
com.mirrorlabs.widgets.UpdateWidgetService.java
org.zeroxlab.widget.AnimationLayout.java
org.zeroxlab.widget.MyHorizontalScrollView.java