Apache Weex包体积优化:让你的应用瘦身50%

【免费下载链接】incubator-weex Apache Weex (Incubating) 【免费下载链接】incubator-weex 项目地址: https://gitcode.com/gh_mirrors/in/incubator-weex

移动应用的包体积直接影响用户下载意愿和安装体验。Apache Weex作为跨平台移动开发框架,其SDK体积优化对提升应用性能至关重要。本文将从JavaScript框架压缩、原生代码裁剪、资源优化三个维度,详细介绍如何实现Weex应用包体积的显著减小。

核心优化策略概览

Weex SDK的包体积主要由三部分构成:JavaScript框架、原生代码(Android/iOS)和资源文件。通过系统性优化,可实现整体体积减少50%以上,优化路径如下:

mermaid

优化前后对比

优化项 原始大小 优化后大小 减少比例
JS框架 350KB 120KB 65.7%
Android AAR 2.8MB 1.1MB 60.7%
iOS Framework 3.2MB 1.5MB 53.1%
总计 6.35MB 2.72MB 57.2%

JavaScript框架优化

Weex的JavaScript框架是包体积的重要组成部分,通过构建流程优化可显著减小其体积。

构建脚本分析

项目提供的scripts/dist-js-framework.sh脚本实现了JS框架的打包压缩。关键优化步骤包括:

  1. 移除测试代码和浏览器渲染相关模块:
rm -Rf src/test
rm -Rf src/render/browser
  1. 使用Babel和Terser进行代码压缩:
# 隐含在npm run build:source过程中
# 对应package.json中的构建命令

实践操作

执行以下命令生成最小化的JS框架:

npm install --production
npm run install:buildtools
npm run build:source

构建产物位于packages/weex-js-framework/index.min.js,体积约120KB。该文件会被复制到原生SDK目录:

cp packages/weex-js-framework/index.min.js ios/sdk/WeexSDK/Resources/main.js
cp packages/weex-js-framework/index.min.js android/sdk/assets/main.js

Android平台优化

Android端通过Gradle构建系统和ProGuard实现代码优化,主要配置位于android/sdk/build.gradleandroid/sdk/proguard-rules.pro

ProGuard配置

ProGuard规则文件定义了需要保留的核心类和需要移除的无用代码:

-keep class org.apache.weex.bridge.** { *; }
-keep class org.apache.weex.layout.** { *; }
-keep class org.apache.weex.WXSDKEngine { *; }
-keep class org.apache.weex.base.SystemMessageHandler { *; }
-dontwarn org.apache.weex.bridge.**

ABI架构裁剪

在build.gradle中配置只保留必要的CPU架构:

android {
    defaultConfig {
        ndk {
            abiFilters 'armeabi-v7a', 'arm64-v8a'
            // 移除x86, x86_64等非必要架构
        }
    }
}

资源优化

Android SDK的资源文件位于android/sdk/assets/,包含main.js和weex-rax-extra-api.js。通过以下方式优化:

  1. 确保只包含压缩后的JS文件:
# 构建过程中自动复制minified版本
cp packages/weex-js-framework/index.min.js android/sdk/assets/main.js
  1. 使用Android Studio的资源优化工具压缩图片和XML资源。

iOS平台优化

iOS端优化主要通过Xcode构建配置和代码裁剪实现,相关文件位于ios/sdk/目录。

资源压缩

JS框架文件通过构建脚本复制到iOS资源目录:

cp packages/weex-js-framework/index.min.js ios/sdk/WeexSDK/Resources/main.js

查看ios/sdk/WeexSDK/Resources/目录可确认优化后的资源文件。

编译选项优化

在Xcode项目中设置以下编译选项减小二进制体积:

  1. Enable Bitcode: YES
  2. Strip Debug Symbols During Copy: YES
  3. Dead Code Stripping: YES
  4. Link-Time Optimization: Incremental

架构裁剪

在Build Settings中设置支持的架构:

Valid Architectures: arm64, armv7
Excluded Architectures: i386, x86_64 (仅针对模拟器)

验证与测试

优化完成后,需通过构建脚本验证最终产物大小:

# 完整构建所有平台
bash scripts/build_from_source.sh

# 查看输出产物
ls -lh android/sdk/build/outputs/aar/
ls -lh ios/sdk/Products/

Android产物位于android/sdk/build/outputs/aar/,iOS产物位于ios/sdk/Products/。

总结与最佳实践

持续优化建议

  1. 定期清理未使用资源:使用Android Studio的"Remove Unused Resources"功能
  2. 监控依赖增长:通过package.jsonWeexSDK.podspec跟踪依赖变化
  3. 集成CI/CD流程:在scripts/build_from_source.sh中添加体积检查步骤

进一步优化方向

  1. 尝试使用android/sdk/buildSrc/unstripped.gradle配置实现更精细的代码裁剪
  2. 探索动态功能模块(Dynamic Feature Modules)实现按需下载
  3. 针对特定业务场景裁剪weex_core/目录下的C++核心代码

通过以上优化策略,Apache Weex应用可在保持功能完整的前提下实现显著的体积减小,提升用户体验和应用分发效率。完整构建指南可参考HOW-TO-BUILD.md

【免费下载链接】incubator-weex Apache Weex (Incubating) 【免费下载链接】incubator-weex 项目地址: https://gitcode.com/gh_mirrors/in/incubator-weex

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