Note that there are some explanatory texts on larger screens.

plurals
  1. POWriting android app that executes linux commands
    primarykey
    data
    text
    <p>I have an compiled executable that is supposed to copy itself from the res folder, and into the /data/data/package-name/ folder, and change the permissions, and then execute. Every step completes all the way to the end. The output stream seems to be writing, etc. Except when I go check the file system, nothing has been done. I first tried with 'sh' then with 'su' (I have a rooted Cyanogen rom).</p> <p>Here is the code:</p> <pre><code>public class UnexecutableActivity extends Activity { String executablePath; TextView outputView; private UnexecutableTask mUnexecutableTask; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); executablePath = getIntent().getData().getPath(); System.out.println(executablePath); setContentView(R.layout.main); outputView = (TextView)findViewById(R.id.outputView); try { Process process = Runtime.getRuntime().exec("su"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } Runnable runexecutable = new Runnable(){ @Override public void run() { mUnexecutableTask = new UnexecutableTask(); mUnexecutableTask.execute(""); } }; runOnUiThread(runexecutable); } private class UnexecutableTask extends AsyncTask&lt;String, String, String&gt; { public UnexecutableTask() { super(); } @Override protected void onPostExecute(String result) { super.onPostExecute(result); outputView.setText(outputView.getText() + "\n" + executablePath + "converted to "); } @Override protected void onPreExecute() { super.onPreExecute(); outputView.setText("About to un-executable " + executablePath + " ..."); } @Override protected void onProgressUpdate(String... values) { super.onProgressUpdate(values); outputView.setText(outputView.getText() + "\n" + values[0]); } @Override protected String doInBackground(String... params) { String bashEscapedPath = executablePath.replace(" ", "\\ "); try{ String[] commands; publishProgress("Loading unexecutable..."); InputStream unexecutableInputStream = getAssets().open("unexecutable"); FileOutputStream fos = new FileOutputStream(getDir("", MODE_WORLD_WRITEABLE) + "/unexecutable"); byte[] tmp = new byte[2048]; int l; while ((l = unexecutableInputStream.read(tmp)) != -1) { fos.write(tmp, 0, l); } fos.flush(); fos.close(); unexecutableInputStream.close(); publishProgress("Changing file permissions..."); commands = new String[] {"/system/bin/chmod","744", getDir("", MODE_WORLD_WRITEABLE) + "/unexecutable"}; Process process = Runtime.getRuntime().exec("su"); StringBuffer res = new StringBuffer(); DataOutputStream os = new DataOutputStream(process.getOutputStream()); DataInputStream osRes = new DataInputStream(new BufferedInputStream(process.getInputStream())); for (String single : commands) { os.writeBytes(single + "\n"); os.flush(); //publishProgress(String.valueOf(osRes.readByte())); } os.writeBytes("exit\n"); os.flush(); process.waitFor(); publishProgress("Performing un-executable..."); commands = new String[] {"/data/data/" + getPackageName() + "/unexecutable", bashEscapedPath}; process = Runtime.getRuntime().exec("su"); res = new StringBuffer(); os = new DataOutputStream(process.getOutputStream()); osRes = new DataInputStream(process.getInputStream()); for (String single : commands) { os.writeBytes(single + "\n"); os.flush(); } os.writeBytes("exit\n"); os.flush(); publishProgress("Finishing..."); process.waitFor(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } return "Success"; } } </code></pre> <p>If anyone could fix this up for me, (and hopefully use sh!) I would be eternally grateful.</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload