uniapp开发鸿蒙:打包发布与上架实战

引入:应用发布的关键环节

经过前期的开发、优化和调试,我们的应用已经具备了上线的条件。本章将系统讲解uniapp鸿蒙应用的打包、签名、发布全流程,帮助您顺利完成应用上架。

一、应用打包配置

1.1 manifest.json配置

基础配置

{
  "name": "MyApp",
  "appid": "__UNI__ABCDEFG",
  "description": "我的应用描述",
  "versionName": "1.0.0",
  "versionCode": "100",
  "transformPx": false,
  "app-plus": {
    "usingComponents": true,
    "nvueStyleCompiler": "uni-app",
    "compilerVersion": 3,
    "splashscreen": {
      "autoclose": true,
      "waiting": true
    },
    "modules": {},
    "distribute": {
      "android": {
        "permissions": [
          "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>",
          "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>",
          "<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>",
          "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>"
        ]
      },
      "ios": {},
      "sdkConfigs": {}
    }
  },
  "harmony": {
    "appId": "com.example.myapp",
    "appName": "MyApp",
    "versionName": "1.0.0",
    "versionCode": 100,
    "minPlatformVersion": 9,
    "compileSdkVersion": 9,
    "targetSdkVersion": 9,
    "requestPermissions": [
      {
        "name": "ohos.permission.CAMERA"
      },
      {
        "name": "ohos.permission.READ_MEDIA"
      },
      {
        "name": "ohos.permission.WRITE_MEDIA"
      },
      {
        "name": "ohos.permission.INTERNET"
      }
    ]
  },
  "quickapp": {},
  "mp-weixin": {
    "appid": "wx1234567890",
    "setting": {
      "urlCheck": false
    },
    "usingComponents": true
  },
  "mp-alipay": {
    "usingComponents": true
  },
  "mp-baidu": {
    "usingComponents": true
  },
  "mp-toutiao": {
    "usingComponents": true
  },
  "mp-lark": {
    "usingComponents": true
  },
  "mp-qq": {
    "usingComponents": true
  },
  "mp-kuaishou": {
    "usingComponents": true
  },
  "mp-jd": {
    "usingComponents": true
  },
  "mp-xhs": {
    "usingComponents": true
  },
  "vueVersion": "3"
}

1.2 环境配置

环境变量配置

// config/env.js
const config = {
  // 开发环境
  development: {
    baseURL: 'https://dev-api.example.com',
    appId: 'dev_app_id'
  },
  // 测试环境
  test: {
    baseURL: 'https://test-api.example.com',
    appId: 'test_app_id'
  },
  // 生产环境
  production: {
    baseURL: 'https://api.example.com',
    appId: 'prod_app_id'
  }
}

export default config[process.env.NODE_ENV || 'development']

package.json脚本配置

{
  "scripts": {
    "dev": "cross-env NODE_ENV=development UNI_PLATFORM=h5 npm run dev:h5",
    "dev:h5": "uni -p h5",
    "dev:app": "uni -p app",
    "dev:mp-weixin": "uni -p mp-weixin",
    "dev:harmony": "uni -p harmony",
    "build": "cross-env NODE_ENV=production UNI_PLATFORM=h5 npm run build:h5",
    "build:h5": "uni build -p h5",
    "build:app": "uni build -p app",
    "build:mp-weixin": "uni build -p mp-weixin",
    "build:harmony": "uni build -p harmony",
    "build:all": "npm run build:h5 && npm run build:app && npm run build:mp-weixin && npm run build:harmony"
  }
}

二、鸿蒙应用打包

2.1 生成签名证书

使用DevEco Studio生成证书

  1. 打开DevEco Studio
  2. 选择File → Project Structure → Signing Configs
  3. 点击"+"创建新证书
  4. 填写证书信息: Key Alias:证书别名 Key Password:密钥密码 Certificate:证书文件 Store Password:存储密码

使用命令行生成证书

# 生成密钥库
keytool -genkeypair -alias "myapp" -keyalg RSA -keysize 2048 -validity 36500 -keystore myapp.keystore

# 查看证书信息
keytool -list -v -keystore myapp.keystore

2.2 配置签名信息

在manifest.json中配置签名

{
  "app-plus": {
    "distribute": {
      "harmony": {
        "signingConfigs": {
          "release": {
            "storeFile": "myapp.keystore",
            "storePassword": "your_password",
            "keyAlias": "myapp",
            "keyPassword": "your_password"
          }
        }
      }
    }
  }
}

环境变量方式配置(推荐):

# 创建.env文件
HARMONY_STORE_FILE=myapp.keystore
HARMONY_STORE_PASSWORD=your_password
HARMONY_KEY_ALIAS=myapp
HARMONY_KEY_PASSWORD=your_password

2.3 执行打包命令

HBuilderX可视化打包

  1. 点击菜单:发行 → 原生App-云打包
  2. 选择鸿蒙平台
  3. 选择证书配置
  4. 点击打包

