Ndk开发入门教程
Posted 楠之枫雪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ndk开发入门教程相关的知识,希望对你有一定的参考价值。
配置AS的NDK环境
这里直接在as中下载安装。也可以自己去下载ndk然后配置。
把下载后的ndk路径配置到环境变量去(方便在terminal中直接使用):
创建NDK的工程
- 选择创建的类型
创建完项目后自动生成的.cpp文件会报红,不处理也不会出错,解决方式查看该文
使用Cmake的方式开发并且获取到so库(更加简单,推荐)
在sdk tool里面下载Cmake
新建C++工程默认使用CmakeList的方式
关于Cmake与CamkeList简单可以查看这个文章介绍:https://blog.csdn.net/u013896064/article/details/82874152
默认生成的是x86_64,如果想支持多种库架构,则可在app module的build.gradle中配置ndk支持。
android
.......
defaultConfig
...........
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
externalNativeBuild
cmake
cppFlags ""
ndk
// 设置支持的 SO 库构架,注意这里要根据你的实际情况来设置
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
externalNativeBuild
cmake
path "src/main/cpp/CMakeLists.txt"
version "3.6.0"
当要获取so库对外使用时,直接build apk并且解压获取即可
使用makefile的方式生成想要的so库(稍微麻烦点)
- 创建测试JavaToC 文件
public class JavaToC
static
// ToCJniTest就是后面会生成的so库的名字
System.loadLibrary("NdkDemo");
// 定义一个native方法,具体的实现放在C里面
public native static String getTips();
-
build-makeproject 编译生生成class文件。存放位置如下:
-
在as的terminal下进入debug\\classes位置,输入指令生成h文件
.c是源文件,而.h是头文件,一般把函数的声明都放在头文件中,而实现就都在.c文件当中。好比java中的接口类与实现类,.h类似接口类型,.c类似实现类。.cpp是c++文件
-
在工程目录的app\\src\\main文件夹目录下新建一个jni文件夹
-
.h文件移动到新建的jni目录下面
-
新建一个.c文件jni目录下 ,命名为JavaToC.c
#include <jni.h>
#include <com_bifan_ndkdemo_JavaToC.h>
JNIEXPORT jstring JNICALL Java_com_bifan_ndkdemo_JavaToC_getTips
(JNIEnv *env, jclass jc)
return (*env)->NewStringUTF(env,"ToCJniTest library test");
- 新建Android.mk和Application.mk文件
jni文件夹中创建两个文件Android.mk和Application.mk
Android.mk 文件是用来配置 jni编译的 源文件输入、编译参数、编译输出产物 等等。 Application.mk 文件是用来 指定平台有关的配置信息,比如编译的平台版本、平台架构、使用的标准库 等等
Android.mk编辑:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := NdkDemo //so库名字
LOCAL_SRC_FILES := JavaToC.c //c文件名称
include $(BUILD_SHARED_LIBRARY)
Application.mk编辑:
APP_ABI := all //指定so库的类型有哪些
最终包含的文件如下:
- 生成so文件
在Terminal下,定位到创建的jni目录下,输入ndk-build指令生成。然后会在libs下生成so文件。
使用so库
- 在APP的build.gradle下添加
sourceSets
main()
jniLibs.srcDirs = ["src/main/libs"]
jni.srcDirs = []
- 调用
TextView tv = binding.sampleText;
tv.setText(JavaToC.getTips());
转载注明:https://blog.csdn.net/u014614038/article/details/117626568
以上是关于Ndk开发入门教程的主要内容,如果未能解决你的问题,请参考以下文章