鸿蒙Harmony开发:NDK工程构建(CMake/DevEco Studio)

NDK通过CMake和Ninja编译应用的C/C++代码,编译过程如下图所示。

核心编译过程如下:

  1. 根据CMake配置脚本以及build-profile.json5中配置的externalNativeOptions构建参数,与缓存中的配置比对后,生成CMake命令并执行CMake。

  2. 执行Ninja,按照makefile执行编译和链接,将生成的.so以及运行时依赖的.so同步到输出目录,完成构建过程。

通过DevEco Studio提供的应用模板,可以快速生成CMake构建脚本模板,并在build-profile.json5中指定相关编译构建参数。

CMakeLists.txt

通过DevEco Studio模板工程创建的NDK工程中,包含默认生成的CMakeLists.txt脚本,如下所示:

# the minimum version of CMake.
cmake_minimum_required(VERSION 3.4.1)
project(MyApplication) 

# 定义一个变量,并赋值为当前模块cpp目录
set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})

# 添加头文件.h目录,包括cpp,cpp/include,告诉cmake去这里找到代码引入的头文件
include_directories(${NATIVERENDER_ROOT_PATH}
                    ${NATIVERENDER_ROOT_PATH}/include)

# 声明一个产物libentry.so,SHARED表示产物为动态库,hello.cpp为产物的源代码
add_library(entry SHARED hello.cpp)

# 声明产物entry链接时需要的三方库libace_napi.z.so
# 这里直接写三方库的名称是因为它是在ndk中,已在链接寻址路径中,无需额外声明
target_link_libraries(entry PUBLIC libace_napi.z.so)

默认的CMakeLists.txt脚本中添加了编译所需的源代码、头文件以及三方库,开发者可根据实际工程添加自定义编译参数、函数声明、简单的逻辑控制等。

externalNativeOptions

模块级build-profile.json5中externalNativeOptions参数是NDK工程C/C++文件编译配置的入口,可以通过path指定CMake脚本路径、arguments配置CMake参数、cppFlags配置C++编译器参数、abiFilters配置编译架构等。

"apiType": "stageMode",
"buildOption": {
  "arkOptions": {
   },
  "externalNativeOptions": {
    "path": "./src/main/cpp/CMakeLists.txt",
    "arguments": "",
    "cppFlags": "",
    "abiFilters": [
       "arm64-v8a",
       "armeabi-v7a",
       "x86_64"
    ],
  }
}

externalNativeOptions具体参数说明如下表所示。

配置项 类型 说明
path string CMake构建脚本地址,即CMakeLists.txt文件地址。
abiFilters array

本机的ABI编译环境,包括:

- arm64-v8a

- x86_64

如不配置该参数,编译时默认编译出arm64-v8a架构相关so。

arguments string CMake编译参数。
### 关于使用 DevEco Studio 和 C++ 开发 APK 软件 需要注意的是,DevEco Studio 主要用于开发 HarmonyOS 应用程序,并不是专门针对 Android APK 的开发工具[^2]。然而,在某些情况下,开发者可能希望利用该 IDE 中的一些特性来辅助跨平台或多操作系统支持的应用开发。 对于想要基于 C++ 创建可以在 Android 设备上运行的应用程序(即 APK 文件),通常推荐使用 Android Studio 或者其他更适合此目的的集成开发环境 (IDE),因为这些环境提供了更完善的对 Android 平台的支持和服务。 但是,如果确实希望通过 DevEco Studio 来尝试实现这一目标,则可以考虑以下几个方面: #### 1. 安装必要的组件和支持库 确保已经安装了最新版本的 DevEco Studio 及其内置或额外所需的 Java Development Kit (JDK)[^3]。虽然主要面向 HarmonyOS,但也可以配置 Gradle 构建系统以适应不同类型的项目需求。 #### 2. 设置交叉编译链 为了能够编写并编译 C/C++ 代码为目标架构(如 ARM),需要设置合适的 NDK(Native Development Kit)。这可以通过在项目的 `build.gradle` 文件中指定 ndk 版本以及 ABI 配置来完成: ```gradle android { ... defaultConfig { ... externalNativeBuild { cmake { cppFlags "-std=c++17" } } } externalNativeBuild { cmake { path "src/main/cpp/CMakeLists.txt" } } } ``` #### 3. 编写原生模块并与Java/Android部分交互 创建一个简单的 Hello World 程序作为起点,定义好入口函数和其他逻辑处理单元。接着通过 JNI 接口让 Java 层调用到本地方法,从而实现在应用程序内部执行高效的计算密集型任务或其他特定操作。 ```cpp #include <jni.h> #include <string> extern "C" JNIEXPORT jstring JNICALL Java_com_example_myapplication_MainActivity_stringFromJNI( JNIEnv* env, jobject /* this */) { std::string hello = "Hello from C++"; return env->NewStringUTF(hello.c_str()); } ``` 尽管上述过程理论上可行,但实际上由于缺乏官方文档指导和支持,可能会遇到较多困难和技术挑战。因此建议优先选择更加成熟稳定的解决方案来进行 Android APK 的开发工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值