命令行打包

# 开发环境打包
npm run build:harmony

# 生产环境打包
cross-env NODE_ENV=production npm run build:harmony

云打包

# 使用HBuilderX云打包
uni build --platform harmony --cloud

# 指定包名和版本
uni build --platform harmony --appid com.example.myapp --version 1.0.0

2.4 打包产物说明

打包完成后,在unpackage/dist/build/harmony目录下生成:

  • app.hap:应用安装包
  • app-debug.hap:调试包
  • app-release.hap:发布包
  • app-release.zip:发布压缩包(包含签名信息)

三、应用签名与加固

3.1 应用签名

手动签名

# 使用hdc工具签名
hdc app install --sign --key myapp.keystore --alias myapp app-release.hap

# 查看签名信息
hdc app info --sign app-release.hap

自动签名配置

{
  "scripts": {
    "sign": "hdc app install --sign --key $HARMONY_STORE_FILE --alias $HARMONY_KEY_ALIAS app-release.hap",
    "build:sign": "npm run build:harmony && npm run sign"
  }
}

3.2 应用加固

使用华为应用市场加固服务

  1. 登录华为开发者联盟
  2. 进入"应用服务" → “应用安全”
  3. 上传应用包进行加固
  4. 下载加固后的应用包

加固配置选项

  • 防反编译:保护代码逻辑
  • 防调试:防止动态调试
  • 防篡改:检测应用完整性
  • 防二次打包:防止重签名

3.3 签名验证

验证签名信息

# 查看签名证书信息
hdc app info --sign app-release.hap

# 验证签名有效性
hdc app verify app-release.hap

四、鸿蒙应用上架

4.1 准备上架材料

基本信息

  • 应用名称(中英文)
  • 应用图标(512×512像素)
  • 应用截图(至少3张)
  • 应用描述(中英文)
  • 应用分类
  • 隐私政策链接
  • 服务协议链接

版本信息

  • 版本号(1.0.0)
  • 版本描述(更新内容)
  • 应用包(.hap文件)
  • 最低系统版本要求

其他材料

  • 测试账号(如有需要)
  • 演示视频(可选)
  • 版权证明(如有)

4.2 创建应用

登录华为开发者联盟

  1. 访问 https://developer.huawei.com
  2. 使用华为账号登录
  3. 进入"管理中心"

创建应用

  1. 点击"创建应用"
  2. 选择"HarmonyOS应用"
  3. 填写应用基本信息
  4. 上传应用图标和截图
  5. 选择应用分类
  6. 填写应用描述

4.3 提交审核

上传应用包

  1. 进入应用详情页
  2. 点击"版本管理"
  3. 点击"上传新版本"
  4. 上传.hap文件
  5. 填写版本信息

配置发布信息

  1. 选择发布方式(全量发布/灰度发布)
  2. 设置发布时间(立即发布/定时发布)
  3. 选择发布渠道(应用市场/自有渠道)
  4. 设置更新类型(强制更新/可选更新)

提交审核

  1. 确认所有信息无误
  2. 点击"提交审核"
  3. 等待审核结果(通常1-3个工作日)

4.4 审核注意事项

常见审核不通过原因

  • 应用名称与图标不符合规范
  • 应用功能与描述不符
  • 存在安全漏洞
  • 隐私政策不完善
  • 应用存在崩溃或严重bug
  • 包含违规内容

审核加速建议

  • 提供详细的测试账号
  • 录制功能演示视频
  • 提前进行自测和兼容性测试
  • 确保隐私政策完整且可访问

五、版本更新管理

5.1 热更新机制

配置热更新

{
  "app-plus": {
    "distribute": {
      "autoupdate": true,
      "update": {
        "ios": {
          "url": "https://your-cdn.com/update/ios.json"
        },
        "android": {
          "url": "https://your-cdn.com/update/android.json"
        },
        "harmony": {
          "url": "https://your-cdn.com/update/harmony.json"
        }
      }
    }
  }
}

更新配置文件

{
  "version": "1.0.1",
  "name": "1.0.1版本更新",
  "description": "修复已知问题,优化用户体验",
  "download_url": "https://your-cdn.com/update/app.wgt",
  "force_update": false,
  "min_uni_version": "3.0.0"
}

5.2 版本回滚

回滚配置

// 检查更新
uni.getUpdateManager().onCheckForUpdate((res) => {
  if (res.hasUpdate) {
    // 有新版本
    console.log('发现新版本:', res.version)
  }
})

// 更新失败处理
uni.getUpdateManager().onUpdateFailed(() => {
  // 更新失败,可以回滚到上一版本
  console.log('更新失败')
})

5.3 灰度发布

配置灰度发布

{
  "app-plus": {
    "distribute": {
      "harmony": {
        "gray": {
          "percentage": 10,
          "userIds": ["user1", "user2"]
        }
      }
    }
  }
}

六、应用监控与分析

6.1 应用性能监控

