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。。。

5 回复

开发者您好,可以选中对应module右键new-C/C++ File(Napi),会自动建立相关的目录结构

更多关于HarmonyOS鸿蒙Next中新建静态包(static Library),未选择Enable native的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


关于在DevEco Studio中新建静态包(Static Library)模块时未勾选"Enable native"的问题,结合鸿蒙官方开发规范说明如下:

问题核心原因

在创建静态包模块时,如果未勾选 Enable native 选项:

  1. 模块结构缺失Native支持 生成的模块将不包含 cpp 目录及Native API相关文件(如 CMakeLists.txtnapi_init.cpp),导致无法开发或调用C++代码。

  2. 配置差异 未开启Native支持的模块配置文件中将缺少关键声明:

    // build-profile.json5 中缺失Native配置
    "buildOption": {
      "externalNativeOptions": {
        "path": "./src/main/cpp/CMakeLists.txt", // 此配置不会生成
        "abiFilters": ["arm64-v8a"]
      }
    }
    

解决方案

情况1:需添加Native能力 若后续需要调用C++代码,必须重新创建模块:

  1. 新建模块时操作

    • Configure New Module 界面勾选 Enable native
    • 确保模块类型为 Static Library
  2. 手动添加Native目录(不推荐) 修改现有模块结构风险较高,需同时调整以下文件:

    • src/main 下新建 cpp/types 目录1
    • 添加 CMakeLists.txtnapi_init.cpp 文件
    • build-profile.json5 中补全Native配置(易出错)

情况2:仅需ArkTS能力 若无需Native支持:

  1. 可继续使用当前模块 直接开发ArkUI组件和TS接口即可,例如:

    // Index.ets 导出组件
    @Component
    export struct MainPage {
      build() {
        Text("HAR Component").fontSize(16)
      }
    }
    
  2. 资源文件正常使用 资源目录 resources 和入口文件 Index.ets 不受影响

关键提醒

  • HAR依赖约束 如检索信息所述:“HAR自身的构建不建议引用本地模块,可能导致其他模块依赖该HAR包时安装失败”,若需修复需在工程级 oh-package.json5 配置 overrides
  • 产物安全性规则DevEco Studio NEXT Beta1(5.0.3.800) 起默认构建字节码HAR,此行为与Native配置无关。

建议:若需Native能力,请重新创建模块并勾选 Enable native,这是最安全可靠的方式。现有模块仅包含ArkTS代码时可保留使用。

参考:构建HAR-配置构建流程-构建应用 - 华为HarmonyOS开发者

在鸿蒙开发中,若创建 Static Library 模块时未勾选 Enable native,可通过以下步骤手动启用 Native 支持,无需新建模块:


📌 手动配置 Native 支持步骤

  1. 创建 Native 目录结构 在模块的 src/main/ 路径下新建 cpp 目录,用于存放 C++ 源码及头文件。

    your-module/
      └── src/main/
           ├── ets/     # 原有ArkTS代码
           └── cpp/     # 新建目录(需手动创建)
                ├── include/   # 存放对外暴露的头文件
                └── your_code.cpp  # C++源码文件
    
  2. 添加 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)
    
  3. 修改 build-profile.json5 在模块根目录的 build-profile.json5 中添加 Native 配置

    {
      "apiType": "stageModel",
      "buildOption": {
        "artifactType": "obfuscation"
      },
      "nativeLib": {  // 新增配置
        "debugSymbol": {
          "strip": true,
          "exclude": []
        },
        "headerPath": "src/main/cpp/include"  // 指向头文件目录
      }
    }
    

    关键项

    • headerPath:声明对外暴露的头文件路径(参考)。
  4. 配置模块依赖oh-package.json5 中声明 Native 库依赖(若需调用其他模块):

    {
      "dependencies": {
        "libyour_module.so": "file:./src/main/cpp/types/libyour_module",
        "other_native_module": "file:../other-module-path"
      }
    }
    
  5. 同步工程配置 在 DevEco Studio 中执行 Sync Project(或 Make Module),触发 Native 编译链生效。


⚠️ 注意事项

  1. 调试支持 若需源码调试,需在调试器中配置 .so 库路径(参考):

    set solib-search-path path/to/module/lib
    
  2. HAR 包兼容性 若模块将打包为 HAR,需确保:

    • Native 代码会编译为 .so 文件并自动放入 har/libs/cpp/ 目录(参考)。
    • 避免在 HAR 中引用本地模块,否则可能导致依赖安装失败。
  3. 版本要求 以上配置适用于 HarmonyOS 5.0.0+Stage 模型(API 10+)。


💡 验证是否生效

  1. 在 C++ 文件中编写测试函数(如 int add(int a, int b))。
  2. 在 ArkTS 中通过 import native from 'libyour_module.so' 调用该函数。
  3. 若调用成功且可调试,则 Native 支持已启用。

此方案通过手动补齐 Native 模块所需的目录和配置文件,实现与新建时勾选 Enable native 相同的效果(参考)。

在HarmonyOS Next中新建静态包时未勾选“Enable native”,表示创建的是纯ArkTS静态库。该库仅支持ArkTS语言开发,无法包含C/C++代码。静态库文件后缀为.ets,用于封装纯ArkTS的公共能力,供其他ArkTS工程引用。

在DevEco Studio中,如果已经创建了静态包(Static Library)模块但未启用Native(C/C++)支持,目前没有直接的图形界面选项可以“补开”这个配置。这是因为该配置在项目创建时决定了基础的项目结构和构建脚本。

不过,您可以手动修改模块的配置文件来为其添加Native支持,无需重新创建模块。主要操作步骤如下:

  1. 修改模块级的 build-profile.json5 文件: 打开您新建的静态包模块目录下的 build-profile.json5 文件。在 "buildOption" 部分,添加 "externalNativeOptions" 配置。示例如下:

    {
      "apiType": 'stageMode',
      "buildOption": {
        "externalNativeOptions": {
          "path": "./src/main/cpp/CMakeLists.txt", // 指定CMakeLists.txt文件的路径
          "arguments": "",
          "cppFlags": ""
        }
      },
      // ... 其他现有配置
    }
    
  2. 创建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}
          # 其他需要链接的库
      )
      
  3. 创建C/C++源文件: 在 cpp 目录下创建您的 .c.cpp 源文件(例如 native_lib.cpp),并开始编写Native代码。

  4. 同步项目: 完成上述文件修改和创建后,点击DevEco Studio右上角的 “Sync Now” 按钮同步项目。IDE会重新解析配置,并应用更改。

重要提示

  • 手动修改配置文件存在一定风险,请务必在操作前备份项目。
  • 同步后,请检查项目的 oh-package.json5 文件中是否已自动添加对 @ohos/napi 等可能需要的Native API包的依赖。如未自动添加,您可能需要手动添加。
  • 确保您的DevEco Studio已安装并配置好对应的Native开发工具链(如CMake)。

完成这些步骤后,您的静态库模块就应该具备了Native编译能力,可以在其中编写C/C++代码了。

回到顶部