eclipse下NDK开发

1、下载android-ndk-r13b-windows-x86_64.zip,这个版本不需要配置cygwin,低版本的需要,为了避免麻烦下载最新的就好。
2、点击项目properties属性选择Builders项,New一个Program,命名随意。

如此设置之后,该项目的NDK环境便配置成功了。下面就是开始编写java jni 接口啦

3、编写个java class 文件 里面定义native方法

4、用javac编译这个java文件,再用javah生成头文件


生成的com_lpf_utils_JniClient.h文件内容如下:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_lpf_utils_JniClient */


#ifndef _Included_com_lpf_utils_JniClient
#define _Included_com_lpf_utils_JniClient
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_lpf_utils_JniClient
 * Method:    nv
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_lpf_utils_JniClient_nv
  (JNIEnv *, jobject);


/*
 * Class:     com_lpf_utils_JniClient
 * Method:    snv
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_lpf_utils_JniClient_snv
  (JNIEnv *, jclass);


/*
 * Class:     com_lpf_utils_JniClient
 * Method:    nr
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_com_lpf_utils_JniClient_nr
  (JNIEnv *, jobject);


/*
 * Class:     com_lpf_utils_JniClient
 * Method:    snr
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_com_lpf_utils_JniClient_snr
  (JNIEnv *, jclass);


/*
 * Class:     com_lpf_utils_JniClient
 * Method:    nvp
 * Signature: (I)V
 */
JNIEXPORT void JNICALL Java_com_lpf_utils_JniClient_nvp
  (JNIEnv *, jobject, jint);


/*
 * Class:     com_lpf_utils_JniClient
 * Method:    snvp
 * Signature: (I)V
 */
JNIEXPORT void JNICALL Java_com_lpf_utils_JniClient_snvp
  (JNIEnv *, jclass, jint);


/*
 * Class:     com_lpf_utils_JniClient
 * Method:    nrp
 * Signature: (I)I
 */
JNIEXPORT jint JNICALL Java_com_lpf_utils_JniClient_nrp
  (JNIEnv *, jobject, jint);


/*
 * Class:     com_lpf_utils_JniClient
 * Method:    snrp
 * Signature: (I)I
 */
JNIEXPORT jint JNICALL Java_com_lpf_utils_JniClient_snrp
  (JNIEnv *, jclass, jint);


#ifdef __cplusplus
}
#endif
#endif

Java_com_lpf_utils_JniClient_snrp 的格式为 Java_包名_类名_函数名

5、在项目根目录下创建jni目录,名字一定要取 jni


然后添加Android.mk  Application.mk文件


如果需要使用使用SWIG生成JAVA类和C/C++封装代码,请参考 http://blog.csdn.net/koozxcv/article/details/50779806

6、将 com_lpf_utils_JniClient.h放进jni目录,并实现com_lpf_utils_JniClient.c(你也可以用c++的语法去实现,c与c++实现的区别在于两者对JNIenv* 指针的操作不同),下面是我的示例
//#include "com_lpf_utils_JniClient.h"
//#include <stdlib.h>
//#include <stdio.h>
#include <jni.h>
#include <string.h>
#ifdef __cplusplus
extern "C"
{
#endif
/*
 * Class:     com_ndk_test_JniClient
 * Method:    AddStr
 * Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
 */
JNIEXPORT jstring JNICALL Java_com_lpf_utils_JniClient_AddStr
  (JNIEnv* env, jclass arg, jstring instringA, jstring instringB)
{
    jstring str = (*env)->NewStringUTF(env,"Hello JNI");


    return str;
}


/*
* Class:     com_ndk_test_JniClient
* Method:    AddInt
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_com_lpf_utils_JniClient_AddInt
  (JNIEnv* env, jclass arg, jint a, jint b)
{
    return a + b;
}
/*
 * Class:     com_lpf_utils_JniClient
 * Method:    nv
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_lpf_utils_JniClient_nv
  (JNIEnv *env, jobject jo){


}


/*
 * Class:     com_lpf_utils_JniClient
 * Method:    snv
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_com_lpf_utils_JniClient_snv
  (JNIEnv *env, jclass jc){


}


/*
 * Class:     com_lpf_utils_JniClient
 * Method:    nr
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_com_lpf_utils_JniClient_nr
  (JNIEnv *env, jobject jo){
return 0;
}


/*
 * Class:     com_lpf_utils_JniClient
 * Method:    snr
 * Signature: ()I
 */
JNIEXPORT jint JNICALL Java_com_lpf_utils_JniClient_snr
  (JNIEnv *env, jclass jc){
return 0;
}


/*
 * Class:     com_lpf_utils_JniClient
 * Method:    nvp
 * Signature: (I)V
 */
JNIEXPORT void JNICALL Java_com_lpf_utils_JniClient_nvp
  (JNIEnv *env, jobject jo, jint a){


}


/*
 * Class:     com_lpf_utils_JniClient
 * Method:    snvp
 * Signature: (I)V
 */
JNIEXPORT void JNICALL Java_com_lpf_utils_JniClient_snvp
  (JNIEnv *env, jclass jc, jint a){


}


/*
 * Class:     com_lpf_utils_JniClient
 * Method:    nrp
 * Signature: (I)I
 */
JNIEXPORT jint JNICALL Java_com_lpf_utils_JniClient_nrp
  (JNIEnv *env, jobject jo, jint a){
return 0;
}


/*
 * Class:     com_lpf_utils_JniClient
 * Method:    snrp
 * Signature: (I)I
 */
JNIEXPORT jint JNICALL Java_com_lpf_utils_JniClient_snrp
  (JNIEnv *env, jclass jc, jint a){
return 9527;
}


#ifdef __cplusplus
}
#endif
7、保存好,clean一次,就可以看到ndk编译成功了.


8.加载并调用


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值