Android NDK 开发入门详解

mac2025-08-27  12

所谓ndk开发,就是让android 开发 java 的jni更为简单的一个插件。因为jni生成连接库比较麻烦,ndk提供了一种快速生成各种cpu平台的so库的方法。从而不用使用gcc去生成so库。 1.新建一个工程。 2.如果没有下载ndk工具,就打开android studio setting 里面找到android sdk 然后再找到sdk tools 然后勾选 ndk等最新版本的ndk下载完成。 3.创建一个Java类,定义native方法,这个native 方法的实现用c++来实现,MainActivity 只需要去调用就可以了。 4.进入工程main\java目录里面执行javah -d …/jni com.xiaoming.myndkdemo.JniTest 这个命令的意思就是在…/jni目录里面生成头文件,需要生成头文件的类是JniTest的全名。 然后回车就可以看到一个.h结尾的头文件已经生成好了。这个文件在与java同级目录下面。 5.引入头文件,用c++实现这个native方法。 6.创建两个文件,分别是Android.mk Application.mk 文件内容分别如下`

LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := test LOCAL_SRC_FILES := test.cpp include $(BUILD_SHARED_LIBRARY) APP_ABI:= all

第一个是Android.mk 第二个是Application.mk 只需要注意这三个 参数,LOCAL_MODULE := test LOCAL_SRC_FILES := test.cpp APP_ABI分别意思是,so库的文件名,编译so库的c++源文件路径。还有编译so库支持的平台,总共有五个平台可以选择,如果是all 就证明打包所有平台支持的so库。 7.切换到mian目录下面,执行ndk-build 进行so库的打包,如果打包异常,检查一下是否有什么语法错误,改正完以后重新打包。 然后在那个native类里面的静态代码块里面对这个so库进行加载。 最后运行报错 如下:

Error: Your project contains C++ files but it is not using a supported native build system.

意思就是你的工程没有用一个支持的本地构建系统。我们在app的build.gradle的android{}闭包里面添加一个小的闭包

sourceSets { main() { jniLibs.srcDirs = ['src/main/libs'] jni.srcDirs = [] //屏蔽掉默认的jni编译生成过程 } }

这样,so库的路径就别识别了,下面重新运行,就得到你想打印的日志了。

最新回复(0)