您的位置:首页 > 编程语言 > Java开发

在eclipse上使用ndk r10

2015-09-11 17:15 387 查看
在eclipse上使用ndk r10

下载NDK:

64位NDK:

http://dl.google.com/android/ndk/android-ndk64-r10-windows-x86_64.zip

开始配置NDK:

1. 将下载好的NDK压缩包放在一个目录里,我放在了E:\ndkr10中,注意:路径不能包括空格;

2. 打开eclipse,新建一个工程TestNdk,打开Window=>preferences=>Android=>NDK,设置NDK路径;

3. 在Android工程下新建一个文件夹叫做jni,来保存ndk的代码;

4. 打开project=>properties=>builders=>New;

Name中添加Ndk_Builder;

Main选项卡里location中填写ndk-build.cmd路径,Working Directory中选Browse Workspace,选择当前的工程,即TestNdk;

Refresh选项卡中勾选Refresh resources upon completion、The entire workspace、Recursively include sub-folders;

Build Options选项卡中勾选Allocate Console(necessary for input)、After a”Clean”、During manual builds、During auto builds、Specify working set of relevant resources;

5. 在TestNdk工程下新建JniClient.class:

package com.example.testndk;
public class JniClient {
static public native String AddStr(String strA, String strB);
static public native int AddInt(int a, int b);
}


保存编译后,在TestNdk\bin\classes\com\example\testndk目录下就有JniClient.class文件了,之后用cmd命令定位到此目录,输入javah com.exaple.testndk.JniClient,在Test\bin\classes目录下生成c++头文件com_example_testndk_JniClient.h;

在文件夹jni下新建一个file,为Android.mk文件:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := TestNdk
LOCAL_SRC_FILES := com_example_testndk_JniClient.c
include $(BUILD_SHARED_LIBRARY)


第一行、第二行和第五行为固定,第三行为编译后.so文件名,第四行为.c文件名

8. 将.h文件拷贝到jni目录下,新建一个相同名字的.c文件,即com_example_testndk_JniClient.c,设置内容为:

#include "com_example_testndk_JniClient.h"
#include <stdlib.h>
#include <stdio.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_example_testndk_JniClient_AddStr
(JNIEnv *env, jclass arg, jstring instringA, jstring instringB)
{
jstring str = (*env)->NewStringUTF(env, "HelloWorld from JNI !");
return str;
}

/*
* Class:     com_ndk_test_JniClient
* Method:    AddInt
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_com_ndk_test_JniClient_AddInt
(JNIEnv *env, jclass arg, jint a, jint b)
{
return a + b;
}

#ifdef __cplusplus
}
#endif


在TestNdkActivity.java中完成对JniClient.java中函数的调用:

package com.example.testndk;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Toast;
public class MainActivity extends Activity {
static
{
System.loadLibrary("TestNdk");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toast.makeText(MainActivity.this,JniClient.AddStr("abc", "123"), Toast.LENGTH_LONG).show();
}
}


即运行成功,注意:若无法运行,可能是设备芯片不同,此时需要在jni目录下新建file,命名为Application.mk内容为APP_ABI :=all即可。

参考文档:

http://www.cnblogs.com/chenjiajin/archive/2012/04/12/2444188.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  eclipse ndk