对于很多人来说,ndk开发可能是一件让人感到困惑的事情。例如,大家都知道将加密逻辑和密钥放入so文件中,但你知道如何生成so文件吗?你了解jni开发吗?你熟悉jni语法吗?如何在android studio中配置ndk环境?如果你感到困惑,我曾经也有同样的感受。虽然我无法直接帮助你开发ndk,但我可以帮助你不再感到困惑。
如果你有需要,可以去百度查找相关信息。接下来,我将介绍如何在Android Studio中进行设置。顺便提一下,百度上有很多误导性的文章,这些文章的作者可能没有亲手实践过,内容晦涩难懂,且有些部分一笔带过,难以找到方向。因此,必须仔细筛选,才能找到有用的信息。基于此,我总结了这篇文章,希望能帮助你。
一、NDK相关角色概述
1、NDK和SO
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
JNI,即Java Native Interface,是Java中定义的一种用于连接Java和C/C++接口的实现方式。Java语言加载到虚拟机中,不能与硬件交互,也不能进行驱动开发。JNI扩展了Java虚拟机的能力,支持驱动开发、无线热点共享等。底层语言(C、C++)效率高,适用于数学运算、实时渲染的游戏、音视频处理等。简而言之,JNI就是Java代码调用C、C++代码。JNI模式涉及三个角色:C/C++代码、本地方法接口类、Java层中的具体业务类。
1、JNI简要流程
2、JNI的变量类型与Java类型对比表
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
