1、Eclipse没有NDK选项解决
NDK需要ADT插件支持;ADT可以下载到本地或是联网下载;
具体可以参照http://blog.csdn.net/shi_weihappy/article/details/42238625点击打开链接
2、出现NDK之后;配置NDK路径
打开Window-->Preferences-->NDK-->NDK Location 选择下载好的
D:\android-ndk32-r10b-windows-x86\android-ndk-r10b
如下图所示:
3、编写JNI
package com.example.myfirstjni;
public class MyJni {
static {
System.loadLibrary("MyFirstJni");
}
public native static String getString();
}
4、把MyJni转化为二进制文件
命令行切换到工程目录下,cd-->myfirstjni下面;执行javac MyJni.java;在myfirstjni路径下面会生成MyJni.class文件;
之后cd 到src目录下,执行javah com.example.myfirstjni.MyJni;相关图如下所示
5、右键工程项目;在Android Tools-->Add Native Support添加本地支持,在根目录中会生成jni文件夹,下面有.mk文件
和.cpp类,此时我们把上一步生成的头文件放到jni中备用,也可以自己生成Application.mk来编译相关的支持CPU的.so文件;
默认的是armeabi平台的CPU;相关的路径和展示如下图所示
.mk文件里面可以不动
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := MyFirstJni
LOCAL_SRC_FILES := MyFirstJni.cpp
include $(BUILD_SHARED_LIBRARY)
Application.mk
APP_ABI := all //这里可以修改比如APP_ABI := armeabi-v7a
MyFirstJni.cpp类里面,具体的参数需要含义自己百度
#include <jni.h>
#include <com_example_myfirstjni_MyJni.h>//导入头文件,如果有需要
JNIEXPORT jstring JNICALL Java_com_example_myfirstjni_MyJni_getString
(JNIEnv *env, jclass){
return env->NewStringUTF("I'm ok!");
}
.h文件里
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_myfirstjni_MyJni */
#ifndef _Included_com_example_myfirstjni_MyJni
#define _Included_com_example_myfirstjni_MyJni
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_example_myfirstjni_MyJni
* Method: getString
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_example_myfirstjni_MyJni_getString
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
这里会报错,就是Type 'jclass' could not be resolved
此时需要配置一下
paths 和 Symbols;
右键工程项目-->Properties-->C/C++ General-->Paths and Symbols;右边选择include标签
点击OK即可
6、后面直接编译即可(注意:在直接run的时候记得把工程项目切换为java;在add native support的时候会切换为C/C++的模式)
总结:有很多很多的坑,大家自己慢慢尝试。