Last active
December 21, 2024 13:36
-
-
Save 0rbianta/c5b4745c04158470925081e2a1ad7eb2 to your computer and use it in GitHub Desktop.
JNI Jobject examples
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
using namespace std; | |
//----------------------Convert a Java data------------------------\\ | |
jstring create_jstring(JNIEnv *env, const char *data) { | |
return env->NewStringUTF(data); | |
} | |
jint create_jint(JNIEnv *env, int data){ | |
return data; | |
} | |
jfloat create_jfloat(JNIEnv *env, float data){ | |
return data; | |
} | |
jdouble create_jdouble(JNIEnv *env, double data){ | |
return data; | |
} | |
jboolean create_jboolean(JNIEnv *env, bool data){ | |
return data; | |
} | |
jchar create_jchar(JNIEnv *env, char data){ | |
return data; | |
} | |
jshort create_jshort(JNIEnv *env, short data){ | |
return data; | |
} | |
string create_string(JNIEnv *env, jstring data){ | |
return env->GetStringUTFChars(data,0); | |
} | |
int create_int(JNIEnv *env, jint data){ | |
return data; | |
} | |
float create_float(JNIEnv *env, jfloat data){ | |
return data; | |
} | |
double create_double(JNIEnv *env, jdouble data){ | |
return data; | |
} | |
bool create_boolean(JNIEnv *env, jboolean data){ | |
return data; | |
} | |
char create_char(JNIEnv *env, jchar data){ | |
return data; | |
} | |
short create_short(JNIEnv *env, jshort data){ | |
return data; | |
} | |
//------------------------------------------------------------------\\ | |
//-----------------------------Call a Java method-----------------------------\\ | |
//Log.v | |
void call_Log_v(JNIEnv *env,jstring title,jstring content){ | |
jclass log_class = env->FindClass("android/util/Log"); | |
jmethodID print = env->GetStaticMethodID(log_class,"v","(Ljava/lang/String;Ljava/lang/String;)I"); | |
env->CallStaticIntMethod(log_class,print,title,content); | |
} | |
//System.exit | |
void call_exit(JNIEnv *env,int exit_code){ | |
jclass system_class = env->FindClass("java/lang/System"); | |
jmethodID exit = env->GetStaticMethodID(system_class,"exit", "(I)V"); | |
env->CallStaticVoidMethod(system_class,exit,exit_code); | |
} | |
//getApplicationContext | |
jobject call_getApplicationContext(JNIEnv *env, jobject thiz){ | |
jclass application_context_class = env->FindClass("android/content/Context"); | |
jmethodID getApplicationContext = env->GetMethodID(application_context_class,"getApplicationContext","()Landroid/content/Context;"); | |
return env->CallObjectMethod(thiz,getApplicationContext); | |
} | |
//Toast | |
void call_toast_show(JNIEnv *env, jobject context,jstring content){ | |
jclass toast_class = env->FindClass("android/widget/Toast"); | |
jmethodID makeText = env->GetStaticMethodID(toast_class,"makeText","(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;"); | |
jobject toast_init = env->CallStaticObjectMethod(toast_class,makeText,context,content,1); | |
jmethodID show = env->GetMethodID(toast_class,"show", "()V"); | |
env->CallVoidMethod(toast_init,show); | |
} | |
//findViewById | |
jobject call_findViewById(JNIEnv *env,jobject thiz,int view_id){ | |
jclass findviewbyid_class = env->FindClass("androidx/appcompat/app/AppCompatActivity"); | |
jmethodID findViewById = env->GetMethodID(findviewbyid_class,"findViewById", "(I)Landroid/view/View;"); | |
return env->CallObjectMethod(thiz,findViewById,view_id); | |
} | |
//setText | |
void call_setText(JNIEnv *env, jobject view, jstring text){ | |
jclass setText_class = env->FindClass("android/widget/TextView"); | |
jmethodID integer_setText_method = env->GetMethodID(setText_class,"setText","(Ljava/lang/CharSequence;)V"); | |
env->CallVoidMethod(view, integer_setText_method, text); | |
} | |
//getApplicationInfo | |
jobject call_getApplicationInfo(JNIEnv *env, jobject thiz){ | |
jclass class_ = env->FindClass("android/content/Context"); | |
jmethodID method = env->GetMethodID(class_,"getApplicationInfo","()Landroid/content/pm/ApplicationInfo;"); | |
return env->CallObjectMethod(thiz, method); | |
} | |
//getString | |
jstring call_getString(JNIEnv *env,jobject thiz ,int string_id){ | |
jclass class_ = env->FindClass("android/content/Context"); | |
jmethodID method = env->GetMethodID(class_,"getString","(I)Ljava/lang/String;"); | |
return (jstring)env->CallObjectMethod(thiz, method,string_id); | |
} | |
//String.valueOf(float) | |
jstring call_String_valueOf_long(JNIEnv *env, long data){ | |
jclass class_ = env->FindClass("java/lang/String"); | |
jmethodID method = env->GetStaticMethodID(class_,"valueOf", "(J)Ljava/lang/String;"); | |
return (jstring)env->CallStaticObjectMethod(class_,method,(jlong)data); | |
} | |
//String.valueOf(boolean) | |
jstring call_String_valueOf_boolean(JNIEnv *env, bool data){ | |
jclass class_ = env->FindClass("java/lang/String"); | |
jmethodID method = env->GetStaticMethodID(class_,"valueOf", "(Z)Ljava/lang/String;"); | |
return (jstring)env->CallStaticObjectMethod(class_,method,(jboolean)data); | |
} | |
//String.valueOf(char) | |
jstring call_String_valueOf_char(JNIEnv *env, char data){ | |
jclass class_ = env->FindClass("java/lang/String"); | |
jmethodID method = env->GetStaticMethodID(class_,"valueOf", "(C)Ljava/lang/String;"); | |
return (jstring)env->CallStaticObjectMethod(class_,method,(jchar)data); | |
} | |
//String.valueOf(double) | |
jstring call_String_valueOf_double(JNIEnv *env, double data){ | |
jclass class_ = env->FindClass("java/lang/String"); | |
jmethodID method = env->GetStaticMethodID(class_,"valueOf", "(D)Ljava/lang/String;"); | |
return (jstring)env->CallStaticObjectMethod(class_,method,(jdouble)data); | |
} | |
//String.valueOf(jobject) | |
jstring call_String_valueOf_jobject(JNIEnv *env, jobject data){ | |
jclass class_ = env->FindClass("java/lang/String"); | |
jmethodID method = env->GetStaticMethodID(class_,"valueOf", "(Ljava/lang/Object;)Ljava/lang/String;"); | |
return (jstring)env->CallStaticObjectMethod(class_,method,data); | |
} | |
//------------------------------------------------------------------\\ | |
//------------------Get a Java Field------------------\\ | |
string get_jstring_field(JNIEnv *env, jobject get_from_class, const char *field_name){ | |
jclass class_ = env->GetObjectClass(get_from_class); | |
jfieldID string_ = env->GetFieldID(class_,field_name, "Ljava/lang/String;"); | |
jstring data = (jstring)env->GetObjectField(get_from_class,string_); | |
return env->GetStringUTFChars(data,0); | |
} | |
int get_jint_field(JNIEnv *env, jobject get_from_class, const char *field_name){ | |
jclass class_ = env->GetObjectClass(get_from_class); | |
jfieldID int_ = env->GetFieldID(class_,field_name, "I"); | |
return env->GetIntField(get_from_class,int_); | |
} | |
float get_jfloat_field(JNIEnv *env, jobject get_from_class, const char *field_name){ | |
jclass class_ = env->GetObjectClass(get_from_class); | |
jfieldID float_ = env->GetFieldID(class_,field_name, "F"); | |
return env->GetFloatField(get_from_class,float_); | |
} | |
double get_jdouble_field(JNIEnv *env, jobject get_from_class, const char *field_name){ | |
jclass class_ = env->GetObjectClass(get_from_class); | |
jfieldID double_ = env->GetFieldID(class_,field_name, "D"); | |
return env->GetDoubleField(get_from_class,double_); | |
} | |
bool get_jboolean_field(JNIEnv *env, jobject get_from_class, const char *field_name){ | |
jclass class_ = env->GetObjectClass(get_from_class); | |
jfieldID boolean_ = env->GetFieldID(class_,field_name, "Z"); | |
return env->GetBooleanField(get_from_class,boolean_); | |
} | |
char get_jchar_field(JNIEnv *env, jobject get_from_class, const char *field_name){ | |
jclass class_ = env->GetObjectClass(get_from_class); | |
jfieldID char_ = env->GetFieldID(class_,field_name, "C"); | |
return env->GetCharField(get_from_class,char_); | |
} | |
short get_jshort_field(JNIEnv *env, jobject get_from_class, const char *field_name){ | |
jclass class_ = env->GetObjectClass(get_from_class); | |
jfieldID short_ = env->GetFieldID(class_,field_name, "S"); | |
return env->GetShortField(get_from_class,short_); | |
} | |
//------------------------------------------------------------------\\ | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
how to pass jobject from one vm to anther, any solutions:
https://stackoverflow.com/questions/79280483/jni-issue-passing-java-runnable-object-to-jni-in-custom-gluon-attach-plugin