调用native修饰的方法
一、首先新建一个项目MyFirstJniTest
二、新建java类:JniUtils.java,定义native方法:public static native String add();然后我们在activity中调用这个方法:比如textview.settext(JniUtils.add());
三、构建项目,然后app\build\intermediates\classes\debug目录下面会生成class文件夹,也会有对应的JniUtils类
四、进入app\build\intermediates\classes\debug目录,执行命令:javah -jni 包名+JniUtils在当前目录中会生成.h文件。
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_parking_juxiu_custom_view_jnitest_JniUtils */
#ifndef _Included_com_parking_juxiu_custom_view_jnitest_JniUtils
#define _Included_com_parking_juxiu_custom_view_jnitest_JniUtils
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_parking_juxiu_custom_view_jnitest_JniUtils
* Method: add
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_parking_juxiu_custom_1view_jnitest_JniUtils_add
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
五、在main下面新建jni目录,将.h文件拷贝进去,然后新建.c文件,这个.c文件的名字就是lib库的名字,比如jnitest.c。在.c代码中编写:
//
// Created by Administrator on 2017/10/18.
//
# include "com_parking_juxiu_custom_view_jnitest_JniUtils.h"
JNIEXPORT jstring JNICALL Java_com_parking_juxiu_custom_1view_jnitest_JniUtils_add
(JNIEnv *env, jobject obj){
return (*env)->NewStringUTF(env,"方法返回的值");
}
六、在module/gradle中defaultconfig中设置库文件名以及想要支持的架构类型:
defaultConfig {
applicationId "com.parking.juxiu.custom_view"
minSdkVersion 15
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
**ndk{
moduleName "jnitest"
abiFilters "armeabi", "armeabi-v7a", "x86"
}**
}
七、然后去JniUtils.java中添加库依赖:
static {
System.loadLibrary("jnitest");
}
并在jni目录下新建Android.mk文件:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := jnitest //jni模块加载名称,需要和上面的名字一致
LOCAL_SRC_FILES := jnitest.c //c文件名字,如果是.cpp文件的就是.cpp
include $(BUILD_SHARED_LIBRARY)
八、在gradle.properties中添加:android.useDeprecatedNdk=true
并且确定local.properties中有添加ndk所在路径。
九、编译。会在app\build\intermediates\classes\debug的ndk目录下生成对应架构的.so文件,so文件格式:lib+库名.so。然后在main下新建jnilibs文件夹,将对应.so文件拷贝到对应架构文件夹中。运行,这样就完成了一次简单的native方法调用了。