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代表引用类型 )




更多相关文章

  1. Android(安卓)使用jdk1.8新特性之lambda表达式
  2. android 四大组件之Service
  3. Android系统的Binder机制之四——系统Service
  4. android实现图片平铺效果&WebView多点触控实现缩放
  5. Android调用WebAPI之传参、文件
  6. android service 学习
  7. Android中的Looper,Handler及HandlerThread简析
  8. 对android:screenOrientation及android:configChanges的思考
  9. 箭头函数的基础使用

随机推荐

  1. 易错:函数方式实现二分查找整形数组
  2. IV和Matching老矣, “弹性联合似然法”成
  3. 计量经济圈社群学术信息情报1
  4. c语言博客第二节
  5. 日调1000亿,腾讯微服务平台的架构演进
  6. 彻底替代flash推流:腾讯云这套直播SDK有哪
  7. strcpy
  8. 如何利用VisionSeed+树莓派,实现智能小车
  9. 每日一课&(OSI七层模型数据封装全过程与物
  10. 如何实现一个搜索自动补全器?