mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-05 02:39:23 +02:00
JNIEnv* cannot be stored
This commit is contained in:
parent
39ab7ebb88
commit
e641c7392c
5 changed files with 120 additions and 146 deletions
|
@ -28,7 +28,7 @@ extern "C"
|
||||||
JNIEXPORT jobjectArray JNICALL Java_org_geometerplus_fbreader_formats_PluginCollection_nativePlugins(JNIEnv* env, jobject thiz) {
|
JNIEXPORT jobjectArray JNICALL Java_org_geometerplus_fbreader_formats_PluginCollection_nativePlugins(JNIEnv* env, jobject thiz) {
|
||||||
const std::vector<shared_ptr<FormatPlugin> > plugins = PluginCollection::Instance().plugins();
|
const std::vector<shared_ptr<FormatPlugin> > plugins = PluginCollection::Instance().plugins();
|
||||||
const size_t size = plugins.size();
|
const size_t size = plugins.size();
|
||||||
jclass cls = AndroidUtil::Class_NativeFormatPlugin->j();
|
jclass cls = AndroidUtil::Class_NativeFormatPlugin.j();
|
||||||
// TODO: memory leak?
|
// TODO: memory leak?
|
||||||
jobjectArray javaPlugins = env->NewObjectArray(size, cls, 0);
|
jobjectArray javaPlugins = env->NewObjectArray(size, cls, 0);
|
||||||
|
|
||||||
|
|
|
@ -25,28 +25,30 @@
|
||||||
|
|
||||||
JavaVM *AndroidUtil::ourJavaVM = 0;
|
JavaVM *AndroidUtil::ourJavaVM = 0;
|
||||||
|
|
||||||
shared_ptr<JavaClass> AndroidUtil::Class_java_lang_Object;
|
JavaClass AndroidUtil::Class_java_lang_Object("java/lang/Object");
|
||||||
shared_ptr<JavaArray> AndroidUtil::Array_java_lang_Object;
|
JavaArray AndroidUtil::Array_java_lang_Object(Class_java_lang_Object);
|
||||||
shared_ptr<JavaClass> AndroidUtil::Class_java_lang_RuntimeException;
|
JavaClass AndroidUtil::Class_java_lang_RuntimeException("java/lang/RuntimeException");
|
||||||
shared_ptr<JavaClass> AndroidUtil::Class_java_lang_String;
|
JavaClass AndroidUtil::Class_java_lang_String("java/lang/String");
|
||||||
shared_ptr<JavaClass> AndroidUtil::Class_java_util_Collection;
|
JavaClass AndroidUtil::Class_java_util_Collection("java/util/Collection");
|
||||||
shared_ptr<JavaClass> AndroidUtil::Class_java_util_List;
|
JavaClass AndroidUtil::Class_java_util_List("java/util/List");
|
||||||
shared_ptr<JavaClass> AndroidUtil::Class_java_util_Locale;
|
JavaClass AndroidUtil::Class_java_util_Locale("java/util/Locale");
|
||||||
shared_ptr<JavaClass> AndroidUtil::Class_java_io_InputStream;
|
JavaClass AndroidUtil::Class_java_io_InputStream("java/io/InputStream");
|
||||||
shared_ptr<JavaClass> AndroidUtil::Class_ZLibrary;
|
|
||||||
shared_ptr<JavaClass> AndroidUtil::Class_NativeFormatPlugin;
|
JavaClass AndroidUtil::Class_ZLibrary("org/geometerplus/zlibrary/core/library/ZLibrary");
|
||||||
shared_ptr<JavaClass> AndroidUtil::Class_PluginCollection;
|
JavaClass AndroidUtil::Class_ZLFile("org/geometerplus/zlibrary/core/filesystem/ZLFile");
|
||||||
shared_ptr<JavaClass> AndroidUtil::Class_Encoding;
|
JavaClass AndroidUtil::Class_ZLFileImage("org/geometerplus/zlibrary/core/image/ZLFileImage");
|
||||||
shared_ptr<JavaClass> AndroidUtil::Class_EncodingConverter;
|
JavaClass AndroidUtil::Class_ZLTextModel("org/geometerplus/zlibrary/text/model/ZLTextModel");
|
||||||
shared_ptr<JavaClass> AndroidUtil::Class_JavaEncodingCollection;
|
|
||||||
shared_ptr<JavaClass> AndroidUtil::Class_Paths;
|
JavaClass AndroidUtil::Class_Encoding("org/geometerplus/zlibrary/core/encodings/Encoding");
|
||||||
shared_ptr<JavaClass> AndroidUtil::Class_ZLFile;
|
JavaClass AndroidUtil::Class_EncodingConverter("org/geometerplus/zlibrary/core/encodings/EncodingConverter");
|
||||||
shared_ptr<JavaClass> AndroidUtil::Class_ZLFileImage;
|
JavaClass AndroidUtil::Class_JavaEncodingCollection("org/geometerplus/zlibrary/core/encodings/JavaEncodingCollection");
|
||||||
shared_ptr<JavaClass> AndroidUtil::Class_ZLTextModel;
|
|
||||||
shared_ptr<JavaClass> AndroidUtil::Class_Book;
|
JavaClass AndroidUtil::Class_NativeFormatPlugin("org/geometerplus/fbreader/formats/NativeFormatPlugin");
|
||||||
shared_ptr<JavaClass> AndroidUtil::Class_Tag;
|
JavaClass AndroidUtil::Class_PluginCollection("org/geometerplus/fbreader/formats/PluginCollection");
|
||||||
shared_ptr<JavaClass> AndroidUtil::Class_NativeBookModel;
|
JavaClass AndroidUtil::Class_Paths("org/geometerplus/fbreader/Paths");
|
||||||
//shared_ptr<JavaClass> AndroidUtil::Class_BookReadingException;
|
JavaClass AndroidUtil::Class_Book("org/geometerplus/fbreader/library/Book");
|
||||||
|
JavaClass AndroidUtil::Class_Tag("org/geometerplus/fbreader/library/Tag");
|
||||||
|
JavaClass AndroidUtil::Class_NativeBookModel("org/geometerplus/fbreader/bookmodel/NativeBookModel");
|
||||||
|
|
||||||
shared_ptr<StringMethod> AndroidUtil::Method_java_lang_String_toLowerCase;
|
shared_ptr<StringMethod> AndroidUtil::Method_java_lang_String_toLowerCase;
|
||||||
shared_ptr<StringMethod> AndroidUtil::Method_java_lang_String_toUpperCase;
|
shared_ptr<StringMethod> AndroidUtil::Method_java_lang_String_toUpperCase;
|
||||||
|
@ -124,100 +126,73 @@ JNIEnv *AndroidUtil::getEnv() {
|
||||||
bool AndroidUtil::init(JavaVM* jvm) {
|
bool AndroidUtil::init(JavaVM* jvm) {
|
||||||
ourJavaVM = jvm;
|
ourJavaVM = jvm;
|
||||||
|
|
||||||
JNIEnv *env = getEnv();
|
Method_java_lang_String_toLowerCase = new StringMethod(Class_java_lang_String, "toLowerCase", "()");
|
||||||
|
Method_java_lang_String_toUpperCase = new StringMethod(Class_java_lang_String, "toUpperCase", "()");
|
||||||
|
|
||||||
Class_java_lang_Object = new JavaClass(env, "java/lang/Object");
|
Method_java_util_Collection_toArray = new ObjectArrayMethod(Class_java_util_Collection, "toArray", Array_java_lang_Object, "()");
|
||||||
Array_java_lang_Object = new JavaArray(*Class_java_lang_Object);
|
|
||||||
Class_java_lang_RuntimeException = new JavaClass(env, "java/lang/RuntimeException");
|
|
||||||
Class_java_lang_String = new JavaClass(env, "java/lang/String");
|
|
||||||
Class_java_util_Collection = new JavaClass(env, "java/util/Collection");
|
|
||||||
Class_java_util_List = new JavaClass(env, "java/util/List");
|
|
||||||
Class_java_util_Locale = new JavaClass(env, "java/util/Locale");
|
|
||||||
Class_java_io_InputStream = new JavaClass(env, "java/io/InputStream");
|
|
||||||
|
|
||||||
Class_ZLibrary = new JavaClass(env, "org/geometerplus/zlibrary/core/library/ZLibrary");
|
StaticMethod_java_util_Locale_getDefault = new StaticObjectMethod(Class_java_util_Locale, "getDefault", Class_java_util_Locale, "()");
|
||||||
Class_ZLFile = new JavaClass(env, "org/geometerplus/zlibrary/core/filesystem/ZLFile");
|
Method_java_util_Locale_getLanguage = new StringMethod(Class_java_util_Locale, "getLanguage", "()");
|
||||||
Class_ZLFileImage = new JavaClass(env, "org/geometerplus/zlibrary/core/image/ZLFileImage");
|
|
||||||
Class_ZLTextModel = new JavaClass(env, "org/geometerplus/zlibrary/text/model/ZLTextModel");
|
|
||||||
|
|
||||||
Class_Encoding = new JavaClass(env, "org/geometerplus/zlibrary/core/encodings/Encoding");
|
Method_java_io_InputStream_close = new VoidMethod(Class_java_io_InputStream, "close", "()");
|
||||||
Class_EncodingConverter = new JavaClass(env, "org/geometerplus/zlibrary/core/encodings/EncodingConverter");
|
Method_java_io_InputStream_read = new IntMethod(Class_java_io_InputStream, "read", "([BII)");
|
||||||
Class_JavaEncodingCollection = new JavaClass(env, "org/geometerplus/zlibrary/core/encodings/JavaEncodingCollection");
|
Method_java_io_InputStream_skip = new LongMethod(Class_java_io_InputStream, "skip", "(J)");
|
||||||
|
|
||||||
Class_NativeFormatPlugin = new JavaClass(env, "org/geometerplus/fbreader/formats/NativeFormatPlugin");
|
StaticMethod_ZLibrary_Instance = new StaticObjectMethod(Class_ZLibrary, "Instance", Class_ZLibrary, "()");
|
||||||
Class_PluginCollection = new JavaClass(env, "org/geometerplus/fbreader/formats/PluginCollection");
|
Method_ZLibrary_getVersionName = new StringMethod(Class_ZLibrary, "getVersionName", "()");
|
||||||
Class_Paths = new JavaClass(env, "org/geometerplus/fbreader/Paths");
|
|
||||||
Class_Book = new JavaClass(env, "org/geometerplus/fbreader/library/Book");
|
|
||||||
Class_Tag = new JavaClass(env, "org/geometerplus/fbreader/library/Tag");
|
|
||||||
Class_NativeBookModel = new JavaClass(env, "org/geometerplus/fbreader/bookmodel/NativeBookModel");
|
|
||||||
|
|
||||||
Method_java_lang_String_toLowerCase = new StringMethod(*Class_java_lang_String, "toLowerCase", "()");
|
Constructor_NativeFormatPlugin = new Constructor(Class_NativeFormatPlugin, "(Ljava/lang/String;)V");
|
||||||
Method_java_lang_String_toUpperCase = new StringMethod(*Class_java_lang_String, "toUpperCase", "()");
|
Method_NativeFormatPlugin_supportedFileType = new StringMethod(Class_NativeFormatPlugin, "supportedFileType", "()");
|
||||||
|
|
||||||
Method_java_util_Collection_toArray = new ObjectArrayMethod(*Class_java_util_Collection, "toArray", *Array_java_lang_Object, "()");
|
StaticMethod_PluginCollection_Instance = new StaticObjectMethod(Class_PluginCollection, "Instance", Class_PluginCollection, "()");
|
||||||
|
|
||||||
StaticMethod_java_util_Locale_getDefault = new StaticObjectMethod(*Class_java_util_Locale, "getDefault", *Class_java_util_Locale, "()");
|
Method_Encoding_createConverter = new ObjectMethod(Class_Encoding, "createConverter", Class_EncodingConverter, "()");
|
||||||
Method_java_util_Locale_getLanguage = new StringMethod(*Class_java_util_Locale, "getLanguage", "()");
|
Field_EncodingConverter_Name = new ObjectField(Class_EncodingConverter, "Name", Class_java_lang_String);
|
||||||
|
Method_EncodingConverter_convert = new IntMethod(Class_EncodingConverter, "convert", "([BII[BI)");
|
||||||
|
Method_EncodingConverter_reset = new VoidMethod(Class_EncodingConverter, "reset", "()");
|
||||||
|
|
||||||
Method_java_io_InputStream_close = new VoidMethod(*Class_java_io_InputStream, "close", "()");
|
StaticMethod_JavaEncodingCollection_Instance = new StaticObjectMethod(Class_JavaEncodingCollection, "Instance", Class_JavaEncodingCollection, "()");
|
||||||
Method_java_io_InputStream_read = new IntMethod(*Class_java_io_InputStream, "read", "([BII)");
|
Method_JavaEncodingCollection_getEncoding_String = new ObjectMethod(Class_JavaEncodingCollection, "getEncoding", Class_Encoding, "(Ljava/lang/String;)");
|
||||||
Method_java_io_InputStream_skip = new LongMethod(*Class_java_io_InputStream, "skip", "(J)");
|
Method_JavaEncodingCollection_getEncoding_int = new ObjectMethod(Class_JavaEncodingCollection, "getEncoding", Class_Encoding, "(I)");
|
||||||
|
Method_JavaEncodingCollection_providesConverterFor = new BooleanMethod(Class_JavaEncodingCollection, "providesConverterFor", "(Ljava/lang/String;)");
|
||||||
|
|
||||||
StaticMethod_ZLibrary_Instance = new StaticObjectMethod(*Class_ZLibrary, "Instance", *Class_ZLibrary, "()");
|
StaticMethod_ZLFile_createFileByPath = new StaticObjectMethod(Class_ZLFile, "createFileByPath", Class_ZLFile, "(Ljava/lang/String;)");
|
||||||
Method_ZLibrary_getVersionName = new StringMethod(*Class_ZLibrary, "getVersionName", "()");
|
Method_ZLFile_children = new ObjectMethod(Class_ZLFile, "children", Class_java_util_List, "()");
|
||||||
|
Method_ZLFile_exists = new BooleanMethod(Class_ZLFile, "exists", "()");
|
||||||
|
Method_ZLFile_isDirectory = new BooleanMethod(Class_ZLFile, "isDirectory", "()");
|
||||||
|
Method_ZLFile_getInputStream = new ObjectMethod(Class_ZLFile, "getInputStream", Class_java_io_InputStream, "()");
|
||||||
|
Method_ZLFile_getPath = new StringMethod(Class_ZLFile, "getPath", "()");
|
||||||
|
Method_ZLFile_size = new LongMethod(Class_ZLFile, "size", "()");
|
||||||
|
|
||||||
Constructor_NativeFormatPlugin = new Constructor(*Class_NativeFormatPlugin, "(Ljava/lang/String;)V");
|
Constructor_ZLFileImage = new Constructor(Class_ZLFileImage, "(Ljava/lang/String;Lorg/geometerplus/zlibrary/core/filesystem/ZLFile;Ljava/lang/String;II)V");
|
||||||
Method_NativeFormatPlugin_supportedFileType = new StringMethod(*Class_NativeFormatPlugin, "supportedFileType", "()");
|
|
||||||
|
|
||||||
StaticMethod_PluginCollection_Instance = new StaticObjectMethod(*Class_PluginCollection, "Instance", *Class_PluginCollection, "()");
|
StaticMethod_Paths_cacheDirectory = new StaticObjectMethod(Class_Paths, "cacheDirectory", Class_java_lang_String, "()");
|
||||||
|
|
||||||
Method_Encoding_createConverter = new ObjectMethod(*Class_Encoding, "createConverter", *Class_EncodingConverter, "()");
|
Field_Book_File = new ObjectField(Class_Book, "File", Class_ZLFile);
|
||||||
Field_EncodingConverter_Name = new ObjectField(*Class_EncodingConverter, "Name", *Class_java_lang_String);
|
Method_Book_getTitle = new StringMethod(Class_Book, "getTitle", "()");
|
||||||
Method_EncodingConverter_convert = new IntMethod(*Class_EncodingConverter, "convert", "([BII[BI)");
|
Method_Book_getLanguage = new StringMethod(Class_Book, "getLanguage", "()");
|
||||||
Method_EncodingConverter_reset = new VoidMethod(*Class_EncodingConverter, "reset", "()");
|
Method_Book_getEncodingNoDetection = new StringMethod(Class_Book, "getEncodingNoDetection", "()");
|
||||||
|
Method_Book_setTitle = new VoidMethod(Class_Book, "setTitle", "(Ljava/lang/String;)");
|
||||||
|
Method_Book_setSeriesInfo = new VoidMethod(Class_Book, "setSeriesInfo", "(Ljava/lang/String;F)");
|
||||||
|
Method_Book_setLanguage = new VoidMethod(Class_Book, "setLanguage", "(Ljava/lang/String;)");
|
||||||
|
Method_Book_setEncoding = new VoidMethod(Class_Book, "setEncoding", "(Ljava/lang/String;)");
|
||||||
|
Method_Book_addAuthor = new VoidMethod(Class_Book, "addAuthor", "(Ljava/lang/String;Ljava/lang/String;)");
|
||||||
|
Method_Book_addTag = new VoidMethod(Class_Book, "addTag", "(Lorg/geometerplus/fbreader/library/Tag;)");
|
||||||
|
Method_Book_save = new BooleanMethod(Class_Book, "save", "()");
|
||||||
|
|
||||||
StaticMethod_JavaEncodingCollection_Instance = new StaticObjectMethod(*Class_JavaEncodingCollection, "Instance", *Class_JavaEncodingCollection, "()");
|
StaticMethod_Tag_getTag = new StaticObjectMethod(Class_Tag, "getTag", Class_Tag, "(Lorg/geometerplus/fbreader/library/Tag;Ljava/lang/String;)");
|
||||||
Method_JavaEncodingCollection_getEncoding_String = new ObjectMethod(*Class_JavaEncodingCollection, "getEncoding", *Class_Encoding, "(Ljava/lang/String;)");
|
|
||||||
Method_JavaEncodingCollection_getEncoding_int = new ObjectMethod(*Class_JavaEncodingCollection, "getEncoding", *Class_Encoding, "(I)");
|
|
||||||
Method_JavaEncodingCollection_providesConverterFor = new BooleanMethod(*Class_JavaEncodingCollection, "providesConverterFor", "(Ljava/lang/String;)");
|
|
||||||
|
|
||||||
StaticMethod_ZLFile_createFileByPath = new StaticObjectMethod(*Class_ZLFile, "createFileByPath", *Class_ZLFile, "(Ljava/lang/String;)");
|
Field_NativeBookModel_Book = new ObjectField(Class_NativeBookModel, "Book", Class_Book);
|
||||||
Method_ZLFile_children = new ObjectMethod(*Class_ZLFile, "children", *Class_java_util_List, "()");
|
Method_NativeBookModel_initInternalHyperlinks = new VoidMethod(Class_NativeBookModel, "initInternalHyperlinks", "(Ljava/lang/String;Ljava/lang/String;I)");
|
||||||
Method_ZLFile_exists = new BooleanMethod(*Class_ZLFile, "exists", "()");
|
Method_NativeBookModel_initTOC = new VoidMethod(Class_NativeBookModel, "initTOC", "(Lorg/geometerplus/zlibrary/text/model/ZLTextModel;[I[I)");
|
||||||
Method_ZLFile_isDirectory = new BooleanMethod(*Class_ZLFile, "isDirectory", "()");
|
Method_NativeBookModel_createTextModel = new ObjectMethod(Class_NativeBookModel, "createTextModel", Class_ZLTextModel, "(Ljava/lang/String;Ljava/lang/String;I[I[I[I[I[BLjava/lang/String;Ljava/lang/String;I)");
|
||||||
Method_ZLFile_getInputStream = new ObjectMethod(*Class_ZLFile, "getInputStream", *Class_java_io_InputStream, "()");
|
Method_NativeBookModel_setBookTextModel = new VoidMethod(Class_NativeBookModel, "setBookTextModel", "(Lorg/geometerplus/zlibrary/text/model/ZLTextModel;)");
|
||||||
Method_ZLFile_getPath = new StringMethod(*Class_ZLFile, "getPath", "()");
|
Method_NativeBookModel_setFootnoteModel = new VoidMethod(Class_NativeBookModel, "setFootnoteModel", "(Lorg/geometerplus/zlibrary/text/model/ZLTextModel;)");
|
||||||
Method_ZLFile_size = new LongMethod(*Class_ZLFile, "size", "()");
|
Method_NativeBookModel_addImage = new VoidMethod(Class_NativeBookModel, "addImage", "(Ljava/lang/String;Lorg/geometerplus/zlibrary/core/image/ZLImage;)");
|
||||||
|
|
||||||
Constructor_ZLFileImage = new Constructor(*Class_ZLFileImage, "(Ljava/lang/String;Lorg/geometerplus/zlibrary/core/filesystem/ZLFile;Ljava/lang/String;II)V");
|
|
||||||
|
|
||||||
StaticMethod_Paths_cacheDirectory = new StaticObjectMethod(*Class_Paths, "cacheDirectory", *Class_java_lang_String, "()");
|
|
||||||
|
|
||||||
Field_Book_File = new ObjectField(*Class_Book, "File", *Class_ZLFile);
|
|
||||||
Method_Book_getTitle = new StringMethod(*Class_Book, "getTitle", "()");
|
|
||||||
Method_Book_getLanguage = new StringMethod(*Class_Book, "getLanguage", "()");
|
|
||||||
Method_Book_getEncodingNoDetection = new StringMethod(*Class_Book, "getEncodingNoDetection", "()");
|
|
||||||
Method_Book_setTitle = new VoidMethod(*Class_Book, "setTitle", "(Ljava/lang/String;)");
|
|
||||||
Method_Book_setSeriesInfo = new VoidMethod(*Class_Book, "setSeriesInfo", "(Ljava/lang/String;F)");
|
|
||||||
Method_Book_setLanguage = new VoidMethod(*Class_Book, "setLanguage", "(Ljava/lang/String;)");
|
|
||||||
Method_Book_setEncoding = new VoidMethod(*Class_Book, "setEncoding", "(Ljava/lang/String;)");
|
|
||||||
Method_Book_addAuthor = new VoidMethod(*Class_Book, "addAuthor", "(Ljava/lang/String;Ljava/lang/String;)");
|
|
||||||
Method_Book_addTag = new VoidMethod(*Class_Book, "addTag", "(Lorg/geometerplus/fbreader/library/Tag;)");
|
|
||||||
Method_Book_save = new BooleanMethod(*Class_Book, "save", "()");
|
|
||||||
|
|
||||||
StaticMethod_Tag_getTag = new StaticObjectMethod(*Class_Tag, "getTag", *Class_Tag, "(Lorg/geometerplus/fbreader/library/Tag;Ljava/lang/String;)");
|
|
||||||
|
|
||||||
Field_NativeBookModel_Book = new ObjectField(*Class_NativeBookModel, "Book", *Class_Book);
|
|
||||||
Method_NativeBookModel_initInternalHyperlinks = new VoidMethod(*Class_NativeBookModel, "initInternalHyperlinks", "(Ljava/lang/String;Ljava/lang/String;I)");
|
|
||||||
Method_NativeBookModel_initTOC = new VoidMethod(*Class_NativeBookModel, "initTOC", "(Lorg/geometerplus/zlibrary/text/model/ZLTextModel;[I[I)");
|
|
||||||
Method_NativeBookModel_createTextModel = new ObjectMethod(*Class_NativeBookModel, "createTextModel", *Class_ZLTextModel, "(Ljava/lang/String;Ljava/lang/String;I[I[I[I[I[BLjava/lang/String;Ljava/lang/String;I)");
|
|
||||||
Method_NativeBookModel_setBookTextModel = new VoidMethod(*Class_NativeBookModel, "setBookTextModel", "(Lorg/geometerplus/zlibrary/text/model/ZLTextModel;)");
|
|
||||||
Method_NativeBookModel_setFootnoteModel = new VoidMethod(*Class_NativeBookModel, "setFootnoteModel", "(Lorg/geometerplus/zlibrary/text/model/ZLTextModel;)");
|
|
||||||
Method_NativeBookModel_addImage = new VoidMethod(*Class_NativeBookModel, "addImage", "(Ljava/lang/String;Lorg/geometerplus/zlibrary/core/image/ZLImage;)");
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Class_BookReadingException = new JavaClass(env, "org/geometerplus/fbreader/bookmodel/BookReadingException");
|
Class_BookReadingException = new JavaClass(env, "org/geometerplus/fbreader/bookmodel/BookReadingException");
|
||||||
StaticMethod_BookReadingException_throwForFile = new StaticVoidMethod(*Class_BookReadingException, "throwForFile", "(Ljava/lang/String;Lorg/geometerplus/zlibrary/core/filesystem/ZLFile;)V") );
|
StaticMethod_BookReadingException_throwForFile = new StaticVoidMethod(Class_BookReadingException, "throwForFile", "(Ljava/lang/String;Lorg/geometerplus/zlibrary/core/filesystem/ZLFile;)V") );
|
||||||
*/
|
*/
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -299,7 +274,7 @@ jbyteArray AndroidUtil::createJavaByteArray(JNIEnv *env, const std::vector<jbyte
|
||||||
}
|
}
|
||||||
|
|
||||||
void AndroidUtil::throwRuntimeException(JNIEnv *env, const std::string &message) {
|
void AndroidUtil::throwRuntimeException(JNIEnv *env, const std::string &message) {
|
||||||
env->ThrowNew(Class_java_lang_RuntimeException->j(), message.c_str());
|
env->ThrowNew(Class_java_lang_RuntimeException.j(), message.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -49,28 +49,28 @@ private:
|
||||||
static JavaVM *ourJavaVM;
|
static JavaVM *ourJavaVM;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static shared_ptr<JavaClass> Class_java_lang_Object;
|
static JavaClass Class_java_lang_Object;
|
||||||
static shared_ptr<JavaArray> Array_java_lang_Object;
|
static JavaArray Array_java_lang_Object;
|
||||||
static shared_ptr<JavaClass> Class_java_lang_RuntimeException;
|
static JavaClass Class_java_lang_RuntimeException;
|
||||||
static shared_ptr<JavaClass> Class_java_lang_String;
|
static JavaClass Class_java_lang_String;
|
||||||
static shared_ptr<JavaClass> Class_java_util_Collection;
|
static JavaClass Class_java_util_Collection;
|
||||||
static shared_ptr<JavaClass> Class_java_util_List;
|
static JavaClass Class_java_util_List;
|
||||||
static shared_ptr<JavaClass> Class_java_util_Locale;
|
static JavaClass Class_java_util_Locale;
|
||||||
static shared_ptr<JavaClass> Class_java_io_InputStream;
|
static JavaClass Class_java_io_InputStream;
|
||||||
static shared_ptr<JavaClass> Class_ZLibrary;
|
static JavaClass Class_ZLibrary;
|
||||||
static shared_ptr<JavaClass> Class_ZLFile;
|
static JavaClass Class_ZLFile;
|
||||||
static shared_ptr<JavaClass> Class_ZLFileImage;
|
static JavaClass Class_ZLFileImage;
|
||||||
static shared_ptr<JavaClass> Class_ZLTextModel;
|
static JavaClass Class_ZLTextModel;
|
||||||
static shared_ptr<JavaClass> Class_NativeFormatPlugin;
|
static JavaClass Class_NativeFormatPlugin;
|
||||||
static shared_ptr<JavaClass> Class_PluginCollection;
|
static JavaClass Class_PluginCollection;
|
||||||
static shared_ptr<JavaClass> Class_Encoding;
|
static JavaClass Class_Encoding;
|
||||||
static shared_ptr<JavaClass> Class_EncodingConverter;
|
static JavaClass Class_EncodingConverter;
|
||||||
static shared_ptr<JavaClass> Class_JavaEncodingCollection;
|
static JavaClass Class_JavaEncodingCollection;
|
||||||
static shared_ptr<JavaClass> Class_Paths;
|
static JavaClass Class_Paths;
|
||||||
static shared_ptr<JavaClass> Class_Book;
|
static JavaClass Class_Book;
|
||||||
static shared_ptr<JavaClass> Class_Tag;
|
static JavaClass Class_Tag;
|
||||||
static shared_ptr<JavaClass> Class_NativeBookModel;
|
static JavaClass Class_NativeBookModel;
|
||||||
//static shared_ptr<JavaClass> Class_BookReadingException;
|
//static JavaClass Class_BookReadingException;
|
||||||
|
|
||||||
static shared_ptr<StringMethod> Method_java_lang_String_toLowerCase;
|
static shared_ptr<StringMethod> Method_java_lang_String_toLowerCase;
|
||||||
static shared_ptr<StringMethod> Method_java_lang_String_toUpperCase;
|
static shared_ptr<StringMethod> Method_java_lang_String_toUpperCase;
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include <ZLLogger.h>
|
#include <ZLLogger.h>
|
||||||
|
|
||||||
#include "JniEnvelope.h"
|
#include "JniEnvelope.h"
|
||||||
|
#include "AndroidUtil.h"
|
||||||
|
|
||||||
static const std::string JNI_LOGGER_CLASS = "JniLog";
|
static const std::string JNI_LOGGER_CLASS = "JniLog";
|
||||||
|
|
||||||
|
@ -41,13 +42,13 @@ std::string JavaArray::code() const {
|
||||||
return "[" + myBase.code();
|
return "[" + myBase.code();
|
||||||
}
|
}
|
||||||
|
|
||||||
JavaClass::JavaClass(JNIEnv *env, const std::string &name) : myName(name), myEnv(env) {
|
JavaClass::JavaClass(const std::string &name) : myName(name) {
|
||||||
myClass = 0;
|
myClass = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
JavaClass::~JavaClass() {
|
JavaClass::~JavaClass() {
|
||||||
if (myClass != 0) {
|
if (myClass != 0) {
|
||||||
myEnv->DeleteGlobalRef(myClass);
|
AndroidUtil::getEnv()->DeleteGlobalRef(myClass);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -57,9 +58,10 @@ std::string JavaClass::code() const {
|
||||||
|
|
||||||
jclass JavaClass::j() const {
|
jclass JavaClass::j() const {
|
||||||
if (myClass == 0) {
|
if (myClass == 0) {
|
||||||
jclass ref = myEnv->FindClass(myName.c_str());
|
JNIEnv *env = AndroidUtil::getEnv();
|
||||||
myClass = (jclass)myEnv->NewGlobalRef(ref);
|
jclass ref = env->FindClass(myName.c_str());
|
||||||
myEnv->DeleteLocalRef(ref);
|
myClass = (jclass)env->NewGlobalRef(ref);
|
||||||
|
env->DeleteLocalRef(ref);
|
||||||
}
|
}
|
||||||
return myClass;
|
return myClass;
|
||||||
}
|
}
|
||||||
|
@ -72,19 +74,19 @@ Member::~Member() {
|
||||||
}
|
}
|
||||||
|
|
||||||
Constructor::Constructor(const JavaClass &cls, const std::string ¶meters) : Member(cls) {
|
Constructor::Constructor(const JavaClass &cls, const std::string ¶meters) : Member(cls) {
|
||||||
myId = env().GetMethodID(jClass(), "<init>", parameters.c_str());
|
myId = AndroidUtil::getEnv()->GetMethodID(jClass(), "<init>", parameters.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
jobject Constructor::call(...) {
|
jobject Constructor::call(...) {
|
||||||
va_list lst;
|
va_list lst;
|
||||||
va_start(lst, this);
|
va_start(lst, this);
|
||||||
jobject obj = env().NewObjectV(jClass(), myId, lst);
|
jobject obj = AndroidUtil::getEnv()->NewObjectV(jClass(), myId, lst);
|
||||||
va_end(lst);
|
va_end(lst);
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
Field::Field(const JavaClass &cls, const std::string &name, const JavaType &type) : Member(cls), myName(name) {
|
Field::Field(const JavaClass &cls, const std::string &name, const JavaType &type) : Member(cls), myName(name) {
|
||||||
myId = env().GetFieldID(jClass(), name.c_str(), type.code().c_str());
|
myId = AndroidUtil::getEnv()->GetFieldID(jClass(), name.c_str(), type.code().c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
Field::~Field() {
|
Field::~Field() {
|
||||||
|
@ -92,7 +94,7 @@ Field::~Field() {
|
||||||
|
|
||||||
Method::Method(const JavaClass &cls, const std::string &name, const JavaType &returnType, const std::string ¶meters) : Member(cls), myName(name) {
|
Method::Method(const JavaClass &cls, const std::string &name, const JavaType &returnType, const std::string ¶meters) : Member(cls), myName(name) {
|
||||||
const std::string signature = parameters + returnType.code();
|
const std::string signature = parameters + returnType.code();
|
||||||
myId = env().GetMethodID(jClass(), name.c_str(), signature.c_str());
|
myId = AndroidUtil::getEnv()->GetMethodID(jClass(), name.c_str(), signature.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
Method::~Method() {
|
Method::~Method() {
|
||||||
|
@ -100,7 +102,7 @@ Method::~Method() {
|
||||||
|
|
||||||
StaticMethod::StaticMethod(const JavaClass &cls, const std::string &name, const JavaType &returnType, const std::string ¶meters) : Member(cls), myName(name) {
|
StaticMethod::StaticMethod(const JavaClass &cls, const std::string &name, const JavaType &returnType, const std::string ¶meters) : Member(cls), myName(name) {
|
||||||
const std::string signature = parameters + returnType.code();
|
const std::string signature = parameters + returnType.code();
|
||||||
myId = env().GetStaticMethodID(jClass(), name.c_str(), signature.c_str());
|
myId = AndroidUtil::getEnv()->GetStaticMethodID(jClass(), name.c_str(), signature.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
StaticMethod::~StaticMethod() {
|
StaticMethod::~StaticMethod() {
|
||||||
|
@ -111,7 +113,7 @@ ObjectField::ObjectField(const JavaClass &cls, const std::string &name, const Ja
|
||||||
|
|
||||||
jobject ObjectField::value(jobject obj) const {
|
jobject ObjectField::value(jobject obj) const {
|
||||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "getting value of ObjectField " + myName);
|
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "getting value of ObjectField " + myName);
|
||||||
jobject val = env().GetObjectField(obj, myId);
|
jobject val = AndroidUtil::getEnv()->GetObjectField(obj, myId);
|
||||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "got value of ObjectField " + myName);
|
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "got value of ObjectField " + myName);
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
@ -123,7 +125,7 @@ void VoidMethod::call(jobject base, ...) {
|
||||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "calling VoidMethod " + myName);
|
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "calling VoidMethod " + myName);
|
||||||
va_list lst;
|
va_list lst;
|
||||||
va_start(lst, base);
|
va_start(lst, base);
|
||||||
env().CallVoidMethodV(base, myId, lst);
|
AndroidUtil::getEnv()->CallVoidMethodV(base, myId, lst);
|
||||||
va_end(lst);
|
va_end(lst);
|
||||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "finished VoidMethod " + myName);
|
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "finished VoidMethod " + myName);
|
||||||
}
|
}
|
||||||
|
@ -135,7 +137,7 @@ jint IntMethod::call(jobject base, ...) {
|
||||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "calling IntMethod " + myName);
|
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "calling IntMethod " + myName);
|
||||||
va_list lst;
|
va_list lst;
|
||||||
va_start(lst, base);
|
va_start(lst, base);
|
||||||
jint result = env().CallIntMethodV(base, myId, lst);
|
jint result = AndroidUtil::getEnv()->CallIntMethodV(base, myId, lst);
|
||||||
va_end(lst);
|
va_end(lst);
|
||||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "finished IntMethod " + myName);
|
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "finished IntMethod " + myName);
|
||||||
return result;
|
return result;
|
||||||
|
@ -148,7 +150,7 @@ jlong LongMethod::call(jobject base, ...) {
|
||||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "calling LongMethod " + myName);
|
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "calling LongMethod " + myName);
|
||||||
va_list lst;
|
va_list lst;
|
||||||
va_start(lst, base);
|
va_start(lst, base);
|
||||||
jlong result = env().CallLongMethodV(base, myId, lst);
|
jlong result = AndroidUtil::getEnv()->CallLongMethodV(base, myId, lst);
|
||||||
va_end(lst);
|
va_end(lst);
|
||||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "finished LongMethod " + myName);
|
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "finished LongMethod " + myName);
|
||||||
return result;
|
return result;
|
||||||
|
@ -161,7 +163,7 @@ jboolean BooleanMethod::call(jobject base, ...) {
|
||||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "calling BooleanMethod " + myName);
|
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "calling BooleanMethod " + myName);
|
||||||
va_list lst;
|
va_list lst;
|
||||||
va_start(lst, base);
|
va_start(lst, base);
|
||||||
jboolean result = env().CallBooleanMethodV(base, myId, lst);
|
jboolean result = AndroidUtil::getEnv()->CallBooleanMethodV(base, myId, lst);
|
||||||
va_end(lst);
|
va_end(lst);
|
||||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "finished BooleanMethod " + myName);
|
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "finished BooleanMethod " + myName);
|
||||||
return result;
|
return result;
|
||||||
|
@ -176,7 +178,7 @@ jstring StringMethod::call(jobject base, ...) {
|
||||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "calling StringMethod " + myName);
|
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "calling StringMethod " + myName);
|
||||||
va_list lst;
|
va_list lst;
|
||||||
va_start(lst, base);
|
va_start(lst, base);
|
||||||
jstring result = (jstring)env().CallObjectMethodV(base, myId, lst);
|
jstring result = (jstring)AndroidUtil::getEnv()->CallObjectMethodV(base, myId, lst);
|
||||||
va_end(lst);
|
va_end(lst);
|
||||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "finished StringMethod " + myName);
|
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "finished StringMethod " + myName);
|
||||||
return result;
|
return result;
|
||||||
|
@ -189,7 +191,7 @@ jobject ObjectMethod::call(jobject base, ...) {
|
||||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "calling ObjectMethod " + myName);
|
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "calling ObjectMethod " + myName);
|
||||||
va_list lst;
|
va_list lst;
|
||||||
va_start(lst, base);
|
va_start(lst, base);
|
||||||
jobject result = env().CallObjectMethodV(base, myId, lst);
|
jobject result = AndroidUtil::getEnv()->CallObjectMethodV(base, myId, lst);
|
||||||
va_end(lst);
|
va_end(lst);
|
||||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "finished ObjectMethod " + myName);
|
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "finished ObjectMethod " + myName);
|
||||||
return result;
|
return result;
|
||||||
|
@ -202,7 +204,7 @@ jobjectArray ObjectArrayMethod::call(jobject base, ...) {
|
||||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "calling ObjectArrayMethod " + myName);
|
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "calling ObjectArrayMethod " + myName);
|
||||||
va_list lst;
|
va_list lst;
|
||||||
va_start(lst, base);
|
va_start(lst, base);
|
||||||
jobjectArray result = (jobjectArray)env().CallObjectMethodV(base, myId, lst);
|
jobjectArray result = (jobjectArray)AndroidUtil::getEnv()->CallObjectMethodV(base, myId, lst);
|
||||||
va_end(lst);
|
va_end(lst);
|
||||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "finished ObjectArrayMethod " + myName);
|
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "finished ObjectArrayMethod " + myName);
|
||||||
return result;
|
return result;
|
||||||
|
@ -215,7 +217,7 @@ jobject StaticObjectMethod::call(...) {
|
||||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "calling StaticObjectMethod " + myName);
|
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "calling StaticObjectMethod " + myName);
|
||||||
va_list lst;
|
va_list lst;
|
||||||
va_start(lst, this);
|
va_start(lst, this);
|
||||||
jobject result = env().CallStaticObjectMethodV(jClass(), myId, lst);
|
jobject result = AndroidUtil::getEnv()->CallStaticObjectMethodV(jClass(), myId, lst);
|
||||||
va_end(lst);
|
va_end(lst);
|
||||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "finished StaticObjectMethod " + myName);
|
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "finished StaticObjectMethod " + myName);
|
||||||
return result;
|
return result;
|
||||||
|
|
|
@ -70,14 +70,13 @@ private:
|
||||||
class JavaClass : public JavaType {
|
class JavaClass : public JavaType {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
JavaClass(JNIEnv *env, const std::string &name);
|
JavaClass(const std::string &name);
|
||||||
~JavaClass();
|
~JavaClass();
|
||||||
jclass j() const;
|
jclass j() const;
|
||||||
std::string code() const;
|
std::string code() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const std::string myName;
|
const std::string myName;
|
||||||
JNIEnv *myEnv;
|
|
||||||
mutable jclass myClass;
|
mutable jclass myClass;
|
||||||
|
|
||||||
friend class Member;
|
friend class Member;
|
||||||
|
@ -87,7 +86,6 @@ class Member {
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Member(const JavaClass &cls);
|
Member(const JavaClass &cls);
|
||||||
JNIEnv &env() const;
|
|
||||||
jclass jClass() const;
|
jclass jClass() const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -207,7 +205,6 @@ public:
|
||||||
jobject call(...);
|
jobject call(...);
|
||||||
};
|
};
|
||||||
|
|
||||||
inline JNIEnv &Member::env() const { return *myClass.myEnv; }
|
|
||||||
inline jclass Member::jClass() const { return myClass.j(); }
|
inline jclass Member::jClass() const { return myClass.j(); }
|
||||||
|
|
||||||
inline JavaPrimitiveType::JavaPrimitiveType(const std::string &code) : myCode(code) {}
|
inline JavaPrimitiveType::JavaPrimitiveType(const std::string &code) : myCode(code) {}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue