Android Studio配置NDK环境

1. NativeCalc和Calc类

NativeCalc类,使用native关键字定义方法,声明为本地方法。

public class NativeCalc {

    public native double add(double left, double right);

    public native double subtract(double left, double right);

    public native double multiply(double left, double right);

    public native double divide(double left, double right);

}

Calc类,System.loadLibrary(String)加载本库库文件。

public class Calc {
    static {
        System.loadLibrary("calcLibs");
    }

    private NativeCalc mCalc;
    public Calc() {
        mCalc = new NativeCalc();
    }

    public double add(double left, double right) {
        return mCalc.add(left, right);
    }

    public double subtract(double left, double right) {
        return mCalc.subtract(left, right);
    }

    public double multiply(double left, double right) {
        return mCalc.multiply(left, right);
    }

    public double divide(double left, double right) {
        return  mCalc.divide(left, right);
    }

}

2. 生成jni中的.h文件

在【File】->【Settings…】打开配置界面,在【Tools】->【External Tools】中添加javah配置,可以方便地生成.h文件。
在这里插入图片描述
配置完成后,可以在【Tools】->【NDK】->【javah】调用
在这里插入图片描述
自动生成jni目录和.h文件
在这里插入图片描述

3. jni文件

com_blog_demo_jni_NativeCalc.h文件,由javah自动生成。

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_blog_demo_jni_NativeCalc */

#ifndef _Included_com_blog_demo_jni_NativeCalc
#define _Included_com_blog_demo_jni_NativeCalc
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_blog_demo_jni_NativeCalc
 * Method:    add
 * Signature: (DD)D
 */
JNIEXPORT jdouble JNICALL Java_com_blog_demo_jni_NativeCalc_add
  (JNIEnv *, jobject, jdouble, jdouble);

/*
 * Class:     com_blog_demo_jni_NativeCalc
 * Method:    subtract
 * Signature: (DD)D
 */
JNIEXPORT jdouble JNICALL Java_com_blog_demo_jni_NativeCalc_subtract
  (JNIEnv *, jobject, jdouble, jdouble);

/*
 * Class:     com_blog_demo_jni_NativeCalc
 * Method:    multiply
 * Signature: (DD)D
 */
JNIEXPORT jdouble JNICALL Java_com_blog_demo_jni_NativeCalc_multiply
  (JNIEnv *, jobject, jdouble, jdouble);

/*
 * Class:     com_blog_demo_jni_NativeCalc
 * Method:    divide
 * Signature: (DD)D
 */
JNIEXPORT jdouble JNICALL Java_com_blog_demo_jni_NativeCalc_divide
  (JNIEnv *, jobject, jdouble, jdouble);

#ifdef __cplusplus
}
#endif
#endif

com_blog_demo_jni_NativeCalc.cpp文件,实现了加减乘除四个方法

#include <jni.h>
#include "com_blog_demo_jni_NativeCalc.h"

JNIEXPORT jdouble JNICALL Java_com_blog_demo_jni_NativeCalc_add
        (JNIEnv *env, jobject obj, jdouble left, jdouble right) {
    return left + right;
}

JNIEXPORT jdouble JNICALL Java_com_blog_demo_jni_NativeCalc_subtract
        (JNIEnv *env, jobject obj, jdouble left, jdouble right) {
    return left - right;
}

JNIEXPORT jdouble JNICALL Java_com_blog_demo_jni_NativeCalc_multiply
        (JNIEnv *env, jobject obj, jdouble left, jdouble right) {
    return left * right;
}

JNIEXPORT jdouble JNICALL Java_com_blog_demo_jni_NativeCalc_divide
        (JNIEnv *env, jobject obj, jdouble left, jdouble right) {
    return left / right;
}

4. ndk编译

Android.mk文件

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := calcLibs
LOCAL_SRC_FILES := com_blog_demo_jni_NativeCalc.cpp

include $(BUILD_SHARED_LIBRARY)

在【Tools】->【External Tools】中添加ndk-build配置
在这里插入图片描述
src\main\libs目录下生成so文件
在这里插入图片描述

5. build.gradle配置

app下的build.gradle文件进行配置

android {
    ... ...
    sourceSets {
        main {
            jni.srcDirs = [] // 屏蔽自动jni编译
            jniLibs.srcDir "src/main/libs" // 引入so文件
        }
    }
    ... ...
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值