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

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鸿蒙应用的打包、签名、上架全流程。在实际开发中,建议建立标准化的发布流程,确保每次发布都能顺利进行。

posted @ 2025-12-15 20:41  ifeng918  阅读(732)  评论(0)    收藏  举报