#include <jni.h> #include <string> #include <pthread.h> #include <android/log.h> #define LOG_TAG "SystemOutPrintC++" #define LOGD(...)__android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,__VA_ARGS__) typedef struct ticker{ JavaVM *vm; jclass helpClz; jobject helpObj; }TickerContext; TickerContext g_ctx; extern "C" JNIEXPORT jstring JNICALL Java_com_gg_nk_MainActivity_stringFromJNI( JNIEnv *env, jobject /* this */) { std::string hello = "Hello from C++"; return env->NewStringUTF(hello.c_str()); } void qureyRuntime(JNIEnv *env,jobject instance){ jmethodID _version = env->GetStaticMethodID(g_ctx.helpClz,"buildVersion","()Ljava/lang/String;"); if (!_version){ return; } jstring build_version = (jstring)env->CallStaticObjectMethod(g_ctx.helpClz,_version); const char *version = env->GetStringUTFChars(build_version,NULL); LOGD("BuildVersion->%s",version); env->ReleaseStringUTFChars(build_version,version); env->DeleteLocalRef(build_version); jmethodID memory_size = env->GetMethodID(g_ctx.helpClz,"runTimeMemorySize","()J"); if (!memory_size){ return; } jlong result = env->CallLongMethod(instance,memory_size); LOGD("MEMORYSIZE->%d", result); (void)result; } JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm,void* reserved){ JNIEnv *env; memset(&g_ctx,0, sizeof(g_ctx)); g_ctx.vm = vm; if (vm->GetEnv((void**)&env,JNI_VERSION_1_6) != JNI_OK){ return JNI_ERR; } jclass clz = env->FindClass("com/gg/nk/JniHelper"); g_ctx.helpClz = (jclass)env->NewGlobalRef(clz); jmethodID construct = env->GetMethodID(g_ctx.helpClz,"<init>","()V"); jobject obj = env->NewObject(g_ctx.helpClz,construct); g_ctx.helpObj = env->NewGlobalRef(obj); qureyRuntime(env,g_ctx.helpObj); return JNI_VERSION_1_6; };
c++调用java方法--不做详细介绍
最新推荐文章于 2025-06-25 22:15:28 发布