HarmonyOS鸿蒙Next中如何减小module中so库大小

HarmonyOS鸿蒙Next中如何减小module中so库大小 工程的app中module.json5可以配置参数压缩so库大小,那如何在自己开发的module库(static library)中配置来减小so库大小? “compressNativeLibs”: true这个在module中没法使用,是只能在非har的主工程里使用吗?

app中的配置示例:

{
  "module": {
    // ...
    "compressNativeLibs": true // 标识libs库以压缩存储方式打包
  }
}
3 回复

升级至4.1 Canary2后,如果需要以压缩方式打包so库,可以设置module.json5配置文件中的compressNativeLibs参数为true。

适配IDE 5.0.3.200 ROM:3.0.0.18 以上才支持,看下是不是版本低导致的。

升级至4.1 Canary2后,打包工具默认以不压缩方式打包so库,应用中如果使用了so库,这个变更会导致默认行为下打出的包增大。由于包大小不能超过4G的限制(否则将导致签名失败),若增大后的包超出4G,将出现签名失败:

{
  "module": {
    "name": "entry",
    "type": "entry",
    "mainElement": "EntryAbility",
    "deviceTypes": [
      "phone"
    ],
    "compressNativeLibs": true,
    "deliveryWithInstall": true,
    "pages": "$profile:main_pages",
    "abilities": [
    ]
  }
}

在DevEco中,可以看到compressNativeLibs的解释如下: Specifies whether the libs libraries of the .hap file are compressed for storage. If this attribute is set to false, the libs libraries are stored without being compressed and will be directly loaded during the installation of the .hap file har包只是APP的中间产物,其在打包hap时才会对so根据参数决定是否压缩。compressNativeLibs适用于:shared、entry、feature类型的模块

更多关于HarmonyOS鸿蒙Next中如何减小module中so库大小的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,减小module中so库大小的方法包括:

  1. 代码优化:通过删除未使用的代码和函数,减少冗余代码,优化算法和数据结构来减小so库体积。

  2. 编译选项:使用编译器优化选项如-Os(优化大小)或-Oz(更激进的优化大小),减少生成代码的体积。

  3. 剥离调试信息:在发布版本中移除调试信息,使用strip命令或编译选项s来剥离调试信息。

  4. 使用静态链接:尽量使用静态链接而非动态链接,减少so库的依赖,从而减小体积。

  5. 压缩资源:对so库中的资源文件进行压缩,使用压缩算法如LZMA或Zstandard减小资源文件大小。

  6. 拆分库:将大型so库拆分成多个较小的库,按需加载,减少单个库的体积。

  7. 使用更小的库:选择功能相同但体积更小的第三方库替代现有库。

  8. 移除未使用的依赖:检查并移除未使用的依赖库,减少so库的依赖链。

  9. 优化链接器脚本:通过调整链接器脚本,控制符号和段的对齐方式,减少不必要的填充。

  10. 使用精简的C库:选择更精简的C库实现,如musl libc,替代glibc,减小库的体积。

以上方法可有效减小HarmonyOS鸿蒙Next中module的so库大小。

在HarmonyOS鸿蒙Next中减小module中so库大小,可采取以下措施:

  1. 代码优化:精简代码,移除冗余函数和未使用的代码段,减少so库的体积。

  2. 编译器优化:使用编译器优化选项,如GCC的-Os-Oz,以减小生成的二进制文件大小。

  3. 剥离调试信息:在发布版本中移除调试信息,使用strip命令剥离so库中的调试符号。

  4. 依赖管理:减少不必要的依赖库,避免引入过多第三方库,从而控制so库的总体大小。

  5. 代码复用:尽可能复用已有的代码和库,减少重复代码的引入。

通过上述方法,可以有效减小module中so库的大小,提升应用的加载和运行效率。

回到顶部