android Ndk JNI 入门

对于很多人来说,ndk开发可能是一件让人感到困惑的事情。例如,大家都知道将加密逻辑和密钥放入so文件中,但你知道如何生成so文件吗?你了解jni开发吗?你熟悉jni语法吗?如何在android studio中配置ndk环境?如果你感到困惑,我曾经也有同样的感受。虽然我无法直接帮助你开发ndk,但我可以帮助你不再感到困惑。

如果你有需要,可以去百度查找相关信息。接下来,我将介绍如何在Android Studio中进行设置。顺便提一下,百度上有很多误导性的文章,这些文章的作者可能没有亲手实践过,内容晦涩难懂,且有些部分一笔带过,难以找到方向。因此,必须仔细筛选,才能找到有用的信息。基于此,我总结了这篇文章,希望能帮助你。

一、NDK相关角色概述

1、NDK和SO

android Ndk JNI 入门NDK,即Native Development Kit,是Google为Android开发提供的一套用于快速创建原生工程的工具。从上图的Android系统框架来看,我们可以通过JNI方式调用NDK层,使用这个工具可以方便地编写和调试JNI代码。因为C语言不跨平台,我们可以使用NDK在Windows系统下编译出在Linux下可执行的函数库——SO文件,SO文件全称Shared Objects,本质上是一堆C、C++的头文件和实现文件打包成的库。目前,Android系统支持以下七种不同的CPU架构,每种对应着各自的应用程序二进制接口ABI:

ARMv5——armeabi

ARMv7——armeabi-v7a

ARMv8——arm64-v8a

x86——x86

MIPS——mips

MIPS64——mips64

x86_64——x86_64

根据我的ODM经验,你应该尽量为每个ABI提供优化的.so文件(尽量不要混合使用)。你应该为每个ABI目录提供对应的.so文件。当一个应用安装在设备上时,只有该设备支持的CPU架构对应的.so文件会被安装。在x86设备上,如果libs/x86目录中有.so文件,会被安装;如果没有,则会选择armeabi-v7a中的.so文件;如果仍然没有,则选择armeabi目录中的.so文件(因为x86设备也支持armeabi-v7a和armeabi)。提示:Native Libs Monitor这个应用可以帮助我们了解手机上安装的APK使用了哪些.so文件,以及这些.so文件来源于哪些函数库或框架。

二、JNI

android Ndk JNI 入门JNI,即Java Native Interface,是Java中定义的一种用于连接Java和C/C++接口的实现方式。Java语言加载到虚拟机中,不能与硬件交互,也不能进行驱动开发。JNI扩展了Java虚拟机的能力,支持驱动开发、无线热点共享等。底层语言(C、C++)效率高,适用于数学运算、实时渲染的游戏、音视频处理等。简而言之,JNI就是Java代码调用C、C++代码。JNI模式涉及三个角色:C/C++代码、本地方法接口类、Java层中的具体业务类。

1、JNI简要流程

android Ndk JNI 入门2、JNI的变量类型与Java类型对比表

Java中变量的类型 JNI对应的类型名 C/C++变量类型

boolean
jboolean
unsigned char

float
jfloat
float

double
jdouble
double

byte
jbyte
signed char

char
jchar
unsigned short

short
jshort
short

int
jint/jsize
int

long
jlong
long long

Object
jobject
void *

String
jstring
void *

3、JNI的基本语法

JNIEXPORT jstring JNICALL Java_xiao_mi_jni_JNITest_getJniStr(JNIEnv *env, jclass type) {    return (*env)->NewStringUTF(env, "Hello from JNI!");}

登录后复制

文章来自互联网,只做分享使用。发布者:,转转请注明出处:https://www.dingdanghao.com/article/881934.html

(0)
上一篇 2025-05-13 13:06
下一篇 2025-05-13 13:06

相关推荐

联系我们

在线咨询: QQ交谈

邮件:442814395@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信公众号