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

相关推荐
高林雨露35 分钟前
RecyclerView中跳转到最后一条item并确保它在可视区域内显示
android
移动开发者1号3 小时前
ReLinker优化So库加载指南
android·kotlin
山野万里__3 小时前
C++与Java内存共享技术:跨平台与跨语言实现指南
android·java·c++·笔记
Huckings3 小时前
Android 性能问题
android
移动开发者1号3 小时前
剖析 Systrace:定位 UI 线程阻塞的终极指南
android·kotlin
移动开发者1号3 小时前
深入解析内存抖动:定位与修复实战(Kotlin版)
android·kotlin
whysqwhw3 小时前
OkHttp深度架构缺陷分析与革命性演进方案
android
Digitally5 小时前
如何将文件从 iPhone 传输到 Android(新指南)
android·ios·iphone
whysqwhw6 小时前
OkHttp深度架构缺陷分析与演进规划
android
用户7093722538516 小时前
Android14 SystemUI NotificationShadeWindowView 加载显示过程
android