Created
September 22, 2011 22:03
-
-
Save eeejay/1236179 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Components.utils.import("resource://gre/modules/ctypes.jsm") | |
| var liblog = ctypes.open('liblog.so'); | |
| var android_log = liblog.declare("__android_log_write", | |
| ctypes.default_abi, | |
| ctypes.int32_t, | |
| ctypes.int32_t, | |
| ctypes.char.ptr, | |
| ctypes.char.ptr); | |
| var libxul = ctypes.open('libxul.so'); | |
| var jclass = ctypes.voidptr_t; | |
| var jobject = ctypes.voidptr_t; | |
| var jvalue = ctypes.voidptr_t; | |
| var jmethodid = ctypes.voidptr_t; | |
| var JNINativeInterface = new ctypes.StructType( | |
| "JNINativeInterface", | |
| [{reserved0: ctypes.voidptr_t}, | |
| {reserved1: ctypes.voidptr_t}, | |
| {reserved2: ctypes.voidptr_t}, | |
| {reserved3: ctypes.voidptr_t}, | |
| {GetVersion: new ctypes.FunctionType(ctypes.default_abi, | |
| ctypes.int32_t, | |
| [ctypes.voidptr_t]).ptr}, | |
| {DefineClass: ctypes.voidptr_t}, | |
| {FindClass: new ctypes.FunctionType(ctypes.default_abi, | |
| jclass, | |
| [ctypes.voidptr_t, | |
| ctypes.char.ptr]).ptr}, | |
| {FromReflectedMethod: ctypes.voidptr_t}, | |
| {FromReflectedField: ctypes.voidptr_t}, | |
| {ToReflectedMethod: ctypes.voidptr_t}, | |
| {GetSuperclass: new ctypes.FunctionType(ctypes.default_abi, | |
| jclass, [ctypes.voidptr_t, jclass]).ptr}, | |
| {IsAssignableFrom: ctypes.voidptr_t}, | |
| {ToReflectedField: ctypes.voidptr_t}, | |
| {Throw: ctypes.voidptr_t}, | |
| {ThrowNew: ctypes.voidptr_t}, | |
| {ExceptionOccurred: ctypes.voidptr_t}, | |
| {ExceptionDescribe: ctypes.voidptr_t}, | |
| {ExceptionClear: ctypes.voidptr_t}, | |
| {FatalError: ctypes.voidptr_t}, | |
| {PushLocalFrame: ctypes.voidptr_t}, | |
| {PopLocalFrame: ctypes.voidptr_t}, | |
| {NewGlobalRef: ctypes.voidptr_t}, | |
| {DeleteGlobalRef: ctypes.voidptr_t}, | |
| {DeleteLocalRef: new ctypes.FunctionType(ctypes.default_abi, | |
| ctypes.void_t, | |
| [ctypes.voidptr_t, | |
| jobject]).ptr}, | |
| {IsSameObject: ctypes.voidptr_t}, | |
| {NewLocalRef: ctypes.voidptr_t}, | |
| {EnsureLocalCapacity: ctypes.voidptr_t}, | |
| {AllocObject: ctypes.voidptr_t}, | |
| {NewObject: new ctypes.FunctionType(ctypes.default_abi, | |
| jobject, | |
| [ctypes.voidptr_t, | |
| jclass, | |
| jmethodid, | |
| "..."]).ptr}, | |
| {NewObjectV: ctypes.voidptr_t}, | |
| {NewObjectA: ctypes.voidptr_t}, | |
| {GetObjectClass: ctypes.voidptr_t}, | |
| {IsInstanceOf: ctypes.voidptr_t}, | |
| {GetMethodID: new ctypes.FunctionType(ctypes.default_abi, | |
| jmethodid, | |
| [ctypes.voidptr_t, | |
| jclass, | |
| ctypes.char.ptr, | |
| ctypes.char.ptr]).ptr}, | |
| {CallObjectMethod: ctypes.voidptr_t}, | |
| {CallObjectMethodV: ctypes.voidptr_t}, | |
| {CallObjectMethodA: ctypes.voidptr_t}, | |
| {CallBooleanMethod: new ctypes.FunctionType(ctypes.default_abi, | |
| ctypes.uint8_t, | |
| [ctypes.voidptr_t, | |
| jobject, | |
| jmethodid, | |
| "..."]).ptr}, | |
| {CallBooleanMethodV: ctypes.voidptr_t}, | |
| {CallBooleanMethodA: ctypes.voidptr_t}, | |
| {CallByteMethod: ctypes.voidptr_t}, | |
| {CallByteMethodV: ctypes.voidptr_t}, | |
| {CallByteMethodA: ctypes.voidptr_t}, | |
| {CallCharMethod: ctypes.voidptr_t}, | |
| {CallCharMethodV: ctypes.voidptr_t}, | |
| {CallCharMethodA: ctypes.voidptr_t}, | |
| {CallShortMethod: ctypes.voidptr_t}, | |
| {CallShortMethodV: ctypes.voidptr_t}, | |
| {CallShortMethodA: ctypes.voidptr_t}, | |
| {CallIntMethod: ctypes.voidptr_t}, | |
| {CallIntMethodV: ctypes.voidptr_t}, | |
| {CallIntMethodA: ctypes.voidptr_t}, | |
| {CallLongMethod: ctypes.voidptr_t}, | |
| {CallLongMethodV: ctypes.voidptr_t}, | |
| {CallLongMethodA: ctypes.voidptr_t}, | |
| {CallFloatMethod: ctypes.voidptr_t}, | |
| {CallFloatMethodV: ctypes.voidptr_t}, | |
| {CallFloatMethodA: ctypes.voidptr_t}, | |
| {CallDoubleMethod: ctypes.voidptr_t}, | |
| {CallDoubleMethodV: ctypes.voidptr_t}, | |
| {CallDoubleMethodA: ctypes.voidptr_t}, | |
| {CallVoidMethod: new ctypes.FunctionType(ctypes.default_abi, | |
| ctypes.void_t, | |
| [ctypes.voidptr_t, | |
| jobject, | |
| jmethodid, | |
| "..."]).ptr}, | |
| {CallVoidMethodV: ctypes.voidptr_t}, | |
| {CallVoidMethodA: ctypes.voidptr_t}, | |
| {CallNonvirtualObjectMethod: ctypes.voidptr_t}, | |
| {CallNonvirtualObjectMethodV: ctypes.voidptr_t}, | |
| {CallNonvirtualObjectMethodA: ctypes.voidptr_t}, | |
| {CallNonvirtualBooleanMethod: ctypes.voidptr_t}, | |
| {CallNonvirtualBooleanMethodV: ctypes.voidptr_t}, | |
| {CallNonvirtualBooleanMethodA: ctypes.voidptr_t}, | |
| {CallNonvirtualByteMethod: ctypes.voidptr_t}, | |
| {CallNonvirtualByteMethodV: ctypes.voidptr_t}, | |
| {CallNonvirtualByteMethodA: ctypes.voidptr_t}, | |
| {CallNonvirtualCharMethod: ctypes.voidptr_t}, | |
| {CallNonvirtualCharMethodV: ctypes.voidptr_t}, | |
| {CallNonvirtualCharMethodA: ctypes.voidptr_t}, | |
| {CallNonvirtualShortMethod: ctypes.voidptr_t}, | |
| {CallNonvirtualShortMethodV: ctypes.voidptr_t}, | |
| {CallNonvirtualShortMethodA: ctypes.voidptr_t}, | |
| {CallNonvirtualIntMethod: ctypes.voidptr_t}, | |
| {CallNonvirtualIntMethodV: ctypes.voidptr_t}, | |
| {CallNonvirtualIntMethodA: ctypes.voidptr_t}, | |
| {CallNonvirtualLongMethod: ctypes.voidptr_t}, | |
| {CallNonvirtualLongMethodV: ctypes.voidptr_t}, | |
| {CallNonvirtualLongMethodA: ctypes.voidptr_t}, | |
| {CallNonvirtualFloatMethod: ctypes.voidptr_t}, | |
| {CallNonvirtualFloatMethodV: ctypes.voidptr_t}, | |
| {CallNonvirtualFloatMethodA: ctypes.voidptr_t}, | |
| {CallNonvirtualDoubleMethod: ctypes.voidptr_t}, | |
| {CallNonvirtualDoubleMethodV: ctypes.voidptr_t}, | |
| {CallNonvirtualDoubleMethodA: ctypes.voidptr_t}, | |
| {CallNonvirtualVoidMethod: ctypes.voidptr_t}, | |
| {CallNonvirtualVoidMethodV: ctypes.voidptr_t}, | |
| {CallNonvirtualVoidMethodA: ctypes.voidptr_t}, | |
| {GetFieldID: ctypes.voidptr_t}, | |
| {GetObjectField: ctypes.voidptr_t}, | |
| {GetBooleanField: ctypes.voidptr_t}, | |
| {GetByteField: ctypes.voidptr_t}, | |
| {GetCharField: ctypes.voidptr_t}, | |
| {GetShortField: ctypes.voidptr_t}, | |
| {GetIntField: ctypes.voidptr_t}, | |
| {GetLongField: ctypes.voidptr_t}, | |
| {GetFloatField: ctypes.voidptr_t}, | |
| {GetDoubleField: ctypes.voidptr_t}, | |
| {SetObjectField: ctypes.voidptr_t}, | |
| {SetBooleanField: ctypes.voidptr_t}, | |
| {SetByteField: ctypes.voidptr_t}, | |
| {SetCharField: ctypes.voidptr_t}, | |
| {SetShortField: ctypes.voidptr_t}, | |
| {SetIntField: ctypes.voidptr_t}, | |
| {SetLongField: ctypes.voidptr_t}, | |
| {SetFloatField: ctypes.voidptr_t}, | |
| {SetDoubleField: ctypes.voidptr_t}, | |
| {GetStaticMethodID: ctypes.voidptr_t}, | |
| {CallStaticObjectMethod: ctypes.voidptr_t}, | |
| {CallStaticObjectMethodV: ctypes.voidptr_t}, | |
| {CallStaticObjectMethodA: ctypes.voidptr_t}, | |
| {CallStaticBooleanMethod: ctypes.voidptr_t}, | |
| {CallStaticBooleanMethodV: ctypes.voidptr_t}, | |
| {CallStaticBooleanMethodA: ctypes.voidptr_t}, | |
| {CallStaticByteMethod: ctypes.voidptr_t}, | |
| {CallStaticByteMethodV: ctypes.voidptr_t}, | |
| {CallStaticByteMethodA: ctypes.voidptr_t}, | |
| {CallStaticCharMethod: ctypes.voidptr_t}, | |
| {CallStaticCharMethodV: ctypes.voidptr_t}, | |
| {CallStaticCharMethodA: ctypes.voidptr_t}, | |
| {CallStaticShortMethod: ctypes.voidptr_t}, | |
| {CallStaticShortMethodV: ctypes.voidptr_t}, | |
| {CallStaticShortMethodA: ctypes.voidptr_t}, | |
| {CallStaticIntMethod: ctypes.voidptr_t}, | |
| {CallStaticIntMethodV: ctypes.voidptr_t}, | |
| {CallStaticIntMethodA: ctypes.voidptr_t}, | |
| {CallStaticLongMethod: ctypes.voidptr_t}, | |
| {CallStaticLongMethodV: ctypes.voidptr_t}, | |
| {CallStaticLongMethodA: ctypes.voidptr_t}, | |
| {CallStaticFloatMethod: ctypes.voidptr_t}, | |
| {CallStaticFloatMethodV: ctypes.voidptr_t}, | |
| {CallStaticFloatMethodA: ctypes.voidptr_t}, | |
| {CallStaticDoubleMethod: ctypes.voidptr_t}, | |
| {CallStaticDoubleMethodV: ctypes.voidptr_t}, | |
| {CallStaticDoubleMethodA: ctypes.voidptr_t}, | |
| {CallStaticVoidMethod: ctypes.voidptr_t}, | |
| {CallStaticVoidMethodV: ctypes.voidptr_t}, | |
| {CallStaticVoidMethodA: ctypes.voidptr_t}, | |
| {GetStaticFieldID: ctypes.voidptr_t}, | |
| {GetStaticObjectField: ctypes.voidptr_t}, | |
| {GetStaticBooleanField: ctypes.voidptr_t}, | |
| {GetStaticByteField: ctypes.voidptr_t}, | |
| {GetStaticCharField: ctypes.voidptr_t}, | |
| {GetStaticShortField: ctypes.voidptr_t}, | |
| {GetStaticIntField: ctypes.voidptr_t}, | |
| {GetStaticLongField: ctypes.voidptr_t}, | |
| {GetStaticFloatField: ctypes.voidptr_t}, | |
| {GetStaticDoubleField: ctypes.voidptr_t}, | |
| {SetStaticObjectField: ctypes.voidptr_t}, | |
| {SetStaticBooleanField: ctypes.voidptr_t}, | |
| {SetStaticByteField: ctypes.voidptr_t}, | |
| {SetStaticCharField: ctypes.voidptr_t}, | |
| {SetStaticShortField: ctypes.voidptr_t}, | |
| {SetStaticIntField: ctypes.voidptr_t}, | |
| {SetStaticLongField: ctypes.voidptr_t}, | |
| {SetStaticFloatField: ctypes.voidptr_t}, | |
| {SetStaticDoubleField: ctypes.voidptr_t}, | |
| {NewString: ctypes.voidptr_t}, | |
| {GetStringLength: ctypes.voidptr_t}, | |
| {GetStringChars: ctypes.voidptr_t}, | |
| {ReleaseStringChars: ctypes.voidptr_t}, | |
| {NewStringUTF: new ctypes.FunctionType(ctypes.default_abi, | |
| jobject, | |
| [ctypes.voidptr_t, | |
| ctypes.char.ptr]).ptr}, | |
| {GetStringUTFLength: ctypes.voidptr_t}, | |
| {GetStringUTFChars: ctypes.voidptr_t}, | |
| {ReleaseStringUTFChars: ctypes.voidptr_t}, | |
| {GetArrayLength: ctypes.voidptr_t}, | |
| {NewObjectArray: ctypes.voidptr_t}, | |
| {GetObjectArrayElement: ctypes.voidptr_t}, | |
| {SetObjectArrayElement: ctypes.voidptr_t}, | |
| {NewBooleanArray: ctypes.voidptr_t}, | |
| {NewByteArray: ctypes.voidptr_t}, | |
| {NewCharArray: ctypes.voidptr_t}, | |
| {NewShortArray: ctypes.voidptr_t}, | |
| {NewIntArray: ctypes.voidptr_t}, | |
| {NewLongArray: ctypes.voidptr_t}, | |
| {NewFloatArray: ctypes.voidptr_t}, | |
| {NewDoubleArray: ctypes.voidptr_t}, | |
| {GetBooleanArrayElements: ctypes.voidptr_t}, | |
| {GetByteArrayElements: ctypes.voidptr_t}, | |
| {GetCharArrayElements: ctypes.voidptr_t}, | |
| {GetShortArrayElements: ctypes.voidptr_t}, | |
| {GetIntArrayElements: ctypes.voidptr_t}, | |
| {GetLongArrayElements: ctypes.voidptr_t}, | |
| {GetFloatArrayElements: ctypes.voidptr_t}, | |
| {GetDoubleArrayElements: ctypes.voidptr_t}, | |
| {ReleaseBooleanArrayElements: ctypes.voidptr_t}, | |
| {ReleaseByteArrayElements: ctypes.voidptr_t}, | |
| {ReleaseCharArrayElements: ctypes.voidptr_t}, | |
| {ReleaseShortArrayElements: ctypes.voidptr_t}, | |
| {ReleaseIntArrayElements: ctypes.voidptr_t}, | |
| {ReleaseLongArrayElements: ctypes.voidptr_t}, | |
| {ReleaseFloatArrayElements: ctypes.voidptr_t}, | |
| {ReleaseDoubleArrayElements: ctypes.voidptr_t}, | |
| {GetBooleanArrayRegion: ctypes.voidptr_t}, | |
| {GetByteArrayRegion: ctypes.voidptr_t}, | |
| {GetCharArrayRegion: ctypes.voidptr_t}, | |
| {GetShortArrayRegion: ctypes.voidptr_t}, | |
| {GetIntArrayRegion: ctypes.voidptr_t}, | |
| {GetLongArrayRegion: ctypes.voidptr_t}, | |
| {GetFloatArrayRegion: ctypes.voidptr_t}, | |
| {GetDoubleArrayRegion: ctypes.voidptr_t}, | |
| {SetBooleanArrayRegion: ctypes.voidptr_t}, | |
| {SetByteArrayRegion: ctypes.voidptr_t}, | |
| {SetCharArrayRegion: ctypes.voidptr_t}, | |
| {SetShortArrayRegion: ctypes.voidptr_t}, | |
| {SetIntArrayRegion: ctypes.voidptr_t}, | |
| {SetLongArrayRegion: ctypes.voidptr_t}, | |
| {SetFloatArrayRegion: ctypes.voidptr_t}, | |
| {SetDoubleArrayRegion: ctypes.voidptr_t}, | |
| {RegisterNatives: ctypes.voidptr_t}, | |
| {UnregisterNatives: ctypes.voidptr_t}, | |
| {MonitorEnter: ctypes.voidptr_t}, | |
| {MonitorExit: ctypes.voidptr_t}, | |
| {GetJavaVM: ctypes.voidptr_t}, | |
| {GetStringRegion: ctypes.voidptr_t}, | |
| {GetStringUTFRegion: ctypes.voidptr_t}, | |
| {GetPrimitiveArrayCritical: ctypes.voidptr_t}, | |
| {ReleasePrimitiveArrayCritical: ctypes.voidptr_t}, | |
| {GetStringCritical: ctypes.voidptr_t}, | |
| {ReleaseStringCritical: ctypes.voidptr_t}, | |
| {NewWeakGlobalRef: ctypes.voidptr_t}, | |
| {DeleteWeakGlobalRef: ctypes.voidptr_t}, | |
| {ExceptionCheck: ctypes.voidptr_t}, | |
| {NewDirectByteBuffer: ctypes.voidptr_t}, | |
| {GetDirectBufferAddress: ctypes.voidptr_t}, | |
| {GetDirectBufferCapacity: ctypes.voidptr_t}, | |
| {GetObjectRefType: ctypes.voidptr_t}] | |
| ); | |
| var GetJNIForThread = libxul.declare("GetJNIForThread", | |
| ctypes.default_abi, | |
| JNINativeInterface.ptr.ptr); | |
| android_log(3, "JNITest", "Started"); | |
| var jenv = GetJNIForThread(); | |
| android_log(3, "JNITest", "env: " + jenv); | |
| var jcls = jenv.contents.contents.FindClass(jenv, "android.speech.tts.TextToSpeech"); | |
| android_log(3, "JNITest", "class: " + jcls); | |
| android_log(3, "JNITest", "Done"); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment