android开发实践之ndk编译命令简单示例

发布时间 - 2026-01-11 02:00:29    点击率:

前言

Android提供了NDK工具,用来编译native代码(c/c++),该工具配置好了相关的交叉编译环境和工具链,只需要你简单地编写几个.mk文件即可将你的c/c++代码编译为Android的java工程/Android手机可以识别、加载和运行的库或者应用程序。

默认情况下,使用NDK编译c/c++代码,需要将该代码放置到任一个Android应用工程的jni目录下,然后编写相应的Android.mk文件,并执行ndk-build命令完成编译。其实你也是可以在任意目录下去编译native代码的,只需要在ndk-build命令后面添加相应的命令行参数即可,这里给出一些常用的ndk-build命令行参数,方便大家灵活地使用NDK编译自己的native代码,具体的示例我将会在后续的文章中给出。

ndk-build命令行参数

1、ndk-build NDK_LOG=1

用于配置LOG级别,打印ndk编译时的详细输出信息

2、ndk-build NDK_PROJECT_PATH=.

指定NDK编译的代码路径为当前目录,如果不配置,则必须把工程代码放到Android工程的jni目录下

3、ndk-build APP_BUILD_SCRIPT=./Android.mk

指定NDK编译使用的Android.mk文件

4、ndk-build NDK_APPLICATION_MK=./Application.mk

指定NDK编译使用的application.mk文件

5、ndk-build clean

清除所有编译出来的临时文件和目标文件

6、ndk-build -B

强制重新编译已经编译完成的代码

7、ndk-build NDK_DEBUG=1

执行 debug build

8、ndk-build NDK_DEBUG=0

执行 release build

9、ndk-build NDK_OUT=./mydir

指定编译生成的文件的存放位置

10、ndk-build -C /opt/myTest/

到指定目录编译native代码

例:

编写 .c 文件

假设你在 ~/math 目录下编写了一个 math.c 文件,内容如下:

#include <stdio.h>
int add( int a , int b ) {
return a+b;
}

编写 Android.mk 文件,内容如下:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := dmath
LOCAL_SRC_FILES := math.c
include $(BUILD_SHARED_LIBRARY)

在 ~/math 目录下,执行 ndk-build 命令,参数如下:

$ ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk

或:

ndk-build NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=./Android.mk NDK_APPLICATION_MK=./Application.mk

NDK_PROJECT_PATH 指定了需要编译的代码的工程目录,这里给出的是当前目录,APP_BUILD_SCRIPT给出的是Android makefile文件的路径,当然,如果你还有 Application.mk 文件的话,则可以添加NDK_APP_APPLICATION_MK=./Application.mk

执行完ndk-build命令后,你会发现当前目录下,生成了 obj 和 libs 文件夹,这样,你的libdmath.so动态库就已经制作完成了,在 libs/armeabi 目录下。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# android  # ndk  # 命令  # 编译  # 命令行编译  # Linux命令行下编译Android NDK的示例代码  # Studio 编译报错:compileSdkVersion ''android-24'' requi  # Ubantu16.04进行Android 8.0源码编译的流程  # Android Studio中通过CMake使用NDK并编译自定义库和添加预编译库  # Android反编译程序整理详解  # 完美解决Android Studio集成crashlytics后无法编译的问题  # Android应用程序(APK)的编译打包过程  # 下载、编译、运行android 7.1系统详解(ubuntu 16.0.4)  # Gradle编译打包Android apk详细介绍  # Android编译的注意事项  # 目录下  # 的是  # 命令行  # 只需  # 自己的  # 几个  # 如果你  # 好了  # 你在  # 会在  # 要在  # 写了  # 我将  # 这篇文章  # 要你  # 谢谢大家  # 则可  # 将你  # 你会发现  # 将该 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Mybatis 中的insertOrUpdate操作  Python结构化数据采集_字段抽取解析【教程】  深圳防火门网站制作公司,深圳中天明防火门怎么编码?  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  百度浏览器网页无法复制文字怎么办 百度浏览器复制修复  Laravel如何记录自定义日志?(Log频道配置)  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  如何确保FTP站点访问权限与数据传输安全?  Swift中swift中的switch 语句  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  网站建设要注意的标准 促进网站用户好感度!  JavaScript常见的五种数组去重的方式  Laravel如何配置和使用缓存?(Redis代码示例)  Android滚轮选择时间控件使用详解  Laravel用户密码怎么加密_Laravel Hash门面使用教程  微信小程序 require机制详解及实例代码  想要更高端的建设网站,这些原则一定要坚持!  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  如何在阿里云虚拟主机上快速搭建个人网站?  如何快速辨别茅台真假?关键步骤解析  如何在云虚拟主机上快速搭建个人网站?  Java类加载基本过程详细介绍  新三国志曹操传主线渭水交兵攻略  小米17系列还有一款新机?主打6.9英寸大直屏和旗舰级影像  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  网易LOFTER官网链接 老福特网页版登录地址  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  Laravel如何实现一对一模型关联?(Eloquent示例)  如何安全更换建站之星模板并保留数据?  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  网页设计与网站制作内容,怎样注册网站?  如何为不同团队 ID 动态生成多个“认领值班”按钮  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  Laravel怎么判断请求类型_Laravel Request isMethod用法  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  如何用低价快速搭建高质量网站?  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法  UC浏览器如何设置启动页 UC浏览器启动页设置方法  如何用PHP快速搭建CMS系统?