Eclipse Android JNI初探小结

来源:互联网 发布:centos安装中文包 编辑:程序博客网 时间:2024/06/06 02:46

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    := MyFirstJniLOCAL_SRC_FILES := MyFirstJni.cppinclude $(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 __cplusplusextern "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++的模式


总结:有很多很多的坑,大家自己慢慢尝试。