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