HarmonyOS鸿蒙Next中新建静态包(static Library),未选择Enable native
HarmonyOS鸿蒙Next中新建静态包(static Library),未选择Enable native devceo studio中file里面new了一个新的module,选择了static Library,但是没有选择Enable native。直接新建了。怎么在这个新module中重新选择把这个Enable native选择打开。不想重新再建一个module。。。
开发者您好,可以选中对应module右键new-C/C++ File(Napi),会自动建立相关的目录结构
更多关于HarmonyOS鸿蒙Next中新建静态包(static Library),未选择Enable native的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在鸿蒙开发中,若创建 Static Library 模块时未勾选 Enable native,可通过以下步骤手动启用 Native 支持,无需新建模块:
📌 手动配置 Native 支持步骤
-
创建 Native 目录结构 在模块的
src/main/路径下新建cpp目录,用于存放 C++ 源码及头文件。your-module/ └── src/main/ ├── ets/ # 原有ArkTS代码 └── cpp/ # 新建目录(需手动创建) ├── include/ # 存放对外暴露的头文件 └── your_code.cpp # C++源码文件 -
添加 CMake 配置文件 在
cpp目录下创建CMakeLists.txt文件,配置 Native 库的编译规则:cmake_minimum_required(VERSION 3.4.1) project(your_module_name) # 替换为实际模块名 add_library(${PROJECT_NAME} SHARED your_code.cpp) target_link_libraries(${PROJECT_NAME} PUBLIC libace_napi.z.so) -
修改
build-profile.json5在模块根目录的build-profile.json5中添加 Native 配置:{ "apiType": "stageModel", "buildOption": { "artifactType": "obfuscation" }, "nativeLib": { // 新增配置 "debugSymbol": { "strip": true, "exclude": [] }, "headerPath": "src/main/cpp/include" // 指向头文件目录 } }关键项:
headerPath:声明对外暴露的头文件路径(参考)。
-
配置模块依赖 在
oh-package.json5中声明 Native 库依赖(若需调用其他模块):{ "dependencies": { "libyour_module.so": "file:./src/main/cpp/types/libyour_module", "other_native_module": "file:../other-module-path" } } -
同步工程配置 在 DevEco Studio 中执行 Sync Project(或 Make Module),触发 Native 编译链生效。
⚠️ 注意事项
-
调试支持 若需源码调试,需在调试器中配置
.so库路径(参考):set solib-search-path path/to/module/lib -
HAR 包兼容性 若模块将打包为 HAR,需确保:
- Native 代码会编译为
.so文件并自动放入har/libs/cpp/目录(参考)。 - 避免在 HAR 中引用本地模块,否则可能导致依赖安装失败。
- Native 代码会编译为
-
版本要求 以上配置适用于 HarmonyOS 5.0.0+ 及 Stage 模型(API 10+)。
💡 验证是否生效
- 在 C++ 文件中编写测试函数(如
int add(int a, int b))。 - 在 ArkTS 中通过
import native from 'libyour_module.so'调用该函数。 - 若调用成功且可调试,则 Native 支持已启用。
此方案通过手动补齐 Native 模块所需的目录和配置文件,实现与新建时勾选 Enable native 相同的效果(参考)。
在HarmonyOS Next中新建静态包时未勾选“Enable native”,表示创建的是纯ArkTS静态库。该库仅支持ArkTS语言开发,无法包含C/C++代码。静态库文件后缀为.ets,用于封装纯ArkTS的公共能力,供其他ArkTS工程引用。
在DevEco Studio中,如果已经创建了静态包(Static Library)模块但未启用Native(C/C++)支持,目前没有直接的图形界面选项可以“补开”这个配置。这是因为该配置在项目创建时决定了基础的项目结构和构建脚本。
不过,您可以手动修改模块的配置文件来为其添加Native支持,无需重新创建模块。主要操作步骤如下:
-
修改模块级的
build-profile.json5文件: 打开您新建的静态包模块目录下的build-profile.json5文件。在"buildOption"部分,添加"externalNativeOptions"配置。示例如下:{ "apiType": 'stageMode', "buildOption": { "externalNativeOptions": { "path": "./src/main/cpp/CMakeLists.txt", // 指定CMakeLists.txt文件的路径 "arguments": "", "cppFlags": "" } }, // ... 其他现有配置 } -
创建Native源码目录与CMakeLists.txt:
- 在模块的
src/main/目录下,创建cpp文件夹。这将是您存放C/C++源码的地方。 - 在刚创建的
cpp文件夹内,创建一个CMakeLists.txt文件。这是CMake的构建脚本。一个最基本的内容示例如下:cmake_minimum_required(VERSION 3.4.1) project(your_library_name) # 建议改为您的库名 add_library(your_library_name SHARED # 在此处添加您的 .cpp 源文件,例如: # native_lib.cpp ) # 查找并链接必要的库,例如 libace_napi.z.so find_library(log-lib log) target_link_libraries(your_library_name ${log-lib} # 其他需要链接的库 )
- 在模块的
-
创建C/C++源文件: 在
cpp目录下创建您的.c或.cpp源文件(例如native_lib.cpp),并开始编写Native代码。 -
同步项目: 完成上述文件修改和创建后,点击DevEco Studio右上角的 “Sync Now” 按钮同步项目。IDE会重新解析配置,并应用更改。
重要提示:
- 手动修改配置文件存在一定风险,请务必在操作前备份项目。
- 同步后,请检查项目的
oh-package.json5文件中是否已自动添加对@ohos/napi等可能需要的Native API包的依赖。如未自动添加,您可能需要手动添加。 - 确保您的DevEco Studio已安装并配置好对应的Native开发工具链(如CMake)。
完成这些步骤后,您的静态库模块就应该具备了Native编译能力,可以在其中编写C/C++代码了。


