Skip to content

Instantly share code, notes, and snippets.

@0rbianta
Last active December 2, 2023 16:33
Show Gist options
  • Save 0rbianta/c5b4745c04158470925081e2a1ad7eb2 to your computer and use it in GitHub Desktop.
Save 0rbianta/c5b4745c04158470925081e2a1ad7eb2 to your computer and use it in GitHub Desktop.
JNI Jobject examples
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