怎么使用Java开发HarmonyOS

简介: 怎么使用Java开发HarmonyOS

开发准备image.png本文适用于HarmonyOS应用开发的初学者。通过构建一个简单的具有页面跳转功能的应用(如下图预览器运行效果所示),熟悉HarmonyOS应用开发流程。


HarmonyOS提供了两种FA(Feature Ability)的UI开发框架:Java UI框架和JS UI框架。


Java UI框架提供了细粒度的UI编程接口,UI元素更丰富,使应用开发更加灵活。

JS UI框架提供了相对高层的UI描述,使应用开发更加简单。

1

2

官网文档详细介绍


但其实有过Java基础的,上手肯定是容易一些的,


配置开发环境

下载&更新HarmonyOS SDK


DevEco Studio提供SDK Manager统一管理SDK及工具链,下载各种编程语言的SDK包时,SDK Manager会自动下载该SDK包依赖的工具链。


SDK Manager提供多种编程语言的SDK包和工具链,具体说明请参考下表。


下载HarmonyOS SDK


第一次使用DevEco Studio,需要下载HarmonyOS SDK及对应工具链。

说明


HarmonyOS SDK与OpenHarmony SDK不兼容,下载的HarmonyOS SDK并不适用于OpenHarmony工程。加载OpenHarmony SDK和开发OpenHarmony应用,请参考OpenHarmony使用指南。


1.运行已安装的DevEco Studio,首次使用,请选择Do not import settings,点击OK。

2.进入配置向导页面,设置npm registry,DevEco Studio已预置对应的仓,直接点击Start using DevEco Studio进入下一步。

说明


如果配置向导界面出现的是设置Set up HTTP Proxy界面,说明网络受限,请根据参考信息配置DevEco Studio代理、NPM代理和Gradle代理后,再下载HarmonyOS SDK。


image.png3.通过DevEco Studio向导指引开发者下载HarmonyOS SDK,默认情况下,SDK会下载到user目录下,也可以指定对应的存储路径,SDK存储路径不支持中文字符,然后点击Next。image.png4.默认会下载最新版本的Java SDK、JS SDK、Previewer和Toolchains。在弹出的License Agreement窗口,点击Accept开始下载SDK。

说明


下载SDK过程中,如果出现下载JS SDK失败,提示“Install js dependencies failed.”,请根据JS SDK安装失败处理指导进行处理。

5.等待HarmonyOS SDK及工具下载完成,点击Finish,界面会进入到DevEco Studio欢迎页。


image.png

image.pngSDK默认只会下载最新版本的Java SDK、JS SDK、Previewer和Toolchains,点击上图欢迎页中的Configure(或图标) > Settings,进入HarmonyOS SDK页面,可以下载其它组件,只需要勾选对应的组件包,然后点击Apply即可。

更新HarmonyOS SDK


如果已经下载过HarmonyOS SDK,当存在新版本的SDK时,可以通过SDK Manager来更新对应的SDK。进入SDK Manager的方法:


在DevEco Studio欢迎页,点击Configure(或图标) > Settings > HarmonyOS SDK进入SDK Manager界面(macOS系统为Configure > Preferences > HarmonyOS SDK)。

在DevEco Studio打开工程的情况下,点击Tools > SDK Manager界面进入;或者点击Files > Settings > HarmonyOS SDK进入(macOS系统为DevEco Studio > Preferences > HarmonyOS SDK)。

1

2

在SDK Manager中,勾选需要更新的SDK,然后点击Apply,然后在弹出的确认更新窗口,点击OK即可开始更新。


image.png配置HDC工具环境变量

HDC是为开发者提供HarmonyOS应用的调试工具,为方便使用HDC工具,请为HDC工具的端口号设置环境变量。


Windows环境变量设置方法:


在此电脑 > 属性 > 高级系统设置 > 高级 > 环境变量中,添加HDC端口变量。变量名为:HDC_SERVER_PORT,变量值设置为7035。



image.png环境变量配置完成后,关闭并重启DevEco Studio。

1

macOS环境变量设置方法:


打开终端工具,执行以下命令,打开.bash_profile文件。
    vi ./.bash_profile
