mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-03 09:49:19 +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) {
|
||||
const std::vector<shared_ptr<FormatPlugin> > plugins = PluginCollection::Instance().plugins();
|
||||
const size_t size = plugins.size();
|
||||
jclass cls = AndroidUtil::Class_NativeFormatPlugin->j();
|
||||
jclass cls = AndroidUtil::Class_NativeFormatPlugin.j();
|
||||
// TODO: memory leak?
|
||||
jobjectArray javaPlugins = env->NewObjectArray(size, cls, 0);
|
||||
|
||||
|
|
|
@ -25,28 +25,30 @@
|
|||
|
||||
JavaVM *AndroidUtil::ourJavaVM = 0;
|
||||
|
||||
shared_ptr<JavaClass> AndroidUtil::Class_java_lang_Object;
|
||||
shared_ptr<JavaArray> AndroidUtil::Array_java_lang_Object;
|
||||
shared_ptr<JavaClass> AndroidUtil::Class_java_lang_RuntimeException;
|
||||
shared_ptr<JavaClass> AndroidUtil::Class_java_lang_String;
|
||||
shared_ptr<JavaClass> AndroidUtil::Class_java_util_Collection;
|
||||
shared_ptr<JavaClass> AndroidUtil::Class_java_util_List;
|
||||
shared_ptr<JavaClass> AndroidUtil::Class_java_util_Locale;
|
||||
shared_ptr<JavaClass> AndroidUtil::Class_java_io_InputStream;
|
||||
shared_ptr<JavaClass> AndroidUtil::Class_ZLibrary;
|
||||
shared_ptr<JavaClass> AndroidUtil::Class_NativeFormatPlugin;
|
||||
shared_ptr<JavaClass> AndroidUtil::Class_PluginCollection;
|
||||
shared_ptr<JavaClass> AndroidUtil::Class_Encoding;
|
||||
shared_ptr<JavaClass> AndroidUtil::Class_EncodingConverter;
|
||||
shared_ptr<JavaClass> AndroidUtil::Class_JavaEncodingCollection;
|
||||
shared_ptr<JavaClass> AndroidUtil::Class_Paths;
|
||||
shared_ptr<JavaClass> AndroidUtil::Class_ZLFile;
|
||||
shared_ptr<JavaClass> AndroidUtil::Class_ZLFileImage;
|
||||
shared_ptr<JavaClass> AndroidUtil::Class_ZLTextModel;
|
||||
shared_ptr<JavaClass> AndroidUtil::Class_Book;
|
||||
shared_ptr<JavaClass> AndroidUtil::Class_Tag;
|
||||
shared_ptr<JavaClass> AndroidUtil::Class_NativeBookModel;
|
||||
//shared_ptr<JavaClass> AndroidUtil::Class_BookReadingException;
|
||||
JavaClass AndroidUtil::Class_java_lang_Object("java/lang/Object");
|
||||
JavaArray AndroidUtil::Array_java_lang_Object(Class_java_lang_Object);
|
||||
JavaClass AndroidUtil::Class_java_lang_RuntimeException("java/lang/RuntimeException");
|
||||
JavaClass AndroidUtil::Class_java_lang_String("java/lang/String");
|
||||
JavaClass AndroidUtil::Class_java_util_Collection("java/util/Collection");
|
||||
JavaClass AndroidUtil::Class_java_util_List("java/util/List");
|
||||
JavaClass AndroidUtil::Class_java_util_Locale("java/util/Locale");
|
||||
JavaClass AndroidUtil::Class_java_io_InputStream("java/io/InputStream");
|
||||
|
||||
JavaClass AndroidUtil::Class_ZLibrary("org/geometerplus/zlibrary/core/library/ZLibrary");
|
||||
JavaClass AndroidUtil::Class_ZLFile("org/geometerplus/zlibrary/core/filesystem/ZLFile");
|
||||
JavaClass AndroidUtil::Class_ZLFileImage("org/geometerplus/zlibrary/core/image/ZLFileImage");
|
||||
JavaClass AndroidUtil::Class_ZLTextModel("org/geometerplus/zlibrary/text/model/ZLTextModel");
|
||||
|
||||
JavaClass AndroidUtil::Class_Encoding("org/geometerplus/zlibrary/core/encodings/Encoding");
|
||||
JavaClass AndroidUtil::Class_EncodingConverter("org/geometerplus/zlibrary/core/encodings/EncodingConverter");
|
||||
JavaClass AndroidUtil::Class_JavaEncodingCollection("org/geometerplus/zlibrary/core/encodings/JavaEncodingCollection");
|
||||
|
||||
JavaClass AndroidUtil::Class_NativeFormatPlugin("org/geometerplus/fbreader/formats/NativeFormatPlugin");
|
||||
JavaClass AndroidUtil::Class_PluginCollection("org/geometerplus/fbreader/formats/PluginCollection");
|
||||
JavaClass AndroidUtil::Class_Paths("org/geometerplus/fbreader/Paths");
|
||||
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_toUpperCase;
|
||||
|
@ -124,100 +126,73 @@ JNIEnv *AndroidUtil::getEnv() {
|
|||
bool AndroidUtil::init(JavaVM* 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");
|
||||
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");
|
||||
Method_java_util_Collection_toArray = new ObjectArrayMethod(Class_java_util_Collection, "toArray", Array_java_lang_Object, "()");
|
||||
|
||||
Class_ZLibrary = new JavaClass(env, "org/geometerplus/zlibrary/core/library/ZLibrary");
|
||||
Class_ZLFile = new JavaClass(env, "org/geometerplus/zlibrary/core/filesystem/ZLFile");
|
||||
Class_ZLFileImage = new JavaClass(env, "org/geometerplus/zlibrary/core/image/ZLFileImage");
|
||||
Class_ZLTextModel = new JavaClass(env, "org/geometerplus/zlibrary/text/model/ZLTextModel");
|
||||
StaticMethod_java_util_Locale_getDefault = new StaticObjectMethod(Class_java_util_Locale, "getDefault", Class_java_util_Locale, "()");
|
||||
Method_java_util_Locale_getLanguage = new StringMethod(Class_java_util_Locale, "getLanguage", "()");
|
||||
|
||||
Class_Encoding = new JavaClass(env, "org/geometerplus/zlibrary/core/encodings/Encoding");
|
||||
Class_EncodingConverter = new JavaClass(env, "org/geometerplus/zlibrary/core/encodings/EncodingConverter");
|
||||
Class_JavaEncodingCollection = new JavaClass(env, "org/geometerplus/zlibrary/core/encodings/JavaEncodingCollection");
|
||||
Method_java_io_InputStream_close = new VoidMethod(Class_java_io_InputStream, "close", "()");
|
||||
Method_java_io_InputStream_read = new IntMethod(Class_java_io_InputStream, "read", "([BII)");
|
||||
Method_java_io_InputStream_skip = new LongMethod(Class_java_io_InputStream, "skip", "(J)");
|
||||
|
||||
Class_NativeFormatPlugin = new JavaClass(env, "org/geometerplus/fbreader/formats/NativeFormatPlugin");
|
||||
Class_PluginCollection = new JavaClass(env, "org/geometerplus/fbreader/formats/PluginCollection");
|
||||
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");
|
||||
StaticMethod_ZLibrary_Instance = new StaticObjectMethod(Class_ZLibrary, "Instance", Class_ZLibrary, "()");
|
||||
Method_ZLibrary_getVersionName = new StringMethod(Class_ZLibrary, "getVersionName", "()");
|
||||
|
||||
Method_java_lang_String_toLowerCase = new StringMethod(*Class_java_lang_String, "toLowerCase", "()");
|
||||
Method_java_lang_String_toUpperCase = new StringMethod(*Class_java_lang_String, "toUpperCase", "()");
|
||||
Constructor_NativeFormatPlugin = new Constructor(Class_NativeFormatPlugin, "(Ljava/lang/String;)V");
|
||||
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_java_util_Locale_getLanguage = new StringMethod(*Class_java_util_Locale, "getLanguage", "()");
|
||||
Method_Encoding_createConverter = new ObjectMethod(Class_Encoding, "createConverter", Class_EncodingConverter, "()");
|
||||
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", "()");
|
||||
Method_java_io_InputStream_read = new IntMethod(*Class_java_io_InputStream, "read", "([BII)");
|
||||
Method_java_io_InputStream_skip = new LongMethod(*Class_java_io_InputStream, "skip", "(J)");
|
||||
StaticMethod_JavaEncodingCollection_Instance = new StaticObjectMethod(Class_JavaEncodingCollection, "Instance", Class_JavaEncodingCollection, "()");
|
||||
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_ZLibrary_Instance = new StaticObjectMethod(*Class_ZLibrary, "Instance", *Class_ZLibrary, "()");
|
||||
Method_ZLibrary_getVersionName = new StringMethod(*Class_ZLibrary, "getVersionName", "()");
|
||||
StaticMethod_ZLFile_createFileByPath = new StaticObjectMethod(Class_ZLFile, "createFileByPath", Class_ZLFile, "(Ljava/lang/String;)");
|
||||
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");
|
||||
Method_NativeFormatPlugin_supportedFileType = new StringMethod(*Class_NativeFormatPlugin, "supportedFileType", "()");
|
||||
Constructor_ZLFileImage = new Constructor(Class_ZLFileImage, "(Ljava/lang/String;Lorg/geometerplus/zlibrary/core/filesystem/ZLFile;Ljava/lang/String;II)V");
|
||||
|
||||
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_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", "()");
|
||||
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_JavaEncodingCollection_Instance = new StaticObjectMethod(*Class_JavaEncodingCollection, "Instance", *Class_JavaEncodingCollection, "()");
|
||||
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_Tag_getTag = new StaticObjectMethod(Class_Tag, "getTag", Class_Tag, "(Lorg/geometerplus/fbreader/library/Tag;Ljava/lang/String;)");
|
||||
|
||||
StaticMethod_ZLFile_createFileByPath = new StaticObjectMethod(*Class_ZLFile, "createFileByPath", *Class_ZLFile, "(Ljava/lang/String;)");
|
||||
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_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;)");
|
||||
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");
|
||||
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;
|
||||
|
@ -299,7 +274,7 @@ jbyteArray AndroidUtil::createJavaByteArray(JNIEnv *env, const std::vector<jbyte
|
|||
}
|
||||
|
||||
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;
|
||||
|
||||
public:
|
||||
static shared_ptr<JavaClass> Class_java_lang_Object;
|
||||
static shared_ptr<JavaArray> Array_java_lang_Object;
|
||||
static shared_ptr<JavaClass> Class_java_lang_RuntimeException;
|
||||
static shared_ptr<JavaClass> Class_java_lang_String;
|
||||
static shared_ptr<JavaClass> Class_java_util_Collection;
|
||||
static shared_ptr<JavaClass> Class_java_util_List;
|
||||
static shared_ptr<JavaClass> Class_java_util_Locale;
|
||||
static shared_ptr<JavaClass> Class_java_io_InputStream;
|
||||
static shared_ptr<JavaClass> Class_ZLibrary;
|
||||
static shared_ptr<JavaClass> Class_ZLFile;
|
||||
static shared_ptr<JavaClass> Class_ZLFileImage;
|
||||
static shared_ptr<JavaClass> Class_ZLTextModel;
|
||||
static shared_ptr<JavaClass> Class_NativeFormatPlugin;
|
||||
static shared_ptr<JavaClass> Class_PluginCollection;
|
||||
static shared_ptr<JavaClass> Class_Encoding;
|
||||
static shared_ptr<JavaClass> Class_EncodingConverter;
|
||||
static shared_ptr<JavaClass> Class_JavaEncodingCollection;
|
||||
static shared_ptr<JavaClass> Class_Paths;
|
||||
static shared_ptr<JavaClass> Class_Book;
|
||||
static shared_ptr<JavaClass> Class_Tag;
|
||||
static shared_ptr<JavaClass> Class_NativeBookModel;
|
||||
//static shared_ptr<JavaClass> Class_BookReadingException;
|
||||
static JavaClass Class_java_lang_Object;
|
||||
static JavaArray Array_java_lang_Object;
|
||||
static JavaClass Class_java_lang_RuntimeException;
|
||||
static JavaClass Class_java_lang_String;
|
||||
static JavaClass Class_java_util_Collection;
|
||||
static JavaClass Class_java_util_List;
|
||||
static JavaClass Class_java_util_Locale;
|
||||
static JavaClass Class_java_io_InputStream;
|
||||
static JavaClass Class_ZLibrary;
|
||||
static JavaClass Class_ZLFile;
|
||||
static JavaClass Class_ZLFileImage;
|
||||
static JavaClass Class_ZLTextModel;
|
||||
static JavaClass Class_NativeFormatPlugin;
|
||||
static JavaClass Class_PluginCollection;
|
||||
static JavaClass Class_Encoding;
|
||||
static JavaClass Class_EncodingConverter;
|
||||
static JavaClass Class_JavaEncodingCollection;
|
||||
static JavaClass Class_Paths;
|
||||
static JavaClass Class_Book;
|
||||
static JavaClass Class_Tag;
|
||||
static JavaClass Class_NativeBookModel;
|
||||
//static JavaClass Class_BookReadingException;
|
||||
|
||||
static shared_ptr<StringMethod> Method_java_lang_String_toLowerCase;
|
||||
static shared_ptr<StringMethod> Method_java_lang_String_toUpperCase;
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include <ZLLogger.h>
|
||||
|
||||
#include "JniEnvelope.h"
|
||||
#include "AndroidUtil.h"
|
||||
|
||||
static const std::string JNI_LOGGER_CLASS = "JniLog";
|
||||
|
||||
|
@ -41,13 +42,13 @@ std::string JavaArray::code() const {
|
|||
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;
|
||||
}
|
||||
|
||||
JavaClass::~JavaClass() {
|
||||
if (myClass != 0) {
|
||||
myEnv->DeleteGlobalRef(myClass);
|
||||
AndroidUtil::getEnv()->DeleteGlobalRef(myClass);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -57,9 +58,10 @@ std::string JavaClass::code() const {
|
|||
|
||||
jclass JavaClass::j() const {
|
||||
if (myClass == 0) {
|
||||
jclass ref = myEnv->FindClass(myName.c_str());
|
||||
myClass = (jclass)myEnv->NewGlobalRef(ref);
|
||||
myEnv->DeleteLocalRef(ref);
|
||||
JNIEnv *env = AndroidUtil::getEnv();
|
||||
jclass ref = env->FindClass(myName.c_str());
|
||||
myClass = (jclass)env->NewGlobalRef(ref);
|
||||
env->DeleteLocalRef(ref);
|
||||
}
|
||||
return myClass;
|
||||
}
|
||||
|
@ -72,19 +74,19 @@ Member::~Member() {
|
|||
}
|
||||
|
||||
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(...) {
|
||||
va_list lst;
|
||||
va_start(lst, this);
|
||||
jobject obj = env().NewObjectV(jClass(), myId, lst);
|
||||
jobject obj = AndroidUtil::getEnv()->NewObjectV(jClass(), myId, lst);
|
||||
va_end(lst);
|
||||
return obj;
|
||||
}
|
||||
|
||||
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() {
|
||||
|
@ -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) {
|
||||
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() {
|
||||
|
@ -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) {
|
||||
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() {
|
||||
|
@ -111,7 +113,7 @@ ObjectField::ObjectField(const JavaClass &cls, const std::string &name, const Ja
|
|||
|
||||
jobject ObjectField::value(jobject obj) const {
|
||||
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);
|
||||
return val;
|
||||
}
|
||||
|
@ -123,7 +125,7 @@ void VoidMethod::call(jobject base, ...) {
|
|||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "calling VoidMethod " + myName);
|
||||
va_list lst;
|
||||
va_start(lst, base);
|
||||
env().CallVoidMethodV(base, myId, lst);
|
||||
AndroidUtil::getEnv()->CallVoidMethodV(base, myId, lst);
|
||||
va_end(lst);
|
||||
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);
|
||||
va_list lst;
|
||||
va_start(lst, base);
|
||||
jint result = env().CallIntMethodV(base, myId, lst);
|
||||
jint result = AndroidUtil::getEnv()->CallIntMethodV(base, myId, lst);
|
||||
va_end(lst);
|
||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "finished IntMethod " + myName);
|
||||
return result;
|
||||
|
@ -148,7 +150,7 @@ jlong LongMethod::call(jobject base, ...) {
|
|||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "calling LongMethod " + myName);
|
||||
va_list lst;
|
||||
va_start(lst, base);
|
||||
jlong result = env().CallLongMethodV(base, myId, lst);
|
||||
jlong result = AndroidUtil::getEnv()->CallLongMethodV(base, myId, lst);
|
||||
va_end(lst);
|
||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "finished LongMethod " + myName);
|
||||
return result;
|
||||
|
@ -161,7 +163,7 @@ jboolean BooleanMethod::call(jobject base, ...) {
|
|||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "calling BooleanMethod " + myName);
|
||||
va_list lst;
|
||||
va_start(lst, base);
|
||||
jboolean result = env().CallBooleanMethodV(base, myId, lst);
|
||||
jboolean result = AndroidUtil::getEnv()->CallBooleanMethodV(base, myId, lst);
|
||||
va_end(lst);
|
||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "finished BooleanMethod " + myName);
|
||||
return result;
|
||||
|
@ -176,7 +178,7 @@ jstring StringMethod::call(jobject base, ...) {
|
|||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "calling StringMethod " + myName);
|
||||
va_list lst;
|
||||
va_start(lst, base);
|
||||
jstring result = (jstring)env().CallObjectMethodV(base, myId, lst);
|
||||
jstring result = (jstring)AndroidUtil::getEnv()->CallObjectMethodV(base, myId, lst);
|
||||
va_end(lst);
|
||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "finished StringMethod " + myName);
|
||||
return result;
|
||||
|
@ -189,7 +191,7 @@ jobject ObjectMethod::call(jobject base, ...) {
|
|||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "calling ObjectMethod " + myName);
|
||||
va_list lst;
|
||||
va_start(lst, base);
|
||||
jobject result = env().CallObjectMethodV(base, myId, lst);
|
||||
jobject result = AndroidUtil::getEnv()->CallObjectMethodV(base, myId, lst);
|
||||
va_end(lst);
|
||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "finished ObjectMethod " + myName);
|
||||
return result;
|
||||
|
@ -202,7 +204,7 @@ jobjectArray ObjectArrayMethod::call(jobject base, ...) {
|
|||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "calling ObjectArrayMethod " + myName);
|
||||
va_list lst;
|
||||
va_start(lst, base);
|
||||
jobjectArray result = (jobjectArray)env().CallObjectMethodV(base, myId, lst);
|
||||
jobjectArray result = (jobjectArray)AndroidUtil::getEnv()->CallObjectMethodV(base, myId, lst);
|
||||
va_end(lst);
|
||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "finished ObjectArrayMethod " + myName);
|
||||
return result;
|
||||
|
@ -215,7 +217,7 @@ jobject StaticObjectMethod::call(...) {
|
|||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "calling StaticObjectMethod " + myName);
|
||||
va_list lst;
|
||||
va_start(lst, this);
|
||||
jobject result = env().CallStaticObjectMethodV(jClass(), myId, lst);
|
||||
jobject result = AndroidUtil::getEnv()->CallStaticObjectMethodV(jClass(), myId, lst);
|
||||
va_end(lst);
|
||||
ZLLogger::Instance().println(JNI_LOGGER_CLASS, "finished StaticObjectMethod " + myName);
|
||||
return result;
|
||||
|
|
|
@ -70,14 +70,13 @@ private:
|
|||
class JavaClass : public JavaType {
|
||||
|
||||
public:
|
||||
JavaClass(JNIEnv *env, const std::string &name);
|
||||
JavaClass(const std::string &name);
|
||||
~JavaClass();
|
||||
jclass j() const;
|
||||
std::string code() const;
|
||||
|
||||
private:
|
||||
const std::string myName;
|
||||
JNIEnv *myEnv;
|
||||
mutable jclass myClass;
|
||||
|
||||
friend class Member;
|
||||
|
@ -87,7 +86,6 @@ class Member {
|
|||
|
||||
protected:
|
||||
Member(const JavaClass &cls);
|
||||
JNIEnv &env() const;
|
||||
jclass jClass() const;
|
||||
|
||||
public:
|
||||
|
@ -207,7 +205,6 @@ public:
|
|||
jobject call(...);
|
||||
};
|
||||
|
||||
inline JNIEnv &Member::env() const { return *myClass.myEnv; }
|
||||
inline jclass Member::jClass() const { return myClass.j(); }
|
||||
|
||||
inline JavaPrimitiveType::JavaPrimitiveType(const std::string &code) : myCode(code) {}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue