一、官方Demo的运行
1、下载android-ndk。
2、配置环境变量
在path路径下添加自己ndk的路径。例如我的是:E:\android\developer\android-ndk-r9d
3、导入官方Demo程序
E:\android\developer\android-ndk-r9d\samples\hello-jni
4、在命令行切换到项目的目录下,执行ndk-build命令生成.so文件
5、运行程序在手机上即可。
二、写自己的第一个Jni程序
1、新建一个android项目MyHelloJni
2、在MainActivity中添加一个本地方法
public native String getStringFromC();
3、在项目的根目录下创建一个jni文件夹
4、在命令行中切换到项目的根目录下,使用javah命令生成jni要使用到的.h文件
javah -classpath bin\classes;路径\android.jar -d jni 报名.类名
5、刷新项目,在jni目录下即可看到生成的.h文件
6、在jni目录下新建文件hello.c
7、编辑hello.c文件
#include <stdio.h>
#include <stdlib.h>
#include "com_goodocom_myhellojni_MainActivity.h"
在.h文件中copy要实现的方法
JNIEXPORT jstring JNICALL Java_com_goodocom_myhellojni_MainActivity_getStringFromC
(JNIEnv *, jobject);
添加参数名
JNIEXPORT jstring JNICALL Java_com_goodocom_myhellojni_MainActivity_getStringFromC
(JNIEnv * env, jobject obj)
添加方法体
JNIEXPORT jstring JNICALL Java_com_goodocom_myhellojni_MainActivity_getStringFromC
(JNIEnv * env, jobject obj){
return (*env)->NewStringUTF(env, "Hello from JNI !");
}
保存hello.c文件
8、在jni目录下添加Android.mk文件
9、添加一下内容
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello
LOCAL_SRC_FILES := hello.c
include $(BUILD_SHARED_LIBRARY)
10、修改.mk文件
//生成.so文件的名称
LOCAL_MODULE := hello
//要加载的.c文件名称
LOCAL_SRC_FILES := hello.c
11、在命令行切换到项目根目录下,执行ndk-build命令,即可在lib目录下生成armeabi文件夹,armeabi目录下就是生成的.so文件
12、在MainAcitivity中使用静态代码块,加载.so文件
static{
System.loadLibrary("hello");
}
注意:加载库的名称为自己在.mk文件中修改的名称,而非生成的.so文件的名称。这里就是“hello”,而非“libhello.so”。
13、调用本地方法。
Log.d("MainActivity", getStringFromC());
14、运行程序,即可在控制台看到getStringFromC()返回的结果