欢迎光临
我们一直在努力

零基础开发第一个HarmonyOS APP:从环境搭建到上架全攻略

零基础开发第一个HarmonyOS APP:从环境搭建到上架全攻略

引言:为什么选择HarmonyOS?

2024年,HarmonyOS设备数量已突破8亿台,成为全球发展最快的智能终端操作系统。对于开发者而言,这意味着一个全新的蓝海市场——一个与Android/iOS并行的第三大移动生态正在形成。

但更吸引人的是HarmonyOS的开发体验:统一的ArkTS语言、声明式UI开发范式、以及“一次开发,多端部署”的核心理念。本文将带你从零开始,3小时内完成第一个HarmonyOS应用并上架到华为应用市场。

第一章:DevEco Studio安装与配置详解

1.1 系统要求与前期准备

在开始之前,请确保你的开发环境满足以下要求:

项目最低要求推荐配置
操作系统 Windows 10 64位 / macOS 10.14+ / Ubuntu 18.04+ Windows 11 / macOS 12+
内存 8GB RAM 16GB RAM 或更高
存储空间 20GB 可用空间 50GB SSD
Java环境 JDK 17 JDK 17 或更高

第一步:安装JDK 17

# 检查当前Java版本
java -version

# 如果没有安装JDK 17,从官网下载:
# https://www.oracle.com/java/technologies/javase/jdk17-archive-downloads.html

# 安装后配置环境变量(Windows示例):
# 1. 新建系统变量:JAVA_HOME = C:\\Program Files\\Java\\jdk-17
# 2. 在Path中添加:%JAVA_HOME%\\bin

# 验证安装
javac -version

1.2 下载与安装DevEco Studio

DevEco Studio是华为官方提供的HarmonyOS应用开发IDE,基于IntelliJ IDEA构建,专为鸿蒙生态优化。

下载地址:https://developer.harmonyos.com/cn/develop/deveco-studio

