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鴻蒙應用的打包、簽名、上架全流程。在實際開發中,建議建立標準化的發佈流程,確保每次發佈都能順利進行。