Java jni 开发
16lz
2022-06-05
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代表引用类型 )
更多相关文章
- Android(安卓)使用jdk1.8新特性之lambda表达式
- android 四大组件之Service
- Android系统的Binder机制之四——系统Service
- android实现图片平铺效果&WebView多点触控实现缩放
- Android调用WebAPI之传参、文件
- android service 学习
- Android中的Looper,Handler及HandlerThread简析
- 对android:screenOrientation及android:configChanges的思考
- 箭头函数的基础使用