第九篇:jni开发中常见的错误及其注意事项
来源:互联网 发布:java编程视频教程 编辑:程序博客网 时间:2024/05/18 01:50
一、NDK开发中难免会遇到一些错误,下面我就总结一些NDk开发过程中常见的错误。
写错了load的library
java.lang.UnsatisfiedLinkError: Couldn't load hell0: findLibrary returned null
检查loadLibrary中是否按照正确的规范来写的
- 1
Android.mk文件编写错误
/jni/Android.mk:4: * missing separator. Stop.
检查mk文件是否写对
LOCAL_MODULE配置不能有扩展名
//jni/Android.mk:hello.so: LOCAL_MODULE_FILENAME must not contain a file extension
c或者c++的源文件名称配置错误
objs/hello/helo.o'. Stop.
如果使用了错误的cpu平台
java.lang.UnsatisfiedLinkError: Couldn't load hello: findLibrary returned null添加多cpu平台的支持 APP_ABI := armeabi armeabi-v7a x86
c语言方法名称错误,导致java代码无法寻找到c代码
Caused by: java.lang.UnsatisfiedLinkError: Native method not found: com.itheima.hellojni.MainActivity.helloFromC:()Ljava/lang/String;
应用程序闪退
06-25 07:31:46.698: I/dalvikvm(1871): #00 pc 0008ee6d /system/lib/libdvm.so06-25 07:31:46.698: I/dalvikvm(1871): #01 pc 000738ca /system/lib/libdvm.so06-25 07:31:46.698: I/dalvikvm(1871): #02 pc 000739f4 /system/lib/libdvm.so06-25 07:31:46.698: I/dalvikvm(1871): #03 pc 00038f5b /system/lib/libdvm.so06-25 07:31:46.698: I/dalvikvm(1871): #04 pc 0003bdbd /system/lib/libdvm.so
要么就是c代码有逻辑错误
要么编码问题,中文或者空格路径
二、NDK控制台log日志的输出
要想在工作台输出日志,需要以下两点:
- 在相对应的.c代码中引入相对应的头文件
#include <android/log.h> #define LOG_TAG "System.out.c" #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__) #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__)
在相对应的Android.mk中要加入相关的代码
LOCAL_LDLIBS+= -llog
意思就是引入log库, 库存放在platforms\android-*\arch-arm\usr\lib下。(-l表示引入,log为库名)
*注意*
这行代码要放在include $(BUILD_SHARED_LIBRARY)的上面,否则会报错:库文件没有引入等。如果你这样写:
就会报一下的错误:
正确的格式为:
打印结果如下:
三、如何在Eclipse中进行调试
https://jingyan.baidu.com/album/64d05a02515964de54f73b63.html?picindex=4
第一步:
导入android ndk自带的例子程序 NativeActivity
修改 AndroidManifest.xml 中的 Debuggable 为 true
如果出现了“Avoid hardcoding the debug mode; leaving it out allows debug and release builds to automatically assign one”错误,可以进行如下图所示的修复操作
第二步
启动模拟器
右键工程 NativeActivity->android tools->Add Native Support
编译(Ctrl + B)
- 右键工程 NativeActivity ->Debug As->Android Native Application
第三步
注:由于android ndk在eclipse上调试还不支持在初始化函数,所以我在触屏事件engine_handle_input中增加了断点;
使用快捷键 Ctrl+Shitf+B在 170行增加一个断点;
点击一下模拟器的屏幕;
当断点运行到的时候的效果如下图所示:
- 第九篇:jni开发中常见的错误及其注意事项
- NDK探究之旅《九》——jni开发中常见的错误及其注意事项
- android jni开发中常见的错误
- Android中JNI开发之常见错误
- jni开发常见的几种错误
- jni开发中的常见错误
- JNI开发中常见的问题
- JNI开发之JNI常见错误
- JNI开发的常见错误&&Android.mk文件说明&& jni开发的简便流程
- 常见的错误及其解决方案
- JSP中常见的错误及其处理方式
- C++中常见的内存错误及其对策
- 编程中由于疏忽造成的常见错误及其解决方法
- Go开发中常见的错误解析
- 【总结】常见的开发中错误
- PHP开发中常见的一些错误
- React native开发中常见的错误
- React native开发中常见的错误
- Ant 在eclipse中的使用!功能解释
- 扩展欧几里得
- 简单的字符串模板
- 菱形代码
- PyQt5开发环境配置并使用
- 第九篇:jni开发中常见的错误及其注意事项
- vue-router的使用
- final、内部类、抽象类、接口
- java中经常用到的自动装箱和自动拆箱
- 1.5Java函数(方法)
- 第十篇:ndk项目实战之Androidstudio开发经验总结
- C语言:字符串子串判断
- java基础(五)之JAVA编码规范
- poj2387 Til the Cows Come Home(dijkstra)