您的位置:首页 > 移动开发 > Android开发

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

2016-02-27 14:25 537 查看

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”);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: