[android-scripting] push by damonkohler - First working version of custom Exec JNI code. This seems to be necess... on 2009-10-30 20:28 GMT

0 views
Skip to first unread message

android-...@googlecode.com

unread,
Oct 30, 2009, 4:29:50 PM10/30/09
to android-scri...@googlegroups.com
Revision: 129a26e79b
Author: Damon Kohler <damon...@gmail.com>
Date: Fri Oct 30 09:46:09 2009
Log: First working version of custom Exec JNI code. This seems to be
necessary for Eclair.
http://code.google.com/p/android-scripting/source/detail?r=129a26e79b

Added:
/android/AndroidScriptingEnvironment/jni/Android.mk
/android/AndroidScriptingEnvironment/jni/Application.mk
/android/AndroidScriptingEnvironment/jni/com_google_ase_Exec.cpp
/android/AndroidScriptingEnvironment/jni/com_google_ase_Exec.h
/android/AndroidScriptingEnvironment/libs/TTS_library_stub_1.4_market.jar
/android/AndroidScriptingEnvironment/libs/armeabi/libcom_google_ase_Exec.so
/android/AndroidScriptingEnvironment/libs/commons-io-1.4.jar
/android/AndroidScriptingEnvironment/libs/locale_platform.jar
/android/AndroidScriptingEnvironment/src/com/google/ase/Exec.java
/python/ase/scripts/hello_world.py
Deleted:
/android/AndroidScriptingEnvironment/lib/TTS_library_stub_1.4_market.jar
/android/AndroidScriptingEnvironment/lib/commons-io-1.4.jar
/android/AndroidScriptingEnvironment/lib/locale_platform.jar
Modified:
/android/AndroidScriptingEnvironment/.classpath

/android/AndroidScriptingEnvironment/src/com/google/ase/InterpreterManager.java

/android/AndroidScriptingEnvironment/src/com/google/ase/interpreter/InterpreterInstaller.java

/android/AndroidScriptingEnvironment/src/com/google/ase/interpreter/InterpreterProcess.java

/android/AndroidScriptingEnvironment/src/com/google/ase/terminal/EmulatorView.java

