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

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”);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值