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生成證書:
- 打開DevEco Studio
- 選擇File → Project Structure → Signing Configs
- 點擊"+"創建新證書
- 填寫證書信息: 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可視化打包:
- 點擊菜單:發行 → 原生App-雲打包
- 選擇鴻蒙平台
- 選擇證書配置
- 點擊打包
命令行打包:
# 開發環境打包
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 應用加固
使用華為應用市場加固服務:
- 登錄華為開發者聯盟
- 進入"應用服務" → "應用安全"
- 上傳應用包進行加固
- 下載加固後的應用包
加固配置選項:
- 防反編譯:保護代碼邏輯
- 防調試:防止動態調試
- 防篡改:檢測應用完整性
- 防二次打包:防止重簽名
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 創建應用
登錄華為開發者聯盟:
- 訪問 https://developer.huawei.com
- 使用華為賬號登錄
- 進入"管理中心"
創建應用:
- 點擊"創建應用"
- 選擇"HarmonyOS應用"
- 填寫應用基本信息
- 上傳應用圖標和截圖
- 選擇應用分類
- 填寫應用描述
4.3 提交審核
上傳應用包:
- 進入應用詳情頁
- 點擊"版本管理"
- 點擊"上傳新版本"
- 上傳.hap文件
- 填寫版本信息
配置發佈信息:
- 選擇發佈方式(全量發佈/灰度發佈)
- 設置發佈時間(立即發佈/定時發佈)
- 選擇發佈渠道(應用市場/自有渠道)
- 設置更新類型(強制更新/可選更新)
提交審核:
- 確認所有信息無誤
- 點擊"提交審核"
- 等待審核結果(通常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 發佈流程總結
完整的發佈流程:
- 開發階段:完成功能開發、測試、優化
- 打包階段:配置簽名、執行打包、生成應用包
- 測試階段:安裝測試、功能驗證、性能測試
- 上架階段:準備材料、提交審核、等待審核
- 發佈階段:審核通過、發佈應用、監控數據
- 維護階段:收集反饋、修復問題、迭代更新
8.2 最佳實踐建議
打包優化:
- 使用環境變量管理敏感信息
- 配置自動化打包腳本
- 定期清理無用資源
- 使用CDN加速資源加載
上架準備:
- 提前準備所有上架材料
- 進行充分的測試
- 準備詳細的更新説明
- 設置合理的發佈時間
版本管理:
- 遵循語義化版本規範
- 使用熱更新機制
- 支持灰度發佈
- 建立版本回滾機制
監控分析:
- 集成應用性能監控
- 收集用户行為數據
- 監控應用崩潰情況
- 定期分析應用數據
8.3 常見問題處理
打包失敗:
- 檢查證書配置是否正確
- 確認權限配置是否完整
- 查看打包日誌定位問題
審核不通過:
- 仔細閲讀審核反饋
- 修改不符合規範的內容
- 重新提交審核
應用崩潰:
- 查看崩潰日誌
- 使用錯誤監控工具
- 及時修復問題併發布更新
通過本章的學習,您已經掌握了uniapp鴻蒙應用的打包、簽名、上架全流程。在實際開發中,建議建立標準化的發佈流程,確保每次發佈都能順利進行。