Eclipse编译使用SO步骤

好久没有在Eclipse上通过NDK根据编译使用so,今天写了一个简单的demo就各种报错,下面做个笔记记录在Eclipse使用so的步骤:

1.创建工程,添加支持

创建工程,添加native支持:add native support,指定对应的so名称!

2.编写native关键字代码

编写调用native代码,同时加上:
    static {
        System.loadLibrary("soname");
    }

3.编译一下工程,命令生成头文件

编译工程,产生对应的class,在src目录下通过 javah com.example.Test.aaa生成头文件!
然后刷新工程,将src下面生成的头文件移到jni目录

4.编写Android.mk

在第一个步骤之后,就会生成Android.mk,现在需要编写编译规则,比如:

LOCAL_PATH := $(call my-dir)
// 指定依赖的动态so库
include $(CLEAR_VARS)
LOCAL_MODULE := aaa // 模块的名称
LOCAL_SRC_FILES := libaaaa.so // 依赖的so名称
include $(PREBUILT_SHARED_LIBRARY) // 作为共享库预编译

// 指定依赖的静态.a库
include $(CLEAR_VARS)
LOCAL_MODULE := bbb
LOCAL_SRC_FILES := bbb/libbbb.a //指定so的路径
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/bbb/include //指定该.a依赖的c文件
include $(BUILD_STATIC_LIBRARY) // 作为静态库进行编译

include $(CLEAR_VARS)
LOCAL_MODULE    := test
LOCAL_SRC_FILES := test.c
//指定依赖的.c文件 (这里依赖的.c文件可以写到对应模块需要的.c文件的地方,如什么的静态库一样)
LOCAL_C_INCLUDES += $(LOCAL_PATH)/aaa/include 
LOCAL_C_INCLUDES += $(LOCAL_PATH)/ccc/include
// 指定依赖的静态库
LOCAL_STATIC_LIBRARIES := bbb 
// 指定依赖的动态库
LOCAL_SHARED_LIBRARIES := aaa ccc
include $(BUILD_SHARED_LIBRARY)

5.实现头文件定义的函数

在test.c里面include该头文件,然后实现定义的方法!

6.万事大吉只欠运行

运行工程!

注意事项:

    1.在建工程的时候,包名千万不要写成如下形式:
        com.example.test_jni(包含下划线)
        如果有下划线,那么在生成的头文件就会如下:
            Java_com_example_test_jni_Test_method
        这样运行的时候,就会去com/example/test/jni/目录下面去找Test,但是工程没有这个目录,导致找不到对应的jni实现而崩溃,切记!

2.不要忘记:
    static {

                System.loadLibrary("live");
    }   
3.仔细检查Android.mk文件

一般出错在上面的几个地方!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值