NDK探究之旅《九》——jni开发中常见的错误及其注意事项

来源:互联网 发布:openwrt 域名白名单 编辑:程序博客网 时间:2024/05/22 03:10

一、NDK开发中难免会遇到一些错误,下面我就总结一些NDk开发过程中常见的错误。

  1. 写错了load的library

    java.lang.UnsatisfiedLinkError: Couldn't load hell0: findLibrary returned null

    检查loadLibrary中是否按照正确的规范来写的

    System.loadLibrary("hello");    
    1. Android.mk文件编写错误

      /jni/Android.mk:4: * missing separator. Stop.
      检查mk文件是否写对

  2. LOCAL_MODULE配置不能有扩展名

    //jni/Android.mk:hello.so: LOCAL_MODULE_FILENAME must not contain a file extension  
  3. c或者c++的源文件名称配置错误

    objs/hello/helo.o'.  Stop.      
  4. 如果使用了错误的cpu平台

    java.lang.UnsatisfiedLinkError: Couldn't load hello: findLibrary returned null添加多cpu平台的支持 APP_ABI := armeabi armeabi-v7a x86
  5. c语言方法名称错误,导致java代码无法寻找到c代码

    Caused by: java.lang.UnsatisfiedLinkError: Native method not found: com.itheima.hellojni.MainActivity.helloFromC:()Ljava/lang/String;
  6. 应用程序闪退

    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)的上面,否则会报错:库文件没有引入等。

    如果你这样写:

    Markdown

    就会报一下的错误:

    Markdown

    正确的格式为:

    Markdown

    打印结果如下:

    Markdown

三、如何在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”错误,可以进行如下图所示的修复操作

Markdown

  • 第二步

    • 启动模拟器

    • 右键工程 NativeActivity->android tools->Add Native Support

    • 编译(Ctrl + B)

      • 右键工程 NativeActivity ->Debug As->Android Native Application

Markdown

Markdown

  • 第三步

    注:由于android ndk在eclipse上调试还不支持在初始化函数,所以我在触屏事件engine_handle_input中增加了断点;

    • 使用快捷键 Ctrl+Shitf+B在 170行增加一个断点;

    • 点击一下模拟器的屏幕;

    • 当断点运行到的时候的效果如下图所示:

Markdown

博客地址:

http://blog.csdn.net/androidstarjack/article/details/72758094

NDK探究之旅:

NDK探究之旅《一》——对jni和NDK的认识

NDK探究之旅《二》——C语言的基本认识

NDK探究之旅《三》—C语言的输入输出函数

NDK探究之旅《四》——指针的强化理解

NDK探究之旅《五》——指针和数组之间的关系

NDK探究之旅《六》—函数的指针、结构体、枚举、宏定义

NDK探究之旅《七》—函数指针,宏定义的优缺点及应用场景

NDK探究之旅《八》——jni的开发流程规范及环境配置

### 相信自己,没有做不到的,只有想不到的
如果你觉得此文对您有所帮助,欢迎入群 QQ交流群 :232203809
微信公众号:终端研发部

Markdown

(欢迎关注学习和交流)

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 两眼视力差距400怎么办 脑血清颗粒吃多怎么办 脸过敏吃了海鲜怎么办 如果qq密码忘了怎么办 qq密码被盗了该怎么办 qq号被别人盗了怎么办 qq不想让别人用怎么办 买了金科的房子怎么办 蟹爪莲叶子耷拉怎么办 金钻的叶子发黄怎么办 金钻叶子发焦黄怎么办 红钻叶子黄了怎么办啊 绿钻叶子黄斑点怎么办 金钻的叶子卷怎么办 金钻叶子有黑斑怎么办 怀孕60天没有胎心胎芽怎么办 单位不给交社保怎么办 公司没给足产假怎么办 小公司不给产假怎么办 机关不给陪产假怎么办 刚人流后又怀孕怎么办 怀孕50天不想要怎么办 生了孩子不想要怎么办 刚怀孕不想要孩子怎么办 怀孕一周不想要孩子怎么办 怀孕了不想要孩子怎么办 怀上二胎后悔了怎么办 50岁怀了二胎怎么办 老公那方面太强怎么办 被私人医院骗了怎么办 我特别烦我妈怎么办 刚怀孕了有炎症怎么办 怀孕了但有炎症怎么办 20岁脸上肉松弛怎么办 20岁脸部肉松弛怎么办 脸上肉松弛怎么办16岁 才20岁脸部松弛怎么办 20岁就脸部松弛怎么办 孕妇吃了点薄荷怎么办? 孕妇喝了薄荷水怎么办 怀孕吃了些薄荷怎么办