在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过时了,一般在老项目中比较常见。

相关推荐
唐诺4 分钟前
android MQTT使用示例
android·mqtt
菠菠萝宝5 分钟前
【YOLOv8】安卓端部署-1-项目介绍
android·java·c++·yolo·目标检测·目标跟踪·kotlin
main_Java5 分钟前
Android7点开语言直接显示语言偏好设置
android
iOSTianNan9 分钟前
[RN -Android] waiting for debugger 问题解决
android
IT生活课堂21 分钟前
Android智能座舱,视频播放场景,通过多指滑屏退回桌面,闪屏问题的另一种解法
android·智能手机·汽车
竹言笙熙39 分钟前
极客大挑战2024wp
android
main_Java1 小时前
Android解压zip文件到指定目录
android·java·开发语言
Sgq丶1 小时前
Android 13 aosp Launcher 隐藏“壁纸和样式“入口
android·aosp·launcher3
Crossoads2 小时前
【汇编语言】call 和 ret 指令(一) —— 探讨汇编中的ret和retf指令以及call指令及其多种转移方式
android·开发语言·javascript·汇编·人工智能·数据挖掘·c#
老码沉思录7 小时前
Android开发实战班 -应用架构 - MVVM 架构模式
android·架构