安装步骤(Windows版为例):

  • 选择安装路径:建议使用默认路径,确保路径中无中文字符

    C:\\DevEcoStudio\\

  • 配置安装选项:

    • ☑ 创建桌面快捷方式
    • ☑ 将DevEco Studio添加到Path环境变量
    • ☑ 关联.hvigor和.hap文件
  • 安装HarmonyOS SDK: 首次启动时,IDE会自动检测并提示安装HarmonyOS SDK

  • # SDK配置推荐(初学者版本)
    SDK版本: HarmonyOS 4.0.0 (API 9)
    Node.js: 16.19.1 或更高版本
    Ohpm包管理工具: 1.0.0 或更高版本
    构建工具: Hvigor 2.0.0

    1.3 配置开发环境

    安装完成后,需要进行必要的配置:

    步骤1:登录华为开发者账号

    // 如果没有账号,先注册:
    // https://developer.huawei.com/consumer/cn/

    // 在DevEco Studio中登录:
    // 1. 点击右上角头像图标
    // 2. 选择"登录"
    // 3. 使用华为开发者账号登录

    步骤2:配置SDK路径

    文件(File) → 设置(Settings) → 外观和行为(Appearance & Behavior) → 系统设置(System Settings) → HarmonyOS SDK

    步骤3:安装必要插件

    推荐安装的插件:
    Chinese (Simplified) Language Pack: 中文语言包
    ArkTS Assistant: ArkTS语言支持
    Git Integration: Git集成
    Markdown Support: Markdown支持

    步骤4:配置模拟器(可选但推荐)

    # 如果开发机性能足够,建议安装本地模拟器
    # 路径:工具(Tools) → 设备管理器(Device Manager)

    推荐模拟器配置:
    – Phone: Huawei P60 Pro (HarmonyOS 4.0)
    – Tablet: MatePad Pro (HarmonyOS 4.0)
    – 内存分配: 4GB RAM
    – 存储: 64GB

    第二章:Hello World项目创建与模拟器调试

    2.1 创建第一个HarmonyOS项目

    步骤1:新建项目

    项目配置详情:
    项目模板: Empty Ability (空Ability)
    项目名称: FirstHarmonyApp
    包名: com.yourname.firstharmonyapp
    保存路径: C:\\Users\\YourName\\HarmonyOSProjects\\
    编译API版本: 9 (HarmonyOS 4.0)
    模型: Stage (推荐)
    启用Super Visual: 否 (初学者建议先用代码)
    语言: ArkTS

    步骤2:项目结构解析

    创建完成后,你会看到以下项目结构:

    FirstHarmonyApp/
    ├── AppScope/ # 应用全局资源
    │ ├── resources/ # 多语言、多分辨率资源
    │ └── app.json5 # 应用级配置
    ├── entry/ # 主模块
    │ ├── src/
    │ │ ├── main/
    │ │ │ ├── ets/ # ArkTS代码目录
    │ │ │ │ ├── entryability/
    │ │ │ │ │ └── EntryAbility.ts # 应用入口
    │ │ │ │ └── entryability/
    │ │ │ │ └── pages/
    │ │ │ │ └── Index.ets # 首页
    │ │ │ ├── module.json5 # 模块配置
    │ │ │ └── resources/ # 模块资源
    │ │ └── ohosTest/ # 测试代码
    │ └── build-profile.json5 # 模块构建配置
    ├── build-profile.json5 # 工程构建配置
    └── hvigorfile.ts # 构建脚本

    2.2 编写第一个页面:Hello HarmonyOS

    让我们修改首页代码,创建一个简单的计数器应用:

    // entry/src/main/ets/pages/Index.ets
    @Entry
    @Component
    struct Index {
    @State message: string = '你好,鸿蒙!'
    @State count: number = 0

    // 自定义弹窗控制器
    @State dialogController: CustomDialogController = new CustomDialogController({
    builder: CustomDialogExample({}),
    cancel: this.onCancelClick,
    autoCancel: true
    })

    build() {
    Column({ space: 20 }) {
    // 标题
    Text(this.message)
    .fontSize(30)
    .fontWeight(FontWeight.Bold)
    .fontColor('#007DFF')

    // 计数器显示
    Text('当前计数: ' + this.count)
    .fontSize(24)
    .fontColor('#182431')
    .margin({ top: 20 })

    // 计数器进度条
    Progress({
    value: this.count % 100,
    total: 100,
    type: ProgressType.Ring
    })
    .width(100)
    .height(100)
    .margin({ top: 20, bottom: 20 })

    // 按钮容器
    Row({ space: 15 }) {
    // 增加按钮
    Button('增加', { type: ButtonType.Capsule })
    .backgroundColor('#007DFF')
    .width(100)
    .height(40)
    .onClick(() => {
    this.count++
    this.showToast('计数增加: ' + this.count)
    })

    // 减少按钮
    Button('减少', { type: ButtonType.Capsule })
    .backgroundColor('#FF6B81')
    .width(100)
    .height(40)
    .onClick(() => {
    if (this.count > 0) {
    this.count
    this.showToast('计数减少: ' + this.count)
    }
    })
    }
    .margin({ top: 20 })

    // 重置按钮
    Button('重置', { type: ButtonType.Normal })
    .backgroundColor('#34C759')
    .width(150)
    .height(40)
    .margin({ top: 20 })
    .onClick(() => {
    this.dialogController.open()
    })

    // 更多功能按钮
    Column({ space: 10 }) {
    Button('显示设备信息')
    .width(200)
    .height(40)
    .backgroundColor('#8E8E93')
    .onClick(() => {
    this.showDeviceInfo()
    })

    Button('切换主题')
    .width(200)
    .height(40)
    .backgroundColor('#AF52DE')
    .onClick(() => {
    this.toggleTheme()
    })
    }
    .margin({ top: 30 })
    }
    .width('100%')
    .height('100%')
    .justifyContent(FlexAlign.Center)
    .padding(20)
    }

    // 显示Toast提示
    private showToast(message: string) {
    // 使用系统提示
    prompt.showToast({
    message: message,
    duration: 2000
    })
    }

    // 显示设备信息
    private showDeviceInfo() {
    try {
    const systemInfo = deviceInfo.getDeviceInfo()
    this.dialogController = new CustomDialogController({
    builder: DeviceInfoDialog({
    info: systemInfo
    }),
    autoCancel: true
    })
    this.dialogController.open()
    } catch (error) {
    this.showToast('获取设备信息失败')
    }
    }

    // 切换主题(示例功能)
    private toggleTheme() {
    this.showToast('主题切换功能开发中…')
    }

    // 取消对话框
    private onCancelClick() {
    console.log('对话框取消')
    }
    }

    // 自定义对话框组件
    @Component
    struct CustomDialogExample {
    controller: CustomDialogController

    build() {
    Column({ space: 10 }) {
    Text('确认重置计数器?')
    .fontSize(18)
    .fontWeight(FontWeight.Medium)
    .margin({ bottom: 20 })

    Row({ space: 20 }) {
    Button('取消')
    .width(100)
    .onClick(() => {
    this.controller.close()
    })

    Button('确认')
    .width(100)
    .backgroundColor('#007DFF')
    .onClick(() => {
    // 这里应该重置计数器的逻辑
    // 由于是示例,仅关闭对话框
    this.controller.close()
    prompt.showToast({ message: '计数器已重置' })
    })
    }
    }
    .padding(20)
    .backgroundColor(Color.White)
    .borderRadius(10)
    }
    }

    // 设备信息对话框
    @Component
    struct DeviceInfoDialog {
    private info: deviceInfo.DeviceInfo

    build() {
    Column({ space: 10 }) {
    Text('设备信息')
    .fontSize(20)
    .fontWeight(FontWeight.Bold)
    .margin({ bottom: 15 })

    // 设备信息列表
    ForEach(Object.keys(this.info), (key: string) => {
    Row() {
    Text(key + ':')
    .fontSize(14)
    .fontColor('#666666')
    .width(120)
    .textAlign(TextAlign.Start)

    Text(this.info[key].toString())
    .fontSize(14)
    .fontColor('#182431')
    .textAlign(TextAlign.Start)
    .layoutWeight(1)
    }
    .width('100%')
    .margin({ bottom: 8 })
    })

    Button('关闭')
    .width(120)
    .margin({ top: 20 })
    .onClick(() => {
    // 关闭逻辑由父组件处理
    })
    }
    .padding(20)
    .backgroundColor(Color.White)
    .borderRadius(10)
    .width('80%')
    }
    }

    2.3 配置应用基本信息

    修改应用配置文件,添加必要的权限和配置:

    // entry/src/main/module.json5
    {
    "module": {
    "name": "entry",
    "type": "entry",
    "description": "$string:module_desc",
    "mainElement": "EntryAbility",
    "deviceTypes": [
    "phone",
    "tablet"
    ],
    "deliveryWithInstall": true,
    "installationFree": false,
    "pages": "$profile:main_pages",
    "abilities": [
    {
    "name": "EntryAbility",
    "srcEntry": "./ets/entryability/EntryAbility.ts",
    "description": "$string:EntryAbility_desc",
    "icon": "$media:icon",
    "label": "$string:EntryAbility_label",
    "startWindowIcon": "$media:icon",
    "startWindowBackground": "$color:start_window_background",
    "exported": true,
    "skills": [
    {
    "entities": [
    "entity.system.home"
    ],
    "actions": [
    "action.system.home"
    ]
    }
    ]
    }
    ],
    "requestPermissions": [
    {
    "name": "ohos.permission.INTERNET"
    }
    ]
    }
    }

    // AppScope/app.json5
    {
    "app": {
    "bundleName": "com.yourname.firstharmonyapp",
    "vendor": "yourname",
    "versionCode": 1000000,
    "versionName": "1.0.0",
    "icon": "$media:app_icon",
    "label": "$string:app_name",
    "distributedNotificationEnabled": true,
    "supportBackup": false,
    "associatedWakeUp": false
    }
    }

    2.4 运行与调试应用

    方法1:使用远程模拟器(推荐)

  • 点击工具栏的 运行按钮 ▶️
  • 选择 Sign in 登录华为开发者账号
  • 选择设备类型(如:Phone)
  • 选择远程模拟器(如:HUAWEI P60 Pro)
  • 等待模拟器启动并运行应用
  • 方法2:使用本地模拟器

    # 如果本地模拟器已安装:
    # 1. 工具(Tools) → 设备管理器(Device Manager)
    # 2. 选择本地模拟器
    # 3. 启动模拟器(首次启动较慢)
    # 4. 运行应用到本地模拟器

    方法3:使用真机调试

    真机调试步骤:
    1. 手机开启开发者模式:
    设置 → 关于手机 → 连续点击"版本号"7次
    2. 开启USB调试:
    设置 → 系统和更新 → 开发人员选项 → USB调试
    3. 连接电脑:
    使用原装USB数据线
    4. 信任电脑:
    手机弹窗选择"信任此计算机"
    5. 在DevEco Studio中运行到真机

    调试技巧:

    // 使用console.log输出日志
    console.log('当前计数:', this.count)

    // 使用debugger设置断点
    debugger // 代码会在此处暂停

    // 查看组件树和状态
    // 在DevTools中: Components → 查看组件层次结构
    // 在DevTools中: Console → 查看日志输出

    第三章:应用签名与华为应用市场发布流程

    3.1 申请开发者资质

    在发布应用前,需要完成开发者实名认证:

    步骤1:注册华为开发者账号

    访问:https://developer.huawei.com/consumer/cn/
    点击"注册" → 填写信息 → 完成邮箱验证

    步骤2:完成实名认证

    个人开发者:
    身份证正反面照片
    手持身份证照片
    手机号验证

    企业开发者:
    营业执照
    对公账户验证
    法人身份证
    联系人信息

    步骤3:签署开发者协议

    在开发者平台 → 管理中心 → 协议签署
    阅读并同意《华为应用市场开发者协议》

    3.2 生成应用签名证书

    HarmonyOS应用必须使用华为的数字证书进行签名后才能发布:

    方法1:通过DevEco Studio自动生成(推荐)

    // 步骤:
    // 1. 点击菜单: 文件(File) → 项目结构(Project Structure)
    // 2. 选择: Project → Signing Configs
    // 3. 点击"添加签名配置"(Add Signing Config)

    配置示例:
    证书文件类型: HarmonyOS Application
    存储路径: C:\\Users\\YourName\\firstharmonyapp.p7b
    存储密码: 设置复杂密码(8位以上)
    密钥别名: key0
    密钥密码: 设置密钥密码
    有效期: 25年(默认)
    证书颁发者: 个人/公司名称
    国家代码: CN

    方法2:命令行生成证书

    # 使用Java keytool工具生成证书
    keytool -genkeypair -alias "key0" -keyalg RSA -keysize 2048 \\
    -validity 9125 -keystore firstharmonyapp.p12 \\
    -storetype pkcs12 -storepass yourpassword \\
    -dname "CN=YourName, OU=YourOrgUnit, O=YourOrg, L=YourCity, S=YourState, C=CN"

    # 转换为HarmonyOS需要的P7B格式
    # 需要使用华为提供的工具进行转换

    重要提示:

    • 妥善保管签名证书和密码,丢失无法找回
    • 建议将证书备份到安全位置
    • 企业应用建议使用企业证书

    3.3 配置应用签名

    在项目中配置签名信息:

    // entry/build-profile.json5
    {
    "app": {
    "signingConfigs": [
    {
    "name": "release",
    "material": {
    "certpath": "firstharmonyapp.p7b",
    "storePassword": "your_store_password",
    "keyAlias": "key0",
    "keyPassword": "your_key_password",
    "profile": "firstharmonyapp.p7b",
    "signAlg": "SHA256withECDSA",
    "storeFile": "firstharmonyapp.p7b"
    }
    }
    ],
    "products": [
    {
    "name": "default",
    "signingConfig": "release",
    "compileSdkVersion": 9,
    "compatibleSdkVersion": 9,
    "runtimeOS": "HarmonyOS"
    }
    ]
    }
    }

    3.4 构建发布版本

    步骤1:配置构建类型

    # 在DevEco Studio中:
    # 1. 点击菜单: 构建(Build) → 构建HAP/APP(s)
    # 2. 选择构建变体: release
    # 3. 等待构建完成

    步骤2:检查构建产物

    构建完成后,在项目目录中会生成:

    build/
    ├── outputs/
    │ └── default/
    │ ├── entry-default-signed.hap # 签名后的HAP包
    │ ├── entry-default-unsigned.hap # 未签名的HAP包
    │ └── app/
    │ └── firstharmonyapp.app # APP包

    步骤3:验证HAP包

    # 使用hdc工具检查HAP包
    hdc app install entry-default-signed.hap

    # 或在模拟器中手动安装
    # 1. 将HAP包复制到模拟器
    # 2. 在模拟器中点击安装

    3.5 提交应用到华为应用市场

    步骤1:登录AppGallery Connect

    访问:https://developer.huawei.com/consumer/cn/service/josp/agc/index.html
    使用开发者账号登录

    步骤2:创建应用

    应用信息填写:
    应用名称: 我的第一个鸿蒙应用
    应用分类: 工具 / 效率
    默认语言: 简体中文
    应用类型: 应用
    是否上架:
    安装包类型: HarmonyOS应用 (HAP)

    步骤3:上传应用包

  • 点击"添加版本"
  • 上传构建的HAP文件
  • 填写版本信息
  • 设置版本更新说明
  • 步骤4:填写应用详情

    需要准备的材料:
    1. 应用图标: 512×512像素,PNG格式
    2. 应用截图: 至少3张,16:9比例
    3. 应用描述: 详细功能介绍
    4. 关键词: 3-5个相关关键词
    5. 隐私政策: 如果应用需要权限
    6. 客服信息: 邮箱或联系方式

    步骤5:提交审核

    审核流程时间:
    普通审核: 35个工作日
    加急审核: 12个工作日(需符合条件)
    修改后重新提交: 13个工作日

    步骤6:查看审核结果

    审核状态说明:
    – 审核中: 应用正在审核
    – 待修改: 需要修改后重新提交
    – 审核通过: 可以上架
    – 审核拒绝: 查看拒绝原因

    3.6 应用上架后的运营

    监控应用数据:

    // 集成华为分析服务(可选)
    // 在项目中添加依赖:
    // ohpm install @ohos/hianalytics

    import hiAnalytics from '@ohos/hianalytics'

    // 初始化
    hiAnalytics.init(context, {
    collectAdsIdEnabled: false,
    channel: 'AppGallery'
    })

    // 记录用户行为
    hiAnalytics.onEvent('button_click', {
    button_name: 'increase_button',
    page_name: 'main_page'
    })

    更新应用版本:

    // 更新app.json5中的版本号
    {
    "app": {
    "versionCode": 1000001, // 比上一个版本大
    "versionName": "1.0.1", // 语义化版本
    }
    }

    第四章:常见问题与解决方案

    4.1 环境配置问题

    问题1:DevEco Studio启动失败

    解决方案:
    1. 检查Java环境: java -version
    2. 清理缓存: 删除用户目录下的.DevEcoStudio目录
    3. 重新安装: 使用卸载工具完全卸载后重装

    问题2:模拟器无法启动

    解决方案:
    1. 检查网络: 确保可以访问华为云服务
    2. 检查账号: 确认已登录开发者账号
    3. 切换模拟器: 尝试其他型号的模拟器
    4. 使用真机调试: 作为临时替代方案

    4.2 开发问题

    问题3:页面布局异常

    // 常见原因:父容器高度未设置
    Column() {
    // 子组件
    }
    .height('100%') // 添加高度
    .width('100%')

    问题4:真机调试失败

    解决方案:
    1. 检查USB连接: 更换数据线或USB端口
    2. 检查开发者选项: 确认USB调试已开启
    3. 重新授权: 断开重连,重新授权电脑
    4. 检查驱动: 安装最新的华为手机驱动

    4.3 发布问题

    问题5:应用审核被拒

    常见原因及解决方案:
    1. 权限过度申请: 只申请必要的权限
    2. 隐私政策缺失: 添加完整的隐私政策链接
    3. 应用描述不清晰: 详细描述应用功能
    4. 截图不符合要求: 按要求重新制作截图
    5. 应用存在崩溃: 彻底测试后再提交

    赞(0)
    未经允许不得转载:171主机测评 » 零基础开发第一个HarmonyOS APP:从环境搭建到上架全攻略
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址