android ndk-build,NDK在Android Studio下的开发(ndk-build篇幅)

本文详细介绍了Android中使用NDK和JNI进行原生C/C++代码开发的步骤,包括环境配置、Java类和native方法创建、头文件生成、C/C++代码实现、makefile配置以及最终的.so库加载和使用。通过实例展示了如何提高算法效率,如图像处理。
摘要由CSDN通过智能技术生成

NDK系列

一些定义:

NDK:Native Development Kit (原生开发工具包)

可以在Android 平台上开发和使用C/C++代码的工具包

JNI:Java Native Interface(java本地开发接口)

规定和约束了Java如何使用C/C++代码,使用C/C++代码可以提高一些算法效率,比如图像处理。

配置环境

b792d7830590

下载ndk.png

b792d7830590

配置路径.png

创建java类和native方法

我们创建java类和native方法,且在MainActivity调用下

b792d7830590

image.png

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

Log.d("xfz", JniCalculator.getSum(1, 2) + "");

}

}

使用javah命令创建头文件

我们先看下javah的用法:

b792d7830590

image.png

生成头文件

-jni 是生成JNI样式的标准头文件,默认就开启

所以我们只需要cd到java目录下,输入命令:

javah -d ../jni/ com.jnidemo.jniutils.JniCalculator

即可在java同级目录下生成jni文件和头文件

b792d7830590

生成头文件.png头文件代码如下

#include

/* Header for class com_jnidemo_jniutils_JniCalculator */

#ifndef _Included_com_jnidemo_jniutils_JniCalculator

#define _Included_com_jnidemo_jniutils_JniCalculator

#ifdef __cplusplus

extern "C" {

#endif

/*

* Class: com_jnidemo_jniutils_JniCalculator

* Method: getSum

* Signature: (II)I

*/

JNIEXPORT jint JNICALL Java_com_jnidemo_jniutils_JniCalculator_getSum

(JNIEnv *, jclass, jint, jint);

#ifdef __cplusplus

}

#endif

#endif

实现C/C++代码

我们在jni目录下创建c++文件并引入头文件,并且实现头文件里的方法

#include "com_jnidemo_jniutils_JniCalculator.h"

extern "C" JNIEXPORT jint JNICALL Java_com_jnidemo_jniutils_JniCalculator_getSum

(JNIEnv *env, jclass, jint i, jint j) {

return (i + j);

}

创建makefile文件

android.mk 和 application.mk

b792d7830590

image.png

//android.mk文件的代码

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := calculator

LOCAL_SRC_FILES := jni_calculator.cpp

include $(BUILD_SHARED_LIBRARY)

其中LOCAL_MODULE为生成的so包名,可以自定义

LOCAL_SRC_FILES为c++的文件名

//application.mk文件的代码

APP_ABI := all

APP_ABI为支持的架构

gradle关联android.mk

右键选择Link C++ Project with Gradle ,选择ndk-build,选择Android.mk进行关联

b792d7830590

image.png

在app 的 build.gradle中的添加ndk

b792d7830590

image.png

其中calculator就是Android.mk里的LOCAL_MODULE

生成so包

cd到jni目录,

输入ndk-build(需要先配置NDK环境变量)

b792d7830590

image.png

生成libs,包含各个平台的so包

b792d7830590

image.png

so包的使用

我们可以使用sourceSets进行引用,也可以直接放入jniLibs文件夹里

b792d7830590

image.png

loadLibrary

最后我们在JniCalculator.java中去load C++生成库

public class JniCalculator {

static {

System.loadLibrary("calculator");

}

public static native int getSum(int i, int j);

}

成功输出

MainActivity里的Log.d("xfz", JniCalculator.getSum(1, 2) + "");成功输出3

b792d7830590

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值