点击字母“i”,进入Insert模式。
输入以下内容,添加HDC_SERVER_PORT环境变量信息。
    HDC_SERVER_PORT=7035
    launchctl setenv HDC_SERVER_PORT $HDC_SERVER_PORT
    export HDC_SERVER_PORT
编辑完成后,点击“Esc”键,退出编辑模式,然后输入:wq,点击Enter按钮保存。
执行以下命令,使配置的环境变量生效。
    source .bash_profile
环境变量配置完成后,关闭并重启DevEco Studio。


参考信息


DevEco Studio开发环境需要依赖于网络环境,需要连接上网络才能确保工具的正常使用。


一般来说,如果使用的是个人或家庭网络,是不需要设置代理信息的;只有部分企业网络受限的情况下,才需要设置代理信息。


如果是第一次打开DevEco Studio,配置向导界面出现设置Set up HTTP Proxy界面,说明网络受限,可以通过配置代理的方式来解决,需要配置DevEco Studio代理、NPM代理和Gradle代理。


image.png

image.png设置Gradle代理

打开“此电脑”,在文件夹地址栏中输入%userprofile%(Mac系统请点击前往 > 个人),进入个人用户界面。image.png创建一个文件夹,命名为.gradle。如果已有.gradle文件夹,请跳过此操作。

说明

macOS系统创建.gradle文件夹前,请将系统设置为“显示隐藏文件”。
进入.gradle文件夹,新建一个文本文档,命名为gradle,并修改后缀为.properties。
打开gradle.properties文件中,添加如下脚本,然后保存。
其中代理服务器、端口、用户名、密码和不使用代理的域名,请根据实际代理情况进行修改。其中不使用代理的“nonProxyHosts”的配置间隔符是 “|”。
    systemProp.http.proxyHost=proxy.server.com
    systemProp.http.proxyPort=8080
    systemProp.http.nonProxyHosts=*.company.com|10.*|100.*
    systemProp.http.proxyUser=userId
    systemProp.http.proxyPassword=password
    systemProp.https.proxyHost=proxy.server.com
    systemProp.https.proxyPort=8080
    systemProp.https.nonProxyHosts=*.company.com|10.*|100.*
    systemProp.https.proxyUser=userId
    systemProp.https.proxyPassword=password

编写第一个页面

在Java UI框架中,提供了两种编写布局的方式:在XML中声明UI布局和在代码中创建布局。这两种方式创建出的布局没有本质差别,为了熟悉两种方式,我们将通过XML的方式编写第一个页面,通过代码的方式编写第二个页面。


在“Project”窗口,点击“entry > src > main > resources > base > layout”,打开“ability_main.xml”文件。


image.png

第一个页面内有一个文本和一个按钮,使用DependentLayout布局,通过Text和Button组件来实现,其中vp和fp分别表示虚拟像素和字体像素。“ability_main.xml”的示例代码如下:
    <?xml version="1.0" encoding="utf-8"?>
    <DependentLayout
        xmlns:ohos="http://schemas.huawei.com/res/ohos"
        ohos:width="match_parent"
        ohos:height="match_parent">
        <Text
            ohos:id="$+id:text"
            ohos:width="match_content"
            ohos:height="match_content"
            ohos:text="Hello World"
            ohos:text_color="#000000"
            ohos:text_size="32fp"
            ohos:center_in_parent="true"/>
        <Button
            ohos:id="$+id:button"
            ohos:width="match_content"
            ohos:height="match_content"
            ohos:text="Next"
            ohos:text_size="19fp"
            ohos:text_color="#FFFFFF"
            ohos:top_padding="8vp"
            ohos:bottom_padding="8vp"
            ohos:right_padding="70vp"
            ohos:left_padding="70vp"
            ohos:center_in_parent="true"
            ohos:below="$id:text"
            ohos:margin="10vp"/>
    </DependentLayout>
按钮的背景是蓝色胶囊样式,可以通过graphic目录下的XML文件来设置。

右键点击“graphic”文件夹,选择“New > File”,命名为“background_button.xml”,单击回车键。image.png

“background_button.xml”的示例代码如下:
    <?xml version="1.0" encoding="utf-8"?>
    <shape
        xmlns:ohos="http://schemas.huawei.com/res/ohos"
        ohos:shape="rectangle">
        <corners
            ohos:radius="100"/>
        <solid
            ohos:color="#007DFF"/>
    </shape>
