Java jni 开发

1. Android之从零开始JNI研发Android NDK开发:JNI基础篇 (入门配置)

2. 呕心沥血Android studio使用JNI实例(入门配置)

3. Android NDK开发:JNI基础篇  (重点)

4. Android JNI基础篇(一 )  (重点)

5. 学习android JNI的那些事儿 (重点)

6. Android JNI初步☞Java方法和native方法关联 (静态注册和动态注册)

7. Android JNI实现简单的c层调用Java层函数(C层调用Java层Toast进行提示)


简记


1. JNIEnv 是一个指针,指向一组 JNI 函数,通过这些函数可以实现 Java 层和 JNI 层的交互,就是说通过 JNIEnv 调用 JNI 函数可以访问 Java 虚拟机,操作 Java 对象;


2. c层调用Java层函数

JNIEXPORT void JNICALL Java_com_scu_jnidemo_MyTest_callShow  
  (JNIEnv *env, jobject thiz, jstring str){  
    jclass myclass = env->FindClass("com/scu/jnidemo/MyTest");  
    jmethodID mid = env->GetMethodID(myclass,"show","(Ljava/lang/String;)V");  
    env->CallVoidMethod(thiz,mid,str);  
  } 


3. 

jstring  
Java_com_android_jni_Prompt_getLine(JNIEnv* env,jobject jobj,jstring prompt)  
{  
    char buf[128];  
    const jbyte *str;  
    str = (*env)->GetStringUTFChars(env,prompt,NULL);  
    if(str == NULL)  
        return NULL;  
    __android_log_print(ANDROID_LOG_INFO,"-JNI-","%s",str);  
    (*env)->ReleaseStringUTFChars(env,prompt,str);  
    sprintf(buf,"From C + %s",str);  
    return (*env)->NewStringUTF(env,buf);  
} 
GetStringUFTChars函数进入JNIEnv 结构指针,把java中的UTF-8字符类型转变成C中的Unicode。最后在释放str的时候不要忘记检查str是否为空,因为GetStringUFTChars函数可能会调用失败(outofmenory)。

当原生代码把传进来的UTF-8类型字符串之后应该立即释放内存调用ReleaseStringUTFChars。(因为这些都是临时变量,用完要立即释放)


4. 基本类型描述符 

基本类型描述符对应的都是Java类型名的大写首字母(boolean 和 long 类型除外,分别是 Z 和 J。因为B已代表byte,L代表引用类型 )

Java jni 开发_第1张图片



你可能感兴趣的:(Android)