1、安装cygwin
在http://www.cygwin.cn/下载最新版cygwin安装(在其它站点下载的cygwin的iso文件,安装后可能会由于版本过低而不能正常使用)
2、安装NDK
在 http://developer.android.com/tools/sdk/ndk/index.html 下载ndk包,直接解压即可使用
3、配置NDK
在cygwi安装目录下进入/home/用户名/,打开.bash_profile文件,添加环境变量
NDKROOT=/cygdrive/d/environment/android-ndk-r8b
export NDKROOT
4、调试samples下demo
打开cygwin,进入ndk中samples下对应的工程目录
cd $NDKROOT
cd samples/hello-jni/jni
将目录下的.c文件编译为.so文件
$NDKROOT/ndk-build
执行成功后会在工程根目录下生成libs,obj两个文件夹,文件夹中包含.so文件
5、将项目导入 eclipse中就可以正常运行
6、手写测试程序
(1)eclipse中创建一个新的android工程,并新建一个TestJNI类:
package com.testjni;
public class TestJNI {
public native void setStr(String str);
public native String getStr();
static {
System.loadLibrary("jnitest");
}
}
(2) 打开cmd界面,进入工程中bin目录下,class文件所在路径,使用javah命令来生成对应的.h文件,.h文件在当前目录下:
(3)在工程根目录下创建一个jni文件夹,在jni中新建一个TestJNI.c文件,将.h文件中对应的方法拷贝到.c文件中,并对方法进行实现
com_testjni_TestJNI.h
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_testjni_TestJNI
* Method: setStr
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_com_testjni_TestJNI_setStr
(JNIEnv *, jobject, jstring);
/*
* Class: com_testjni_TestJNI
* Method: getStr
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_testjni_TestJNI_getStr
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
TestJNI.c
#include <stdio.h>
#include <jni.h>
#include <string.h>
/*
* Class: com_testjni_TestJNI
* Method: setStr
* Signature: (Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_com_testjni_TestJNI_setStr
(JNIEnv * env, jobject obj, jstring str){
};
/*
* Class: com_testjni_TestJNI
* Method: getStr
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_testjni_TestJNI_getStr
(JNIEnv * env, jobject obj){
return (*env)->NewStringUTF(env, "Hello from JNI !");
};
7、在.c文件相同目录下新建一个Android.mk文件
LOCAL_MODULE := jnitest;生成的.so文件的名称
# Copyright (C) 2009 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := jnitest
LOCAL_SRC_FILES := testjni.c
include $(BUILD_SHARED_LIBRARY)
8、将工程拷贝到symple下,同上面编译samples下demo编译过程