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