Android ndk初探(一)

来源:互联网 发布:js判断ie浏览器版本 编辑:程序博客网 时间:2024/05/16 10:10

调用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 __cplusplusextern "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文件的就是.cppinclude $(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方法调用了。

原创粉丝点击