在layout目录下的“ability_main.xml”文件中,使用background_element="$graphic:background_button"的方式引用“background_button.xml”文件:
    <?xml version="1.0" encoding="utf-8"?>
    <DependentLayout
        ...
        <Button
            ohos:id="$+id:button"
            ohos:width="match_content"
            ohos:height="match_content"
            ohos:text="Next"
            ohos:text_size="19fp"
            ohos:text_color="#FFFFFF"
            ohos:top_padding="8vp"
            ohos:bottom_padding="8vp"
            ohos:right_padding="70vp"
            ohos:left_padding="70vp"
            ohos:center_in_parent="true"
            ohos:below="$id:text"
            ohos:margin="10vp"
            ohos:background_element="$graphic:background_button"/>
    </DependentLayout>
在XML文件中添加组件后,需要在Java代码中加载XML布局。
在“Project”窗口,选择“entry > src > main > java > com.example.myapplication > slice” ,打开“MainAbilitySlice.java”文件,使用setUIContent方法加载“ability_main.xml”布局。此外,运行代码前需采用import(可使用Alt+Enter快捷键)引入对应类,否则会产生报错提示。
说明
HarmonyOS提供了Ability和AbilitySlice两个基础类,一个有界面的Ability可以由一个或多个AbilitySlice构成,AbilitySlice主要用于承载单个页面的具体逻辑实现和界面UI,是应用显示、运行和跳转的最小单元。
本文档以同一个Ability内的两个AbilitySlice之间的跳转为例,如果开发者希望实现两个Ability之间的跳转,请参考不同Page间导航。
“MainAbilitySlice.java”的示例代码如下:
    package com.example.myapplication.slice;
    import com.example.myapplication.ResourceTable;
    import ohos.aafwk.ability.AbilitySlice;
    import ohos.aafwk.content.Intent;
    public class MainAbilitySlice extends AbilitySlice {
        @Override
        public void onStart(Intent intent) {
            super.onStart(intent);
            super.setUIContent(ResourceTable.Layout_ability_main); // 加载XML布局
        }
    }

使用预览器或模拟器运行项目,效果如下图所示:

image.png

创建另一个页面

在上一节中,我们用XML的方式编写了一个包含文本和按钮的页面。为了帮助开发者熟悉在代码中创建布局的方式,接下来我们使用代码的方式编写第二个页面。

在“Project”窗口,打开“entry > src > main > java > com.example.myapplication”,右键点击“slice”文件夹,选择“New > Java Class”,命名为“SecondAbilitySlice”,单击回车键。
第二个页面上有一个文本。打开“SecondAbilitySlice”文件,添加一个Text,示例代码如下:
    package com.example.myapplication.slice;
    import ohos.aafwk.ability.AbilitySlice;
    import ohos.aafwk.content.Intent;
    import ohos.agp.colors.RgbColor;
    import ohos.agp.components.DependentLayout;
    import ohos.agp.components.Text;
    import ohos.agp.components.element.ShapeElement;
    import ohos.agp.utils.Color;
    import ohos.agp.components.DependentLayout.LayoutConfig;
    public class SecondAbilitySlice extends AbilitySlice {
        @Override
        public void onStart(Intent intent) {
            super.onStart(intent);
            // 声明布局
            DependentLayout myLayout = new DependentLayout(this);
            // 设置布局宽高
            myLayout.setWidth(LayoutConfig.MATCH_PARENT);
            myLayout.setHeight(LayoutConfig.MATCH_PARENT);
            // 设置布局背景为白色
            ShapeElement background = new ShapeElement();
            background.setRgbColor(new RgbColor(255, 255, 255));
            myLayout.setBackground(background);
            // 创建一个文本
            Text text = new Text(this);
            text.setText("Hi there");
            text.setWidth(LayoutConfig.MATCH_PARENT);
            text.setTextSize(100);
            text.setTextColor(Color.BLACK);
            // 设置文本的布局
            DependentLayout.LayoutConfig textConfig = new DependentLayout.LayoutConfig(LayoutConfig.MATCH_CONTENT, LayoutConfig.MATCH_CONTENT);
            textConfig.addRule(LayoutConfig.CENTER_IN_PARENT);
            text.setLayoutConfig(textConfig);
            myLayout.addComponent(text);
            super.setUIContent(myLayout);
        }
    }

