在Android中,将 .cpp 文件编译成共享库(.so 文件)

1. 安装 Android NDK

Android NDK Win10安装及环境变量配置(图文详细教程)

2. 创建项目结构

一般在AS你新建C++项目会默认如下结构目录,要是用现有项目,你也可以手动创建。

c 复制代码
YourProject/
├── app/
│   ├── src/
│   │   ├── main/
│   │   │   ├── cpp/
│   │   │   │   ├── your_file.cpp
│   │   │   │   └── CMakeLists.txt
│   │   │   ├── java/
│   │   │   └── res/
│   ├── build.gradle
└── ...

3. 编写 CMakeLists.txt

在 cpp 文件夹中创建一个名为 CMakeLists.txt 的文件,该文件包含编译共享库的指令。

c++ 复制代码
cmake_minimum_required(VERSION 3.18.1)

# 指定要编译的源文件
add_library( # Sets the name of the library.
             my_native_lib

             # Sets the library as a shared library.
             SHARED

             # Provides a relative path to your source file(s).
             your_file.cpp )

# 指定要链接的库
find_library( # Sets the name of the path variable.
              log-lib

              # Specifies the name of the log library.
              log )

# 指定要链接的库
target_link_libraries( # Specifies the target library.
                       my_native_lib

                       # Links the target library to the log library
                       # included in the NDK.
                       ${log-lib} )

4. 修改 build.gradle

在 app 目录下的 build.gradle 文件中,确保添加 CMake 的支持。

c 复制代码
android {
    ...

    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
        }
    }
}

dependencies {
    ...
}

5. 同步项目

点击 Android Studio 顶部的 Sync Now 按钮,确保你的项目能够识别 CMake 配置。

6. 编译 .so 文件

  1. 点击菜单 Build -> Make Project 或者 Rebuild Project
  2. 编译完成后, .so 文件会在 app/build/intermediates/cmake/ 目录下生成。

新建的C++项目默认都有上面代码,无需任何操作。

7. Android.mk 和 CMakeLists.txt

简单介绍下Android.mk,因为在JNI开发中,看到过它的影子

Android.mk

  • 定义: Android.mkAndroid NDK(Native Development Kit)中使用的Makefile文件。它定义了如何编译本地代码,生成共享库或可执行文件。
  • 构建系统: 依赖于GNU Make,比较传统,适合简单的项目。

结构

c 复制代码
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE := my_native_lib
LOCAL_SRC_FILES := my_native_lib.cpp
LOCAL_C_INCLUDES := $(LOCAL_PATH)/include

include $(BUILD_SHARED_LIBRARY)

CMakeLists.txt

  • 定义: CMakeLists.txt是CMake构建系统的配置文件。CMake是一个跨平台的构建系统生成工具,能够生成本地构建文件(如Makefile或Visual Studio项目文件)。
  • 构建系统: 比Make更现代化,提供更多功能,适合大规模和复杂的项目。

总结

特性 Android.mk CMakeLists.txt
构建系统 GNU Make CMake
复杂度 简单,适合小型项目 适合大型项目和复杂构建
跨平台支持 限制 良好支持
现代特性 不支持现代C++特性 支持现代C++特性
可读性 对于复杂项目可读性较差 更易读,更容易维护

简单概括,就是Android.mk过时了,一般在老项目中比较常见。

相关推荐
走在路上的菜鸟11 分钟前
Android学Dart学习笔记第二十五节 类修饰符
android·笔记·学习·flutter
灵感菇_34 分钟前
Android ContentProvider全面解析
android·通信·四大组件·contentprovider
2501_9159214336 分钟前
分析 iOS 描述文件创建与管理中常见的问题
android·ios·小程序·https·uni-app·iphone·webview
杜子不疼.41 分钟前
【Linux】进程控制(三):进程程序替换机制与替换函数详解
android·linux·运维
allk551 小时前
Android 性能优化深水区:电量与网络架构演进
android·网络·性能优化
ZFJ_张福杰3 小时前
【技术深度】金融 / 钱包级 Android 安全性架构(毒APP)
android·安全·金融·架构·签名证书
Bigger9 小时前
Flutter 开发实战:解决华为 HarmonyOS 任务列表不显示 App 名称的终极指南
android·flutter·华为
利剑 -~12 小时前
mysql面试题整理
android·数据库·mysql
梁同学与Android14 小时前
Android ---【经验篇】ArrayList vs CopyOnWriteArrayList 核心区别,怎么选择?
android·java·开发语言
沐怡旸14 小时前
【翻译】adb screenrecord 帮助文档
android