Android ndk初探(一)

1 篇文章 0 订阅

调用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方法调用了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值