zhouhuajin 2021-02-19 23:27 采纳率: 0%
浏览 120
已结题

android RPC通过JNI 反向调用java方法 大佬们帮忙看看哪里有问题

#include <jni.h>
#include <android/log.h>

 
#define  TAG "xc"
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG,TAG, __VA_ARGS__)

 
JavaVM *javaVm;//全局JVM
JNIEnv *jniEnv;//全局ENV
jclass globalClass1;//全局Jclass1
jclass globalClass2;//全局Jclass2
jclass jclass1;//全局Jclass1
jclass jclass2;//全局Jclass2
jmethodID jmid1;//全局方法1
jmethodID jmid2;//全局方法1

 

 
//方法1 提供给RPC线程HTTP GET调用 出错
void TestFun1(char* Message) {
    LOGD("TestFun1");
    if (javaVm != NULL){
       LOGD("TestFun1 获取JVM成功"); 
    }

 
    if (globalClass1 != NULL){
        LOGD("TestFun1 class获取成功"); 
    }

 
    if (jmid1 != NULL){
        LOGD("TestFun1 jmid1获取成功"); 
    }

 
    int status = (*javaVm)->AttachCurrentThread(javaVm,&jniEnv,NULL);
    LOGD("TestFun1获取JNIENV");
    if (status = JNI_OK) {
        LOGD("TestFun1获取env成功");
        jstring str = (*jniEnv)->NewStringUTF(jniEnv,"Testfun1呼叫");
        (*jniEnv)->CallStaticVoidMethod(jniEnv,globalClass1,jmid1,str);
    }
}

 

 

 
//初始化成功
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) {
    LOGD("JNI_OnLoad 加载");
    javaVm = vm;
    LOGD("JNI_OnLoadvm 获取完成");
    int status = (*vm)->GetEnv(vm, (void **) &jniEnv, JNI_VERSION_1_6);
    if (status == JNI_OK)
    {
       LOGD("JNI_OnLoad 获取env成功");
       jclass1 = (*jniEnv)->FindClass(jniEnv,"com/zidong/sotest/MainActivity");
       globalClass1=(jclass)(*jniEnv)->NewGlobalRef(jniEnv,jclass1);
       jmid1 = (*jniEnv)->GetStaticMethodID(jniEnv,jclass1, "showmessage1", "(Ljava/lang/String;)V");
       if (globalClass1 != NULL){
          LOGD("JNI_OnLoad class获取成功"); 
       }

 
       if (jmid1 != NULL){
          LOGD("JNI_OnLoad jmid1获取成功"); 
       }
       //失败
       TestFun1("初始化测试调用");
    }
    return JNI_VERSION_1_6;
}

 
void JNI_OnUnload(JavaVM* vm, void* reserved) {
     LOGD("JNI卸载");
}

 
  • 写回答

1条回答 默认 最新

  • 歇歇 2021-02-20 12:10
    关注
    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料