android通过NDK调用第三方动态库

1、  配置NDK开发环境,具体过程参考:

http://blog.csdn.net/pengchua/article/details/7582949

2、  用eclipse创建一个android项目,例如NDKTest1,包名为:com.example.ndktest1

3、  创建JNI调用接口,在NDKTest1项目下创建文件TestJni.java,文件内容如下:

package com.example.ndktest1;

 

public class TestJni {

public native int add(int a,int b);

}

4、  编译这个文件并生成相应的.h文件,在dos界面中执行以下命令:

cd /d D:\dp\eclipse\NDKTest1\src

javac -d ../bin com/example/ndktest1/TestJni.java

cd ../bin

javah com.example.ndktest1.TestJni

5、  在项目目录下新建目录jni,将生成的文件com_example_ndktest1_TestJni.h拷贝进去

6、  在jni目录下新建文件jniTest.c,在文件中实现接口add,文件内容如下:

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <dlfcn.h>

#include "com_example_ndktest1_TestJni.h"

JNIEXPORT jint JNICALL Java_com_example_ndktest1_TestJni_add

 (JNIEnv *env, jobject this, jint a, jint b){

void *pHandle;

int (*pFunt)(int,int);

jintresult=0;

 

pHandle=dlopen("/data/data/com.example.ndktest1/lib/libadd.so",RTLD_LAZY|RTLD_GLOBAL);

 

pFunt=(int (*)(int,int))dlsym(pHandle,"add");

result=(jint)pFunt(a,b);

 

dlclose(pHandle);

return result;

}

 

注意红色标注的地方,那是应用程序打包后被安装到手机上时在手机上.so文件存放的路径。

7、  在jni目录下添加文件Android.mk,文件内容如下:

LOCAL_PATH := $(call my-dir)

 

include $(CLEAR_VARS)

 

LOCAL_MODULE   := test-jni

LOCAL_SRC_FILES := jniTest.c

 

include $(BUILD_SHARED_LIBRARY)

 

这个文件可以从ndk目录下的sample目录中找一个例子将其中的android.mk文件拷过来进行修改

8、  打开cygdrive,执行以下命令:

cd/cygdrive/d/dp/eclipse/NDKTest1

$NDK/ndk-build

9、  将第三方动态库libadd.so拷贝到项目下的目录libs/armeabi,这个目录在上个步骤会产生

10、             在TestJni.java文件中或者其他java文件中添加如下代码:

static {

System.loadLibrary("test-jni");

}

11、             现在就可以在java类中使用add函数了,例如:

TextView ddd=(TextView) findViewById(R.id.ddd);

TestJni tj=new TestJni();

int rlt=tj.add(12, 23);

ddd.setText("hello:"+rlt);

 

12、      这里用libadd.so来模拟第三方动态库,这个动态库的源文件内容如下:

#include <stdio.h>

int add(int a,int b){

return a+b;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值