NDK编程心得
来源:互联网 发布:linux cp 忽略文件 编辑:程序博客网 时间:2024/05/17 16:46
初学NDK编程,编程中碰到了不少的问题,有点心得,现总结一下:
1. 注意java类在NDK里的表现形式,也就是smali格式。比如Ljava/lang/String; String是大写,后面的分号也不能少。类型一定要匹配,比如调用getClassLoader时,函数的类型是 ()Ljava/lang/ClassLoader; 而不能写成()Ljava/lang/Object; 如果写错,则错误很难马上查到。
2. NDK里对java函数的调用非常严格,静态方法必须使用静态调用接口,返回值为空的则必须使用相应的接口。具体可以参考jni.h.
jobject (*CallStaticObjectMethod)(JNIEnv*, jclass, jmethodID, ...);
jboolean (*CallStaticBooleanMethod)(JNIEnv*, jclass, jmethodID, ...);
void (*CallStaticVoidMethod)(JNIEnv*, jclass, jmethodID, ...); //注意第二个参数是类
不同的返回值用的接口不一样。
3. 注意区别类的静态方法和普通方法。静态方法是对类而言,而普通方法则是对对象而言。
jobject (*CallObjectMethod)(JNIEnv*, jobject, jmethodID, ...);
注意第二个参数是对象。
4. 在进行ndk编程时,其实是在和android虚拟机打交道。它和C++不同的时,错误有时不会马上出现,当logcat里出现某个错误时,有可能是上面的代码出了问题。因此在进行ndk编程时一定要细心和规范。 Ndk编程用到的变量非常多,最好给变量加个前缀,比如 jclass cla_xxx; jstring str_xxx; jmethodID mid_xxxx; 这样就不容易出错。
5. jobject (*NewObject)(JNIEnv*, jclass, jmethodID, ...); 在创建一个新的对象时,注意构造函数名称使用 “<init>”,而不是类名。对于默认的构造则参数为(),自定义构造则按照定义时的参数传递。
6. 虽说java虚拟机有垃圾自动回收机制,但是还是建议在不使用的时候进行适当的释放,以减轻虚拟机的内存压力,特别是一些大的对象。
void (*DeleteLocalRef)(JNIEnv*, jobject);
- NDK编程心得
- NDK使用心得
- NDK调试心得
- NDK调试心得2
- ndk编程
- Android NDK r5使用心得
- android ndk 环境搭建 心得
- ndk 交叉编译BusyBox心得。
- 编程心得
- 编程心得
- 编程心得
- 编程心得
- 编程心得
- 编程心得
- 编程心得
- 编程心得
- 编程心得
- 编程心得
- Apple Watch人机交互指南:UI设计基础--模态页面和布局
- 黑马程序员----编写程序,该程序启动后用户可以按“yyyy-MM-dd”的格式输入一个日期
- OpenCV配置
- servlet
- Commons Math学习笔记
- NDK编程心得
- 安卓achartengine 饼图
- RemoteViews用法二:可以接收点击事件并改变外观的widget
- java实用小知识
- 【转】果壳问答 https和SSL之间是什么关系?
- 为什么打不开jar文件?
- 从零开发一款为Apple Watch准备的心跳应用原型
- js地址 /js/swapWatch.js?v=2316163 的作用
- JavaScript 变量