集成华为分析服务

// 安装SDK
npm install @huawei/hms-analytics

// 初始化
import { HMSAnalytics } from '@huawei/hms-analytics'

HMSAnalytics.init({
  appId: 'your_app_id',
  enableLog: true
})

// 上报事件
HMSAnalytics.onEvent('purchase', {
  product_id: '123',
  price: 99.9
})

// 上报错误
HMSAnalytics.onError('network_error', {
  url: 'https://api.example.com',
  status: 404
})

6.2 用户行为分析

自定义事件埋点

// utils/track.js
export const track = {
  // 页面访问
  pageView(pageName) {
    HMSAnalytics.onEvent('page_view', { page_name: pageName })
  },
  
  // 按钮点击
  buttonClick(buttonName) {
    HMSAnalytics.onEvent('button_click', { button_name: buttonName })
  },
  
  // 购买事件
  purchase(productId, price) {
    HMSAnalytics.onEvent('purchase', {
      product_id: productId,
      price: price
    })
  }
}

6.3 崩溃监控

集成崩溃监控

// 监听全局错误
uni.onError((error) => {
  console.error('应用错误:', error)
  // 上报错误
  HMSAnalytics.onError('app_error', {
    message: error.message,
    stack: error.stack
  })
})

// 监听Promise错误
window.addEventListener('unhandledrejection', (event) => {
  console.error('Promise错误:', event.reason)
  HMSAnalytics.onError('promise_error', {
    reason: event.reason
  })
})

七、多平台发布策略

7.1 平台差异化配置

条件编译配置

// #ifdef HARMONYOS
// 鸿蒙平台特有配置
const config = {
  baseURL: 'https://harmony-api.example.com'
}
// #endif

// #ifdef APP-PLUS
// App平台配置
const config = {
  baseURL: 'https://app-api.example.com'
}
// #endif

// #ifdef H5
// H5平台配置
const config = {
  baseURL: 'https://h5-api.example.com'
}
// #endif

平台特定代码

export const getPlatformConfig = () => {
  // #ifdef HARMONYOS
  return {
    platform: 'harmony',
    version: '1.0.0'
  }
  // #endif
  
  // #ifdef APP-PLUS
  return {
    platform: 'app',
    version: '1.0.0'
  }
  // #endif
  
  // #ifdef H5
  return {
    platform: 'h5',
    version: '1.0.0'
  }
  // #endif
}

7.2 统一发布流程

自动化发布脚本

{
  "scripts": {
    "release:harmony": "npm run build:harmony && npm run sign && node scripts/upload-harmony.js",
    "release:app": "npm run build:app && node scripts/upload-app.js",
    "release:h5": "npm run build:h5 && node scripts/upload-h5.js",
    "release:all": "npm run release:harmony && npm run release:app && npm run release:h5"
  }
}

上传脚本示例

// scripts/upload-harmony.js
const fs = require('fs')
const path = require('path')
const { execSync } = require('child_process')

const appPath = path.join(__dirname, '../unpackage/dist/build/harmony/app-release.hap')

if (fs.existsSync(appPath)) {
  console.log('开始上传鸿蒙应用包...')
  // 执行上传命令
  execSync('hdc app install app-release.hap')
  console.log('上传成功')
} else {
  console.error('应用包不存在,请先执行打包')
  process.exit(1)
}

八、总结与最佳实践

8.1 发布流程总结

完整的发布流程

  1. 开发阶段:完成功能开发、测试、优化
  2. 打包阶段:配置签名、执行打包、生成应用包
  3. 测试阶段:安装测试、功能验证、性能测试
  4. 上架阶段:准备材料、提交审核、等待审核
  5. 发布阶段:审核通过、发布应用、监控数据
  6. 维护阶段:收集反馈、修复问题、迭代更新

8.2 最佳实践建议

打包优化

  • 使用环境变量管理敏感信息
  • 配置自动化打包脚本
  • 定期清理无用资源
  • 使用CDN加速资源加载

上架准备

  • 提前准备所有上架材料
  • 进行充分的测试
  • 准备详细的更新说明
  • 设置合理的发布时间

版本管理

  • 遵循语义化版本规范
  • 使用热更新机制
  • 支持灰度发布
  • 建立版本回滚机制

监控分析

  • 集成应用性能监控
  • 收集用户行为数据
  • 监控应用崩溃情况
  • 定期分析应用数据

8.3 常见问题处理

打包失败

  • 检查证书配置是否正确
  • 确认权限配置是否完整
  • 查看打包日志定位问题

审核不通过

  • 仔细阅读审核反馈
  • 修改不符合规范的内容
  • 重新提交审核

应用崩溃

  • 查看崩溃日志
  • 使用错误监控工具
  • 及时修复问题并发布更新

通过本章的学习,您已经掌握了uniapp鸿蒙应用的打包、签名、上架全流程。在实际开发中,建议建立标准化的发布流程,确保每次发布都能顺利进行。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