HarmonyOS 鸿蒙Next中用不到的代码不打包进项目

HarmonyOS 鸿蒙Next中用不到的代码不打包进项目 harmony中怎么可以把用不到的代码直接不打到release包中?

3 回复

HarmonyOS项目在打包时,默认会把资源目录下的所有文件都包含进去,所以就算资源文件未被引用,也会被打包进应用。这是因为在打包过程中,编译器不会对资源文件的引用情况进行严格检查。打包的资源目录见资源目录以及资源组目录

【背景知识】
HarmonyOS项目打包时会包含以下主要目录及其内容:

  • 代码目录:
    ets目录:这里存放着项目的代码文件,像.ets或.ts文件以及pages文件。这些文件是应用页面逻辑和布局的文件,会被打包进应用。
  • 资源目录:
    资源目录的示例如下所示,base目录、限定词目录、rawfile目录、resfile目录称为资源目录,element、media、profile称为资源组目录,会被打包进应用。
  • libs目录:
    第三方库或本地二进制文件文件所在的目录,会被打包进应用。
    参考文档:资源分类与访问

更多关于HarmonyOS 鸿蒙Next中用不到的代码不打包进项目的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


鸿蒙Next通过Tree Shaking机制自动识别并移除未引用的代码模块。在构建过程中,编译器会分析ArkTS/TS组件、接口及资源的实际调用链,仅保留被主包或动态依赖的代码。开发时需确保模块化设计,避免全局隐式引用。HAP包生成时,未使用的公共能力接口和UI组件会被自动过滤,资源文件通过严格依赖检查实现按需打包。该过程基于HarmonyOS SDK的静态分析工具链完成,无需手动配置。

在HarmonyOS Next中,可以通过以下方式实现未使用代码的自动剔除:

  1. 开启ProGuard/R8代码优化: 在build-profile.json5中配置minifyEnabled为true:
"buildOption": {
  "externalNativeOptions": {
    "minifyEnabled": true
  }
}
  1. 使用条件编译: 通过预处理指令控制代码包含:
#if FEATURE_ENABLED
// 功能代码
#endif
  1. 模块化设计
  • 将可选功能拆分为独立har包
  • 在oh-package.json5中按需引入:
"dependencies": {
  "optional-feature": "file:../optional"
}
  1. 资源优化: 在app.json5中配置资源过滤规则:
"resourceFilter": {
  "exclude": ["unused_*/"]
}
  1. Hvigor配置: 在hvigorfile.ts中启用tree shaking:
compileOptions {
  minifyEnabled true
  shrinkResources true
}

发布构建时,构建工具会自动分析代码依赖关系,移除未被引用的类、方法和资源。建议定期使用DevEco Studio的Analyze工具检查未使用代码。

回到顶部