JNI开发的常见错误&&Android.mk文件说明&& jni开发的简便流程

来源:互联网 发布:甘肃教师网络研修社区 编辑:程序博客网 时间:2024/06/11 20:43

1.jni开发的常见错误

[1]Your APP_BUILD_SCRIPT points to an unknown file: ./jni/Android.mk
说明你的jni目录下需要一个Android.mk文件

[2]11-21 02:26:39.995: E/AndroidRuntime(434): Caused by: java.lang.UnsatisfiedLinkError: helloFromC
11-21 02:26:39.995: E/AndroidRuntime(434): at com.itheima.jnierror.MainActivity.helloFromC(Native Method)
11-21 02:26:39.995: E/AndroidRuntime(434): at com.itheima.jnierror.MainActivity.click(MainActivity.java:18)
11-21 02:26:39.995: E/AndroidRuntime(434): … 14 more
说明没有加载 库文件

[3]11-21 02:29:12.358: E/AndroidRuntime(1527): Caused by: java.lang.UnsatisfiedLinkError: Couldn’t load hello: findLibrary returned null
说明你生成库so文件 和你模拟器 的架构不一致

解决方案:            在jni目录下创建一个Application.mk文件               在文件中写下对应的APP_ABI                APP_ABI := armeabi-v7a                APP_ABI := x86        APP_ABI := mips        APP_ABI := armeabi armeabi-v7a x86 mips        APP_ABI := all

[4]jni/Hello.c:10:3: error: parameter name omitted
说明你声明的参数遗漏了

[5]jni/Hello.c:9:1: error: unknown type name ‘JNIEXPORT’
说明 你忘记引入 jni.h头文件了

[6]jni/Hello.c:2:20: fatal error: stulib.h: No such file or directory
说明 有可能 引入的头文件 字母写错了

[7]11-21 09:14:36.148: E/dalvikvm(1565): VM aborting
说明你调用的方法写错了

2.Android.mk文件说明

#$()调用函数  获取当前文件的目录LOCAL_PATH := $(call my-dir)#$清空变量  相当于初始化include $(CLEAR_VARS)# hello 是生成库文件的名字  会在你写的hello前面自动补上一个lib LOCAL_MODULE    := hello# 要编译C的源文件  LOCAL_SRC_FILES := Hello.c#引入 动态库文件  include $(BUILD_SHARED_LIBRARY)#动态库 和 静态库的区别   #动态库一般以.so .dll 命名   动态库的体积小  里面只是包含代码的引用   #静态库一般以.a 结尾  静态库体积大 

3. jni开发的简便流程(必须掌握)

[1]在本地声明一个本地方法
[2]在eclipse下window 下 配置ndk环境

[3]使用javah生成jni样式的头文件 根据你个人习惯先后我所谓

[4]要添加本地支持 从Androidtools—>add native support

[5]默认生成一个cpp格式文件 把cpp改成c Android.mk配置文件 改一下LOCAL_SRC_FILES := simple.c
[6]实现C代码
[7]给C一锤子 只需要使用一锤子 一锤定音
[8]最后一步 一定要记得 加载库文件 static 静态方法去添加
System.loadLibrary(“simple”);

0 0
原创粉丝点击