在Android中,将 .cpp 文件编译成共享库(.so 文件)
1. 安装 Android NDKAndroid NDK Win10安装及环境变量配置(图文具体教程)
2. 创建项目结构
一般在AS你新建C++项目会默认如下结构目录,要是用现有项目,你也可以手动创建。
YourProject/
├── app/
│ ├── src/
│ │ ├── main/
│ │ │ ├── cpp/
│ │ │ │ ├── your_file.cpp
│ │ │ │ └── CMakeLists.txt
│ │ │ ├── java/
│ │ │ └── res/
│ ├── build.gradle
└── ...
3. 编写 CMakeLists.txt
在 cpp 文件夹中创建一个名为 CMakeLists.txt 的文件,该文件包含编译共享库的指令。
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 的支持。
android {
...
externalNativeBuild {
cmake {
path "src/main/cpp/CMakeLists.txt"
}
}
}
dependencies {
...
}
5. 同步项目
点击 Android Studio 顶部的 Sync Now 按钮,确保你的项目可以或许识别 CMake 配置。
6. 编译 .so 文件
[*]点击菜单 Build -> Make Project 或者 Rebuild Project。
[*]编译完成后, .so 文件会在 app/build/intermediates/cmake/ 目录下生成。
https://i-blog.csdnimg.cn/direct/da9dc684b9f54fc4ab3c543ed82d98a2.png#pic_center
新建的C++项目默认都有上面代码,无需任何操作。
7. Android.mk 和 CMakeLists.txt
简单介绍下Android.mk,由于在JNI开发中,看到过它的影子
Android.mk
[*]界说: Android.mk是Android NDK(Native Development Kit)中使用的Makefile文件。它界说了如何编译当地代码,生成共享库或可执行文件。
[*]构建体系: 依赖于GNU Make,比较传统,得当简单的项目。
结构
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.mkCMakeLists.txt构建体系GNU MakeCMake复杂度简单,得当小型项目得当大型项目和复杂构建跨平台支持限制良好支持当代特性不支持当代C++特性支持当代C++特性可读性对于复杂项目可读性较差更易读,更容易维护 简单概括,就是Android.mk过时了,一般在老项目中比较常见。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]