这2天在测试ndk,但是看了几个blog都没实现。后来看官方文档,终于实现了一个最简单的demo,放blog上自己忘记的时候也可以看下。
1,首先需要配置好ndk环境(建议下载ndk10以上的版本,否则可能报错),并在AS上配置好
在项目文件gradle.properties文件末尾加
android.useDeprecatedNdk=true
2,新建一个android项目,再新建一个调用本地接口的类,并在里面加载库
public class JniUtils { static { System.loadLibrary("hello-jni"); } public native String getHelloString(); }
在MainActivity中调用上面接口的方法
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); JniUtils utils=new JniUtils(); TextView tv=new TextView(this); tv.setText(utils.getHelloString()); setContentView(tv); } }
3,在AS上点击Bulid选择Make Project,生成class文件,找到生成class文件的目录
打开cmd命令,先进入到当前class的debug目录
cd D:\androidspace\gzydemo\TestNDK\app\build\intermediates\classes\debug
再运行javah命令生成JniUtils类的.h文件
javah -jni com.gzy.testndk.JniUtils
4,把生成的.h文件复制到项目的jni目录下
在jni目录下新建hello-jni.c文件,方法直接复制.h文件中的接口方法就可以,只需要实现该接口
#include <jni.h>
//
// Created by Administrator on 2016-11-25.
//
JNIEXPORT jstring JNICALL Java_com_gzy_testndk_JniUtils_getHelloString
(JNIEnv *env, jobject obj){
return (*env)->NewStringUTF(env,"jni-hello");
}
在jni目录新建Android.mk文件
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello-jni
LOCAL_SRC_FILES := hello-jni.c
include $(BUILD_SHARED_LIBRARY)
5,在项目build.gradle文件添加如下
ndk{ moduleName "hello-jni" }
到这里直接运行项目就可以了