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

相关推荐
阿巴斯甜13 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker13 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq952714 小时前
Andorid Google 登录接入文档
android
黄林晴15 小时前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab1 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿1 天前
Android MediaPlayer 笔记
android
Jony_1 天前
Android 启动优化方案
android
阿巴斯甜1 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇1 天前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_1 天前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android