c++调用java方法--不做详细介绍

本文深入探讨了如何使用JNI(Java Native Interface)在Android应用中调用C++代码,展示了C++与Java之间的交互过程。通过具体示例,讲解了如何创建本地方法、调用Java方法和获取Java环境,同时介绍了如何在C++中打印Android的日志。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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;
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值