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

相关推荐
Kapaseker7 小时前
你不看会后悔的2025年终总结
android·kotlin
alexhilton10 小时前
务实的模块化:连接模块(wiring modules)的妙用
android·kotlin·android jetpack
ji_shuke10 小时前
opencv-mobile 和 ncnn-android 环境配置
android·前端·javascript·人工智能·opencv
sunnyday042612 小时前
Spring Boot 项目中使用 Dynamic Datasource 实现多数据源管理
android·spring boot·后端
幽络源小助理13 小时前
下载安装AndroidStudio配置Gradle运行第一个kotlin程序
android·开发语言·kotlin
inBuilder低代码平台14 小时前
浅谈安卓Webview从初级到高级应用
android·java·webview
豌豆学姐14 小时前
Sora2 短剧视频创作中如何保持人物一致性?角色创建接口教程
android·java·aigc·php·音视频·uniapp
白熊小北极14 小时前
Android Jetpack Compose折叠屏感知与适配
android
HelloBan14 小时前
setHintTextColor不生效
android
洞窝技术16 小时前
从0到30+:智能家居配网协议融合的实战与思考
android