NDK工程构建中“预构建库”是什么?

NDK工程构建中“预构建库”是什么?

NDK
NDK工程构建
NAPI
预构建库
C/C++
7天前
195浏览
1
收藏 1
回答 1
待解决
回答 1
按赞同
/
按时间
HMOS_Professor
1

定义

预构建库指的是已经提前编译好的库文件。这些库文件能够直接在 HarmonyOS Next 的 NDK 项目中使用,无需再对其源代码进行重新编译。在 HarmonyOS Next 开发中,预构建库可以是静态库(.a 文件),也可以是共享库(.so 文件)。


作用

  • 提高开发效率:借助预构建库,开发者无需每次构建项目时都重新编译这些库,从而节省了构建时间,提高了开发效率。
  • 代码复用与保护:开发者可以将自己开发的库以预构建的形式分发给其他开发者,而无需提供源代码,既实现了代码复用,又保护了知识产权。
  • 依赖管理:方便管理项目依赖,使得项目结构更加清晰。不同的模块可以依赖不同的预构建库,减少了模块之间的耦合度。

使用方式

  1. 配置 CMakeLists.txt:如果你使用 CMake 来构建项目,需要在​​CMakeLists.txt​​文件中添加对预构建库的引用。以下是一个简单示例:


cmake

# 设置最低CMake版本
cmake_minimum_required(VERSION 3.10.2)

# 设置项目名称
project("MyNativeApp")

# 添加预构建的共享库
add_library( # 库的名称
             my-prebuilt-lib
             # 预构建库的类型,这里是共享库
             SHARED
             # 预构建库的路径
             IMPORTED )

# 设置预构建库的路径
set_target_properties( # 目标库
                       my-prebuilt-lib
                       PROPERTIES IMPORTED_LOCATION
                       # 预构建库的实际路径
                       ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libmy-prebuilt-lib.so )

# 添加本地源文件
add_library( # 库的名称
             native-lib
             # 库的类型,这里是共享库
             SHARED
             # 本地源文件的路径
             native-lib.cpp )

# 查找系统库
find_library( # 库的名称
              log-lib
              # 系统库的名称
              log )

# 链接库
target_link_libraries( # 目标库
                       native-lib
                       # 链接预构建库
                       my-prebuilt-lib
                       # 链接系统库
                       ${log-lib} )
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.


在这个示例中,​​my-prebuilt-lib​​ 是预构建的共享库,通过 ​​add_library​​ 和 ​​set_target_properties​​ 来引用它,并将其链接到本地库 ​​native-lib​​ 上。


  1. 配置 BUILD.gn:如果使用 GN 构建系统,也需要在​​BUILD.gn​​文件中添加相应的配置。以下是一个简单示例:


gn

import("//build/ohos.gni")

# 定义预构建库目标
ohos_prebuilt_shared_library("my-prebuilt-lib") {
  source = "libs/${target_cpu}/libmy-prebuilt-lib.so"
}

# 定义本地库目标
ohos_shared_library("native-lib") {
  sources = [
    "native-lib.cpp",
  ]
  deps = [
    ":my-prebuilt-lib",
    "//third_party/harmonyos:log",
  ]
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.


在这个示例中,​​my-prebuilt-lib​​ 是预构建的共享库,通过 ​​ohos_prebuilt_shared_library​​ 来引用它,并将其添加到 ​​native-lib​​ 的依赖中。

注意事项

  • ABI 兼容性:要保证预构建库的 ABI(Application Binary Interface)与目标设备的 ABI 相匹配。HarmonyOS 支持多种 ABI,如 arm64-v8a、armeabi-v7a 等,需要选择正确的库文件。
  • 版本兼容性:确保预构建库的版本与 HarmonyOS Next SDK 的版本兼容,避免出现不兼容的问题。
分享
微博
QQ
微信
回复
7天前


相关问题
常用的NDK工程构建方式有哪些?
147浏览 • 2回复 待解决
使用命令行CMake构建NDK工程
1660浏览 • 1回复 待解决
HarmonyOS 如何构建跨动态的单例?
994浏览 • 1回复 待解决
DevEco构建Hap和APP有什么区别?
17027浏览 • 1回复 待解决
如何构建数据ORM增删改查基础能力
2367浏览 • 1回复 待解决
HarmonyOS Hvigor 编译构建
911浏览 • 1回复 待解决
恭喜您,今日已阅读两篇内容,特奖励+2声望, 快来领取吧。