当前位置: 首页 > news >正文

android-ndk开发(1): 搭建环境

android-ndk开发(1): 搭建环境

2025/05/05

1. 目的

写一些 C/C++ 代码, 例如 cv 基础算法, 并交叉编译到 android 平台。 不涉及 JNI、 Java、 Kotlin, 暂不涉及 rust。 基本上能适用于华为鸿蒙的 ohos ndk。

那么, 为了完成交叉编译, 以及部署、运行、调试, 需要哪些配置? 本篇提供基础的环境说明:

  • 工具链: android-ndk
  • 设备连接工具: adb
  • 构建工具: cmake 和 ninja

2. android-ndk

2.1 android-ndk 是什么

android 是 linux 吗? 似乎是, 但又不太一样。
类似的, android-ndk 是 clang 吗? 似乎是, 但又不太一样。

总之, android-ndk 可以简单理解为, 是 clang 的魔改版本, 有专门的 team 开发维护的。

还不理解? android-ndk 是交叉编译工具链, 带有不错的 cmake 构建支持。

2.2 下载 android-ndk

官网只提供最新的几个版本: https://developer.android.google.cn/ndk/downloads

老版本从 github 页面查看下载链接: https://github.com/android/ndk/wiki/Unsupported-Downloads

对于 Linux 和 Windows 用户, 下载后解压, 就完成了安装。 对于 macOS, 苹果的签名机制导致比较新版本的 android-ndk 不能直接解压安装, 后续单独开一篇讲讲。

2.3 是否需要 Android Studio:非必须

Android Studio 充当这几个角色:

  • 是官方钦定的 IDE。一般简称为 AS
  • 编译 apk 的话, 对于普通人来说老实用 Android Studio
  • AS 能让用户点点点的方式, 下载 android sdk, android ndk 等

但不用 AS 也可以把 C/C++ 代码交叉编译到 android 平台。 要运行、调试,也可以不用 AS。

3. adb

3.1 adb 是什么

当编译出可执行程序、动态库, 需要把它们放到 android 设备上去执行。 简单的说就是拷贝 PC 上的文件到设备上, 这些文件最重要的就是可执行文件, 也可以是动态库, 甚至是图片、 文本文件等。 adb 充当了 ”拷贝工具“。

要运行程序, 需要连接到设备上, 在启动程序。 adb 充当了 ”通信道路“。

当把设备上程序运行的结果拷贝回到本地,比如日志文件,adb 再次充当了 “拷贝工具” 的角色, 只不过方向是从设备到 PC。

此外, adb 还可以完成 apk 的安装, 模拟屏幕操作等; 对于 cv 库开发者来说, 这些用不到, 就跳过吧。

官方的说明文档很详实: https://developer.android.com/tools/adb?hl=zh-cn

3.2 下载 adb

对于独立下载 android-ndk 的用户(我的主要使用方式), 需要另行下载 platform-tools, 它包含了 adb 等工具:

https://developer.android.google.cn/tools/releases/platform-tools

添加到 PATH 环境变量, 后续经常用到它。

platform-tools 其实是 android-sdk 的一部分, 独立安装了 android-sdk 的用户, 或已经通安装了 Android Studio 且从 AS 里安装了 android-sdk 的话, 找到 <android-sdk>/platform-tools 目录即可找到 adb。

4. 构建工具

4.1 android-ndk 自带了 cmake 支持

➜  ncv git:(main) ✗ tree ~/soft/android-ndk/r21e/build/cmake
/Users/zz/soft/android-ndk/r21e/build/cmake
├── abis.cmake
├── android.toolchain.cmake
├── platforms.cmake
└── system_libs.cmake1 directory, 4 files

为什么 ndk 要自带 cmake 这么一个目录呢? 因为 cmake 官方(曾经)野心勃勃, 想要提供各个平台的交叉编译支持。 当然我们知道 cmake 官方这些姥爷们是没法支持所有平台的, 所以他们说 “对于新平台,您得自己写 xxx.toolchain.cmake "。 小白用户自己写这样的文件, 难免掉坑里。

因此 android-ndk 官方提供了支持; 当然后来 android-ndk 官方也觉得有点维护不动了, 于是和 cmake 官方一起合作了。

对于 android-ndk 的新入坑选手, 只要知道, 自己单独安装一个 cmake 就行了:

https://cmake.org/download/

注意: 选择 binary 而不是 source, source 是源代码的意思。 至于为什么 cmake 官方把源代码放在开头, 因为它是开源软件! 开源软件务必提供源代码, 就这么简单。

4.2 ninja

ninja 比 make 的编译速度快。 ninja 是 make 的替代品。

cmake -G Ninja 这样使用。 没了。

哦,如果还有,你就是 CMAKE_MAKE_PROGRAM=$HOME/soft/ninja 来指定 ninja 可执行文件的路径。

ninja 官方介绍: https://ninja-build.org/

ninja 下载: https://github.com/ninja-build/ninja/releases

5. 写代码用什么?

  1. 代码可以从别人那里 copy, 也可以问 AI 生成

  2. 别的平台的代码怎么写, android-ndk 平台的代码就怎么写

  3. 那就…推荐用 VSCode

6. 总结

给出了一份还算稳妥的 android-ndk 开发环境入门说明。

相关文章:

  • 基于SpringBoot的漫画网站设计与实现
  • flink rocksdb状态说明
  • 组合两个表 --- MySQL [Leetcode 题目详解]
  • JavaScript篇:“解密JavaScript对象的诞生之旅:从new操作符到实例化全过程“
  • 使用注意力机制的seq2seq
  • 【SaaS多租架构】数据隔离与性能平衡
  • 【2025最新】AI绘画终极提示词库|MidjourneyStable Diffusion通用公式大全
  • Cisco Packet Tracer 选项卡的使用
  • 【神经网络与深度学习】普通自编码器和变分自编码器的区别
  • JavaScript 实现输入框的撤销功能
  • Spring Boot多模块划分设计
  • # 机器学习实操 第二部分 神经网络和深度学习 第12章 自定义模型和训练循环
  • 15届蓝桥杯国赛 立定跳远
  • 两次解析格式化字符串 + 使用SQLAlchemy的relationship执行任意命令 -- link-shortener b01lersCTF 2025
  • 【数据治理】数据架构设计
  • 时间同步服务核心知识笔记:原理、配置与故障排除
  • 详解RabbitMQ工作模式之发布订阅模式
  • Multi Agents Collaboration OS:专属多智能体构建—基于业务场景流程构建专属多智能体
  • 网络安全自动化:精准把握自动化边界,筑牢企业安全防
  • Redis的过期设置和策略
  • 媒体:不能让追求升学率,成为高中不双休的借口
  • 李公明 | 一周画记:生活就是抵抗
  • 谢承祥已任自然资源部总工程师
  • 黎巴嫩9年来首次举行地方选举
  • 国际观察丨澳大利亚新一届政府面临系列挑战
  • 金正恩视察重要坦克厂并强调更迭陆军装备