实现页面跳转

打开第一个页面的“MainAbilitySlice.java”文件,添加按钮的响应逻辑,实现点击按钮跳转到下一页,示例代码如下:
    package com.example.myapplication.slice;
    import com.example.myapplication.ResourceTable;
    import ohos.aafwk.ability.AbilitySlice;
    import ohos.aafwk.content.Intent;
    import ohos.agp.components.Button;
    public class MainAbilitySlice extends AbilitySlice {
        @Override
        public void onStart(Intent intent) {
            super.onStart(intent);
            super.setUIContent(ResourceTable.Layout_ability_main);
            Button button = (Button) findComponentById(ResourceTable.Id_button);
            // 点击按钮跳转至第二个页面
            button.setClickedListener(listener -> present(new SecondAbilitySlice(), new Intent()));
        }
    }

再次运行项目,效果如图所示:image.png

目录
相关文章
|
1月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
29天前
|
存储 缓存 5G
鸿蒙 HarmonyOS NEXT端云一体化开发-云存储篇
本文介绍用户登录后获取昵称、头像的方法,包括通过云端API和AppStorage两种方式,并实现上传头像至云存储及更新用户信息。同时解决图片缓存问题,添加上传进度提示,支持自动登录判断,提升用户体验。
106 0
|
29天前
|
存储 负载均衡 数据库
鸿蒙 HarmonyOS NEXT端云一体化开发-云函数篇
本文介绍基于华为AGC的端云一体化开发流程,涵盖项目创建、云函数开通、应用配置及DevEco集成。重点讲解云函数的编写、部署、调用与传参,并涉及环境变量设置、负载均衡、重试机制与熔断策略等高阶特性,助力开发者高效构建稳定云端服务。
236 0
鸿蒙 HarmonyOS NEXT端云一体化开发-云函数篇
|
29天前
|
存储 JSON 数据建模
鸿蒙 HarmonyOS NEXT端云一体化开发-云数据库篇
云数据库采用存储区、对象类型、对象三级结构,支持灵活的数据建模与权限管理,可通过AGC平台或本地项目初始化,实现数据的增删改查及端侧高效调用。
82 0
|
29天前
|
存储 开发者 容器
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
本文介绍了ArkTS语言中的Class类、泛型、接口、模块化、自定义组件及状态管理等核心概念,并结合代码示例讲解了对象属性、构造方法、继承、静态成员、访问修饰符等内容,同时涵盖了路由管理、生命周期和Stage模型等应用开发关键知识点。
178 0
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
|
29天前
鸿蒙 HarmonyOS NEXT星河版APP应用开发-阶段三
本文介绍了UI开发中的样式复用与组件构建技术,涵盖@Extend、@Styles和@Builder的使用方法,并通过Swiper轮播、Scroll滚动、Tabs导航等常用组件实现典型界面效果,结合生肖抽卡、小米轮播、回顶按钮等案例,展示实际应用技巧。
87 0
|
29天前
鸿蒙 HarmonyOS NEXT星河版APP应用开发-阶段二
本文介绍鸿蒙应用界面开发中的弹性布局(Flex)、绝对定位、层叠布局及ArkTS语法进阶,涵盖字符串拼接、类型转换、数组操作、条件与循环语句,并结合B站视频卡、支付宝首页等案例,深入讲解点击事件、状态管理与界面交互功能。
115 0
鸿蒙 HarmonyOS NEXT星河版APP应用开发-阶段二
|
18天前
|
传感器 监控 安全
HarmonyOS NEXT 5.0 的星闪(NearLink)开发应用案例
V哥分享HarmonyOS NEXT 5.0星闪开发实战,涵盖智能车钥匙无感解锁与工业传感器监控。低延迟、高可靠,代码完整,速来学习!
172 0
|
1月前
|
存储 Java 关系型数据库
Java 项目实战基于面向对象思想的汽车租赁系统开发实例 汽车租赁系统 Java 面向对象项目实战
本文介绍基于Java面向对象编程的汽车租赁系统技术方案与应用实例,涵盖系统功能需求分析、类设计、数据库设计及具体代码实现,帮助开发者掌握Java在实际项目中的应用。
50 0