1.创建一个Android项目,代码片段如下:
//MainActivity.java
package com.example.hellojni;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText(JniUtils.stringFromJNI());
setContentView(tv);
}
}
//JniUtils.java
package com.example.hellojni;
public class JniUtils {
static {
System.loadLibrary("hello-jni");
}
public static native String stringFromJNI();
}
2.使用Terminal移动到到app/src/main目录,输入javah -d jni/include -classpath java com.example.helljni.JniUtils
-d jni/include :指定生成的.h头文件放置目录
-classpath java com.example.hellojni.JniUtils :指定要生成.h头文件的源代码
生成的com_example_hellojni_JniUtils.h头文件内容如下 :
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_example_hellojni_JniUtils */
#ifndef _Included_com_example_hellojni_JniUtils
#define _Included_com_example_hellojni_JniUtils
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_example_hellojni_JniUtils
* Method: stringFromJNI
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_example_hellojni_JniUtils_stringFromJNI
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
3.在jni目录下创建hello-jni.c文件,内容如下(实现头文件中定义的方法):
#include <jni.h>
#include <stdio.h>
#include "com_example_hellojni_JniUtils.h"
JNIEXPORT jstring JNICALL Java_com_example_hellojni_JniUtils_stringFromJNI(JNIEnv * env, jclass othiz)
{
return (*env)->NewStringUTF(env, "Hello from JNI!");
}
4.在jni目录下创建Android.mk和Application.mk文件
//Android.mk文件内容如下:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
LOCAL_C_INCLUDES += $(LOCAL_PATH)/include
include $(BUILD_SHARED_LIBRARY)
//Application.mk文件内容如下:
APP_ABI := armeabi-v7a
5.打开app/build.gradle加入下面两段:
在android.defaultConfig属性中加入:
ndk {
abiFilters "armeabi", "armeabi-v7a"
}
在android属性中加入:
sourceSets {
main() {
jniLibs.srcDirs = ["src/main/libs"]
jni.srcDirs = []
}
}
6.打开gradle.properties文件加入:
android.useDeprecatedNdk = true
7.配置ndk-build
打开File/Settings/Tools/External Tools,点击添加(+)按钮,弹出配置框,添加配置:
8.右击项目,选择External/ndk-build开始编译。
编译成功,则在app/src/main/libs目录下生成相应的.so
9.运行项目