From bb51f268ed285ee3e699669cf76ee93512565a03 Mon Sep 17 00:00:00 2001 From: Kenny Root Date: Tue, 17 Nov 2009 20:01:18 +0000 Subject: Use ASE's JNI Exec code Eclair has removed android.os.Exec from the code base, so use Android Scripting Environment's JNI Exec code to enable local shell on 2.0 git-svn-id: https://connectbot.googlecode.com/svn/trunk/connectbot@427 df292f66-193f-0410-a5fc-6d59da041ff2 --- AndroidManifest.xml | 2 +- libs/armeabi/libcom_google_ase_Exec.so | Bin 0 -> 6598 bytes src/com/google/ase/Exec.java | 69 ++++++++++++++++++++++++++++++++ src/org/connectbot/transport/Local.java | 38 +++--------------- 4 files changed, 76 insertions(+), 33 deletions(-) create mode 100755 libs/armeabi/libcom_google_ase_Exec.so create mode 100644 src/com/google/ase/Exec.java diff --git a/AndroidManifest.xml b/AndroidManifest.xml index de748dc..3b6d523 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -2,7 +2,7 @@ + android:versionCode="210"> mExec = Class.forName("android.os.Exec"); - mExec_openSubprocess = mExec.getMethod("createSubprocess", - String.class, String.class, String.class, int[].class); - mExec_waitFor = mExec.getMethod("waitFor", int.class); - mExec_setPtyWindowSize = mExec.getMethod("setPtyWindowSize", - FileDescriptor.class, int.class, int.class, int.class, int.class); - } catch (NoSuchMethodException e) { - // Give up - } catch (ClassNotFoundException e) { - // Give up - } - } - /** * */ @@ -113,21 +91,17 @@ public class Local extends AbsTransport { int[] pids = new int[1]; try { - shellFd = (FileDescriptor) mExec_openSubprocess.invoke(null, - "/system/bin/sh", "-", null, pids); + shellFd = Exec.createSubprocess("/system/bin/sh", "-", null, pids); } catch (Exception e) { bridge.outputLine(manager.res.getString(R.string.local_shell_unavailable)); + Log.e(TAG, "Cannot start local shell", e); return; } final int shellPid = pids[0]; Runnable exitWatcher = new Runnable() { public void run() { - try { - mExec_waitFor.invoke(null, shellPid); - } catch (Exception e) { - Log.e(TAG, "Couldn't wait for shell exit", e); - } + Exec.waitFor(shellPid); bridge.dispatchDisconnect(false); } @@ -181,7 +155,7 @@ public class Local extends AbsTransport { @Override public void setDimensions(int columns, int rows, int width, int height) { try { - mExec_setPtyWindowSize.invoke(null, shellFd, rows, columns, width, height); + Exec.setPtyWindowSize(shellFd, rows, columns, width, height); } catch (Exception e) { Log.e(TAG, "Couldn't resize pty", e); } -- cgit v1.2.3