=======================================
--- /dev/null
+++ /android/AndroidScriptingEnvironment/jni/Android.mk Fri Oct 30 09:46:09
2009
@@ -0,0 +1,9 @@
+LOCAL_PATH := $(call my-dir)
+
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := com_google_ase_Exec
+LOCAL_SRC_FILES := com_google_ase_Exec.cpp
+LOCAL_LDLIBS := -llog
+
+include $(BUILD_SHARED_LIBRARY)
=======================================
--- /dev/null
+++ /android/AndroidScriptingEnvironment/jni/Application.mk Fri Oct 30
09:46:09 2009
@@ -0,0 +1,2 @@
+APP_PROJECT_PATH :=
/home/damonkohler/ase_src/android/AndroidScriptingEnvironment
+APP_MODULES := com_google_ase_Exec
=======================================
--- /dev/null
+++ /android/AndroidScriptingEnvironment/jni/com_google_ase_Exec.cpp Fri
Oct 30 09:46:09 2009
@@ -0,0 +1,194 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "com_google_ase_Exec.h"
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <sys/ioctl.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <termios.h>
+#include <unistd.h>
+
+#include "android/log.h"
+
+#define LOG_TAG "Exec"
+#define LOG(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG,
__VA_ARGS__)
+
+void JNU_ThrowByName(JNIEnv* env, const char* name, const char* msg) {
+ jclass clazz = env->FindClass(name);
+ if (clazz != NULL) {
+ env->ThrowNew(clazz, msg);
+ }
+ env->DeleteLocalRef(clazz);
+}
+
+char* JNU_GetStringNativeChars(JNIEnv* env, jstring jstr) {
+ if (jstr == NULL) {
+ return NULL;
+ }
+ jbyteArray bytes = 0;
+ jthrowable exc;
+ char* result = 0;
+ if (env->EnsureLocalCapacity(2) < 0) {
+ return 0; /* out of memory error */
+ }
+ jclass Class_java_lang_String = env->FindClass("java/lang/String");
+ jmethodID MID_String_getBytes = env->GetMethodID(
+ Class_java_lang_String, "getBytes", "()[B");
+ bytes = (jbyteArray) env->CallObjectMethod(jstr, MID_String_getBytes);
+ exc = env->ExceptionOccurred();
+ if (!exc) {
+ jint len = env->GetArrayLength(bytes);
+ result = (char*) malloc(len + 1);
+ if (result == 0) {
+ JNU_ThrowByName(env, "java/lang/OutOfMemoryError", 0);
+ env->DeleteLocalRef(bytes);
+ return 0;
+ }
+ env->GetByteArrayRegion(bytes, 0, len, (jbyte*) result);
+ result[len] = 0; /* NULL-terminate */
+ } else {
+ env->DeleteLocalRef(exc);
+ }
+ env->DeleteLocalRef(bytes);
+ return result;
+}
+
+int jniGetFDFromFileDescriptor(JNIEnv* env, jobject fileDescriptor) {
+ jclass Class_java_io_FileDescriptor =
env->FindClass("java/io/FileDescriptor");
+ jfieldID descriptor = env->GetFieldID(Class_java_io_FileDescriptor,
+ "descriptor", "I");
+ return env->GetIntField(fileDescriptor, descriptor);
+}
+
+static int create_subprocess(
+ const char* cmd, const char* arg0, const char* arg1, int* pProcessId) {
+ char* devname;
+ int ptm;
+ pid_t pid;
+
+ ptm = open("/dev/ptmx", O_RDWR); // | O_NOCTTY);
+ if(ptm < 0){
+ LOG("[ cannot open /dev/ptmx - %s ]\n", strerror(errno));
+ return -1;
+ }
+ fcntl(ptm, F_SETFD, FD_CLOEXEC);
+
+ if(grantpt(ptm) || unlockpt(ptm) ||
+ ((devname = (char*) ptsname(ptm)) == 0)){
+ LOG("[ trouble with /dev/ptmx - %s ]\n", strerror(errno));
+ return -1;
+ }
+
+ pid = fork();
+ if(pid < 0) {
+ LOG("- fork failed: %s -\n", strerror(errno));
+ return -1;
+ }
+
+ if(pid == 0){
+ int pts;
+
+ setsid();
+
+ pts = open(devname, O_RDWR);
+ if(pts < 0) exit(-1);
+
+ dup2(pts, 0);
+ dup2(pts, 1);
+ dup2(pts, 2);
+
+ close(ptm);
+
+ execl(cmd, cmd, arg0, arg1, NULL);
+ exit(-1);
+ } else {
+ *pProcessId = (int) pid;
+ return ptm;
+ }
+}
+
+JNIEXPORT jobject JNICALL Java_com_google_ase_Exec_createSubprocess(
+ JNIEnv* env, jclass clazz, jstring cmd, jstring arg0, jstring arg1,
+ jintArray processIdArray) {
+ char* cmd_8 = JNU_GetStringNativeChars(env, cmd);
+ char* arg0_8 = JNU_GetStringNativeChars(env, arg0);
+ char* arg1_8 = JNU_GetStringNativeChars(env, arg1);
+
+ int procId;
+ int ptm = create_subprocess(cmd_8, arg0_8, arg1_8, &procId);
+
+ if (processIdArray) {
+ int procIdLen = env->GetArrayLength(processIdArray);
+ if (procIdLen > 0) {
+ jboolean isCopy;
+ int* pProcId = (int*) env->GetPrimitiveArrayCritical(processIdArray,
&isCopy);
+ if (pProcId) {
+ *pProcId = procId;
+ env->ReleasePrimitiveArrayCritical(processIdArray, pProcId, 0);
+ }
+ }
+ }
+
+ jclass Class_java_io_FileDescriptor =
env->FindClass("java/io/FileDescriptor");
+ jmethodID init = env->GetMethodID(Class_java_io_FileDescriptor,
+ "<init>", "()V");
+ jobject result = env->NewObject(Class_java_io_FileDescriptor, init);
+
+ if (!result) {
+ LOG("Couldn't create a FileDescriptor.");
+ } else {
+ jfieldID descriptor = env->GetFieldID(Class_java_io_FileDescriptor,
+ "descriptor", "I");
+ env->SetIntField(result, descriptor, ptm);
+ }
+
+ return result;
+}
+
+JNIEXPORT void Java_com_google_ase_Exec_setPtyWindowSize(
+ JNIEnv* env, jclass clazz, jobject fileDescriptor, jint row, jint col,
+ jint xpixel, jint ypixel) {
+ int fd;
+ struct winsize sz;
+
+ fd = jniGetFDFromFileDescriptor(env, fileDescriptor);
+
+ if (env->ExceptionOccurred() != NULL) {
+ return;
+ }
+
+ sz.ws_row = row;
+ sz.ws_col = col;
+ sz.ws_xpixel = xpixel;
+ sz.ws_ypixel = ypixel;
+
+ ioctl(fd, TIOCSWINSZ, &sz);
+}
+
+JNIEXPORT jint Java_com_google_ase_Exec_waitFor(JNIEnv* env, jclass clazz,
+ jint procId) {
+ int status;
+ waitpid(procId, &status, 0);
+ int result = 0;
+ if (WIFEXITED(status)) {
+ result = WEXITSTATUS(status);
+ }
+ return result;
+}
=======================================
--- /dev/null
+++ /android/AndroidScriptingEnvironment/jni/com_google_ase_Exec.h Fri Oct
30 09:46:09 2009
@@ -0,0 +1,45 @@
+/* DO NOT EDIT THIS FILE - it is machine generated */
+#include <jni.h>
+/* Header for class com_google_ase_Exec */
+
+#ifndef _Included_com_google_ase_Exec
+#define _Included_com_google_ase_Exec
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ * Class: com_google_ase_Exec
+ * Method: createSubprocess
+ * Signature:
(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[I)Ljava/io/FileDescriptor;
+ */
+JNIEXPORT jobject JNICALL Java_com_google_ase_Exec_createSubprocess
+ (JNIEnv *, jclass, jstring, jstring, jstring, jintArray);
+
+/*
+ * Class: com_google_ase_Exec
+ * Method: setPtyWindowSize
+ * Signature: (Ljava/io/FileDescriptor;IIII)V
+ */
+JNIEXPORT void JNICALL Java_com_google_ase_Exec_setPtyWindowSize
+ (JNIEnv *, jclass, jobject, jint, jint, jint, jint);
+
+/*
+ * Class: com_google_ase_Exec
+ * Method: waitFor
+ * Signature: (I)I
+ */
+JNIEXPORT jint JNICALL Java_com_google_ase_Exec_waitFor
+ (JNIEnv *, jclass, jint);
+
+/*
+ * Class: com_google_ase_Exec
+ * Method: register
+ * Signature: ()I
+ */
+JNIEXPORT jint JNICALL Java_com_google_ase_Exec_register
+ (JNIEnv *, jclass);
+
+#ifdef __cplusplus
+}
+#endif
+#endif
=======================================
--- /dev/null
+++
/android/AndroidScriptingEnvironment/libs/TTS_library_stub_1.4_market.jar
Fri Oct 30 09:46:09 2009
Binary file, no diff available.
=======================================
--- /dev/null
+++
/android/AndroidScriptingEnvironment/libs/armeabi/libcom_google_ase_Exec.so
Fri Oct 30 09:46:09 2009
Binary file, no diff available.
=======================================
--- /dev/null
+++ /android/AndroidScriptingEnvironment/libs/commons-io-1.4.jar Fri Oct 30
09:46:09 2009
Binary file, no diff available.
=======================================
--- /dev/null
+++ /android/AndroidScriptingEnvironment/libs/locale_platform.jar Fri Oct
30 09:46:09 2009
@@ -0,0 +1,26 @@
+PK }¶å: META-INF/MANIFEST.MFþÊ óMÌËLK-.Ñ
+K-*ÎÌϳR0Ô3àå
+NMÌIM±R()*Mååâå PK w‚ð9) ' PK
+ J¶å: com/PK
+ J¶å: com/twofortyfouram/PK Jµå: com/twofortyfouram/Intent.class•UýS A ~V,.Ä4µÌ¬¤o´‚´O£¬ë<õêàì8˜š~`N\í
+¸cà(û·š¦ššê÷þ¨¦wAc1› Ø}ÞÝçÙ÷c÷åç¯/ß ÌÂŽ¢ a¢
+TÓáÛ`#¨‡ï6‚fÝ­¦
+?ä~ E?Ãð–ûÆMW\ 3m­mñrÈ0hëù‚é”l=k u f M üFèúaÑ­4y„ô‡ FUÍ1¬\I_4œR^w
+#·Ì0bv$óaÝó73
+â ·È‘T·#©JPv+<åµüI¹åÐ üT·Üî!K†­ïZ qzÏz2“á¸ì´fåh
¨`„áÎ <üÃíø˜wTÛ)™–¦šº‚ã ðQf2 ìè­è檂“ ×zÕ ŒŽ?«Ö3 ¹]44ògò :‚I¹Ò_8¶JaÙ”º–7¥‚m*8Ë þ¯ ß ënj—Ä0Þ%öÄÖÕEÍ.dŸ(8Ç0Û£\‡F ­[Ð,ؤu±—
w´ ƒád—ŒtÛ \a˜ëQLâ1Ä y­ÎËnÈ×é ÚM?ôª¼è5¼µ
+W}? ]‘ä à é­t8 †±N TÀUÕV
+ËVp !’XHÐzV}ad ÙvØ%SÏ-;+âY& ?ð|/\ ­Éé"C¿ ¬ó "¸ Ç
+ÌFq‡áJçØ‚ßhÖj
+_·j¼ÞòLß.óš˜(¸ÇpñR#9}?á¼ö ‰rÅm4 4ñ ÿº×n žKa‰ îÇ‘Á e“‡šØH719-
+Ø2fbXÀã(
+1 íYŠC Ud øy¯Z«ðœ[å l—ÈNO‰a KQè]-¬½ Ç2V( T³ªK
+m>ù7ý•¹·ñeö=ä6žŠ´=£Ç° ŠÈï éù<׬®ñº#2!: ¸ E·ÞÊÌŽ±?¤ü1LšÿìÇTöXž e¾ä
Æ@Ûœ §R;§zR} 1 C8L(J¨
+á#ˆýÁ „ %|”ð°„
+•ð á
+'<!áS„NKø á) ' Ÿ—ð — nC _F â3M_áõ ¸*1® NI ¥iÖ'n* sdÉ’ Ñ85ó
7¿âöË‘»ýß y ™ùˆù x˜ÿ í Œ -²I¿1 ÁÞÓ¿Û " ñ6
+9X42¬¶v>ÿ
+PK àvÛ°8 ( PK }¶å:w‚ð9) ' META-INF/MANIFEST.MFþÊ PK
+
+ J¶å: o com/PK
+
+ J¶å: ‘ com/twofortyfouram/PK Jµå:àvÛ°8 (  com/twofortyfouram/Intent.classPK G
=======================================
--- /dev/null
+++ /android/AndroidScriptingEnvironment/src/com/google/ase/Exec.java Fri
Oct 30 09:46:09 2009
@@ -0,0 +1,69 @@
+/*
+ * Copyright (C) 2007 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.ase;
+
+import java.io.FileDescriptor;
+
+/**
+ * Tools for executing commands.
+ */
+public class Exec {
+ /**
+ * @param cmd
+ * The command to execute
+ * @param arg0
+ * The first argument to the command, may be null
+ * @param arg1
+ * the second argument to the command, may be null
+ * @return the file descriptor of the started process.
+ *
+ */
+ public static FileDescriptor createSubprocess(String cmd, String arg0,
String arg1) {
+ return createSubprocess(cmd, arg0, arg1, null);
+ }
+
+ /**
+ * @param cmd
+ * The command to execute
+ * @param arg0
+ * The first argument to the command, may be null
+ * @param arg1
+ * the second argument to the command, may be null
+ * @param processId
+ * A one-element array to which the process ID of the started
process will be written.
+ * @return the file descriptor of the started process.
+ *
+ */
+ public static native FileDescriptor createSubprocess(String cmd, String
arg0, String arg1,
+ int[] processId);
+
+ public static native void setPtyWindowSize(FileDescriptor fd, int row,
int col, int xpixel,
+ int ypixel);
+
+ /**
+ * Causes the calling thread to wait for the process associated with the
receiver to finish
+ * executing.
+ *
+ * @return The exit value of the Process being waited on
+ *
+ */
+ public static native int waitFor(int processId);
+
+ static {
+ System.loadLibrary("com_google_ase_Exec");
+ }
+}
=======================================
--- /dev/null
+++ /python/ase/scripts/hello_world.py Fri Oct 30 09:46:09 2009
@@ -0,0 +1,3 @@
+import android
+droid = android.Android()
+droid.makeToast('Hello, Android!')
=======================================
---
/android/AndroidScriptingEnvironment/lib/TTS_library_stub_1.4_market.jar
Tue Aug 4 01:36:09 2009
+++ /dev/null
Binary file, no diff available.
=======================================
--- /android/AndroidScriptingEnvironment/lib/commons-io-1.4.jar Tue Oct 20
05:52:45 2009
+++ /dev/null
Binary file, no diff available.
=======================================
--- /android/AndroidScriptingEnvironment/lib/locale_platform.jar Fri Sep 11
14:32:12 2009
+++ /dev/null
@@ -1,26 +0,0 @@
-PK }¶å: META-INF/MANIFEST.MFþÊ óMÌËLK-.Ñ
-K-*ÎÌϳR0Ô3àå
-NMÌIM±R()*Mååâå PK w‚ð9) ' PK
- J¶å: com/PK
- J¶å: com/twofortyfouram/PK Jµå: com/twofortyfouram/Intent.class•UýS A ~V,.Ä4µÌ¬¤o´‚´O£¬ë<õêàì8˜š~`N\í
-¸cà(û·š¦ššê÷þ¨¦wAc1› Ø}ÞÝçÙ÷c÷åç¯/ß ÌÂŽ¢ a¢
-TÓáÛ`#¨‡ï6‚fÝ­¦
-?ä~ E?Ãð–ûÆMW\ 3m­mñrÈ0hëù‚é”l=k u f M üFèúaÑ­4y„ô‡ FUÍ1¬\I_4œR^w
-#·Ì0bv$óaÝó73
-â ·È‘T·#©JPv+<åµüI¹åÐ üT·Üî!K†­ïZ qzÏz2“á¸ì´fåh
¨`„áÎ <üÃíø˜wTÛ)™–¦šº‚ã ðQf2 ìè­è檂“ ×zÕ ŒŽ?«Ö3 ¹]44ògò :‚I¹Ò_8¶JaÙ”º–7¥‚m*8Ë þ¯ ß ënj—Ä0Þ%öÄÖÕEÍ.dŸ(8Ç0Û£\‡F ­[Ð,ؤu±—
w´ ƒád—ŒtÛ \a˜ëQLâ1Ä y­ÎËnÈ×é ÚM?ôª¼è5¼µ
-W}? ]‘ä à é­t8 †±N TÀUÕV
-ËVp !’XHÐzV}ad ÙvØ%SÏ-;+âY& ?ð|/\ ­Éé"C¿ ¬ó "¸ Ç
-ÌFq‡áJçØ‚ßhÖj
-_·j¼ÞòLß.óš˜(¸ÇpñR#9}?á¼ö ‰rÅm4 4ñ ÿº×n žKa‰ îÇ‘Á e“‡šØH719-
-Ø2fbXÀã(
-1 íYŠC Ud øy¯Z«ðœ[å l—ÈNO‰a KQè]-¬½ Ç2V( T³ªK
-m>ù7ý•¹·ñeö=ä6žŠ´=£Ç° ŠÈï éù<׬®ñº#2!: ¸ E·ÞÊÌŽ±?¤ü1LšÿìÇTöXž e¾ä
Æ@Ûœ §R;§zR} 1 C8L(J¨
-á#ˆýÁ „ %|”ð°„
-•ð á
-'<!áS„NKø á) ' Ÿ—ð — nC _F â3M_áõ ¸*1® NI ¥iÖ'n* sdÉ’ Ñ85ó
7¿âöË‘»ýß y ™ùˆù x˜ÿ í Œ -²I¿1 ÁÞÓ¿Û " ñ6
-9X42¬¶v>ÿ
-PK àvÛ°8 ( PK }¶å:w‚ð9) ' META-INF/MANIFEST.MFþÊ PK
-
- J¶å: o com/PK
-
- J¶å: ‘ com/twofortyfouram/PK Jµå:àvÛ°8 (  com/twofortyfouram/Intent.classPK G
=======================================
--- /android/AndroidScriptingEnvironment/.classpath Tue Oct 20 05:52:45 2009
+++ /android/AndroidScriptingEnvironment/.classpath Fri Oct 30 09:46:09 2009
@@ -3,8 +3,8 @@
<classpathentry excluding="**/.svn*|doc" kind="src" path="src"/>
<classpathentry excluding="**/.svn*|doc" kind="src" path="gen"/>
<classpathentry kind="con"
path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
- <classpathentry kind="lib" path="lib/locale_platform.jar"/>
- <classpathentry kind="lib" path="lib/TTS_library_stub_1.4_market.jar"/>
- <classpathentry kind="lib" path="lib/commons-io-1.4.jar"/>
+ <classpathentry kind="lib" path="libs/locale_platform.jar"/>
+ <classpathentry kind="lib" path="libs/TTS_library_stub_1.4_market.jar"/>
+ <classpathentry kind="lib" path="libs/commons-io-1.4.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
=======================================
---
/android/AndroidScriptingEnvironment/src/com/google/ase/InterpreterManager.java
Wed Oct 21 09:07:36 2009
+++
/android/AndroidScriptingEnvironment/src/com/google/ase/InterpreterManager.java
Fri Oct 30 09:46:09 2009
@@ -97,7 +97,7 @@
menu.clear();
buildMenuIdMaps();
buildInstallLanguagesMenu(menu);
- menu.add(Menu.NONE, MenuId.NETWORK.getId(), Menu.NONE, "Start
Network");
+ menu.add(Menu.NONE, MenuId.NETWORK.getId(), Menu.NONE, "Start Server");
menu.add(Menu.NONE, MenuId.HELP.getId(), Menu.NONE, "Help");
return true;
}
=======================================
---
/android/AndroidScriptingEnvironment/src/com/google/ase/interpreter/InterpreterInstaller.java
Tue Oct 20 03:17:02 2009
+++
/android/AndroidScriptingEnvironment/src/com/google/ase/interpreter/InterpreterInstaller.java
Fri Oct 30 09:46:09 2009
@@ -21,10 +21,10 @@
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
-import android.os.Exec;

import com.google.ase.AseLog;
import com.google.ase.Constants;
+import com.google.ase.Exec;

/**
* Activity for installing interpreters.
=======================================
---
/android/AndroidScriptingEnvironment/src/com/google/ase/interpreter/InterpreterProcess.java
Tue Oct 20 03:17:02 2009
+++
/android/AndroidScriptingEnvironment/src/com/google/ase/interpreter/InterpreterProcess.java
Fri Oct 30 09:46:09 2009
@@ -28,13 +28,13 @@
import java.util.Map;
import java.util.Map.Entry;

-import android.os.Exec;
import android.os.Process;
import android.util.Log;

import com.google.ase.AndroidFacade;
import com.google.ase.AndroidProxy;
import com.google.ase.AseLog;
+import com.google.ase.Exec;
import com.google.ase.interpreter.lua.LuaInterpreterProcess;

/**
=======================================
---
/android/AndroidScriptingEnvironment/src/com/google/ase/terminal/EmulatorView.java
Tue Oct 20 03:17:02 2009
+++
/android/AndroidScriptingEnvironment/src/com/google/ase/terminal/EmulatorView.java
Fri Oct 30 09:46:09 2009
@@ -27,7 +27,6 @@
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
-import android.os.Exec;
import android.os.Handler;
import android.os.Message;
import android.util.AttributeSet;
@@ -41,6 +40,7 @@
import android.view.inputmethod.InputConnection;
import android.view.inputmethod.InputMethodManager;

+import com.google.ase.Exec;
import com.google.ase.R;
import com.google.ase.interpreter.InterpreterProcess;

Reply all
Reply to author
Forward
0 new messages