JNI java与C互调

其实在android源码里面已经包含了一个SimpleJNI的 Java调用C的方法完成加法运算的例子,本文就是在那个sprdroid4.1_vlx_3.0/development/samples/SimpleJNI

的基础上完成C对Java方法的调用。

step 1 编写java代码

 

package com.example.android.simplejni;

public class Test {
    public static String getTime() {  
        return String.valueOf(System.currentTimeMillis());  
    }  
}

step 2 完成c对getTime方法的

static jint add(JNIEnv *env, jobject thiz, jint a, jint b) {
    int result = a + b;
    ALOGI("%d + %d = %d", a, b, result);

   //C 调用com/example/android/simplejni/Test.java 的getTime方法
    jclass  TestCCallJava = env->FindClass("com/example/android/simplejni/Test");  
   
    jmethodID getTime = env->GetStaticMethodID(TestCCallJava, "getTime","()Ljava/lang/String;");  
   
    jstring jstr = NULL;  
    char* cstr = NULL;  
    jstr = (jstring)env->CallStaticObjectMethod(TestCCallJava, getTime);  
  
    cstr = (char*) (env->GetStringUTFChars(jstr, 0));
    //adb logcat |grep native的方法来查看log
    ALOGI("yzy....%s",cstr);  
  
    env->ReleaseStringUTFChars(jstr, cstr);  
    env->DeleteLocalRef(jstr);  
    

    return result;
}

还有很多细节需要分析。马上开年会了,希望能抽到奖品。未完待续。

你可能感兴趣的:(JNI java与C互调)