[Android]NDK开发环境配置与JNI开发

1.环境配置


本文的开发环境为win10 64位+Eclipse+Android ADT+NDK+CDT。

2.安装:


这里只介绍NDK和CDT的安装。

2.1从链接:http://dl.google.com/android/repository/android-ndk-r11c-windows-x86_64.zip下载NDK开发包,然后解压到本地路径,并拷贝本路径(比如我的是:D:\android-sdk\android-ndk-r11c-windows-x86_64\android-ndk-r11c)。

2.2配置系统的环境变量,操作路径为:高级系统设置–>环境变量–>找到PATH–>新建即可,如下图所示:

这里写图片描述

2.3为Eclipse添加NDK路径,操作路径为:Windows–>Preference–>NDK,如下图所示:

这里写图片描述

2.4为Eclipse安装CDT插件添加c/c++环境支持,安装连接:cdt - http://download.eclipse.org/tools/cdt/releases/8.8.1。操作路径为:help–>Install New Software,如下图所示:

这里写图片描述

3.完成了第二步,接下来进行代码编写


3.1新建一个安卓项目,并在项目的根目录下新建jni文件夹,如下图所示:

这里写图片描述

3.2在string.pub.jni.test包下新建TestJni.java类,添加如下代码:


package string.pub.jni.test;



public class TestJni {

        public native boolean init();

        public native int add(int x , int y);

        public native void destory();

        }



3.3将上一步创建的类文件拷贝到bin目录下,然后从命令行界面cd到…\AJniDemo\bin目录下运行javac TestJni.java,完成后可以看到在bin目录下生成的TestJni.class文件了。之后在…\bin目录下按照包名的顺序新建文件夹,路径为…\bin\string\pub\jni\test,将TestJni.class拷贝到…\bin\string\pub\jni\test目录下,在命令行界面执行javah -jni string.pub.jni.test.TestJni可以看到在…\bin目录下生成了string_pub_jni_test_TestJni.h这个头文件。将生成的头文件拷贝到项目的jni目录下,如下图所示:

这里写图片描述

3.4上一步生成了所需要的头文件,这一步开始实现c++层的代码了。按照上一步新建图中的文件,然后右键项目–>Android Tools–>Add Native Support。所需要的代码如下:


//Android.mk

LOCAL_PATH := $(call my-dir)



include $(CLEAR_VARS)



LOCAL_MODULE    := TestJNI

LOCAL_SRC_FILES := string_pub_jni_test_TestJni.cpp

LOCAL_SRC_FILES += CAdd.cpp



include $(BUILD_SHARED_LIBRARY)




//Application.mk

APP_PROJECT_PATH := ${call my-dir}

APP_BUILD_SCRIPT=$(APP_PROJECT_PATH)/Android.mk

APP_MODULES := TestJNI



APP_ABI := armeabi armeabi-v7a x86


//CAdd.cpp

#include "CAdd.h"

CAdd::CAdd(){

}

CAdd::~CAdd(){

}

int CAdd::add(int x, int y){

return x+y;

}




//CAdd.h

#ifndef JNI_TEST_ADD

#define JNI_TEST_ADD

class CAdd{

public:

CAdd();

~CAdd();

int add(int x, int y);

};

#endif




//string_pub_jni_test_TestJni.cpp

#include <stdlib.h>

#include <stdio.h>

#include "CAdd.h"

#include "jni.h"



CAdd *pCAdd = NULL;

extern "C" {

JNIEXPORT jboolean JNICALL Java_string_pub_jni_test_TestJni_init

  (JNIEnv *env, jobject obj){

if(pCAdd==NULL){

pCAdd = new CAdd ;

}

return pCAdd!=NULL;

}



JNIEXPORT jint JNICALL Java_string_pub_jni_test_TestJni_add

  (JNIEnv *env, jobject obj, jint x, jint y){

jint res = -1;

if(pCAdd==NULL){

    pCAdd = new CAdd ;

res = pCAdd->add(x,y);

}else{

    res = pCAdd->add(x,y);

}

return res;

}



JNIEXPORT void JNICALL Java_string_pub_jni_test_TestJni_destory

  (JNIEnv * env, jobject obj){

if(pCAdd!=NULL){

delete pCAdd;

pCAdd=NULL;

}

}

}



3.5命令行界面下,在项目根目录下执行:ndk-build,成功之后刷新项目,就可以看到在Libs下面生成了.so文件。如下图所示:

这里写图片描述

4.调用JNI方法:


4.1将3中生成的.so文件拷贝到别的项目的libs文件夹下,然后新建下图所示的包和类:

这里写图片描述

4.2在TestJni.java中添加如下代码:


package string.pub.jni.test;



public class TestJni {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值