第3章 鸿蒙ACE Java应用框架 本章将详细讲解鸿蒙ACE Java UI框架的使用,读者通过本章的学习将对鸿蒙Java UI框架有深入的了解。ACE Java UI框架是鸿蒙ACE(Ability Crossplatform Environment,鸿蒙面向元能力(Ability)的跨平台开发运行环境)的重要组成部分,用来开发鸿蒙富设备应用程序。 3.1ACE运行时简介 ACE全称为Ability Crossplatform Environment,是鸿蒙面向元能力(Ability)开发的跨平台运行环境,如图31所示。 图31鸿蒙ACE Runtime架构图 ACE是为华为鸿蒙操作系统定制设计的一套针对全场景环境的跨平台应用开发框架。ACE支持目前两种主流语言: Java和JavaScript。未来将支持华为自己的开发语言“仓颉”。 3.1.1ACE针对全场景开发 鸿蒙应用开发针对的是1+8+N的全场景设备: 1指的是手机; 8代表车机、音箱、耳机、手表/手环、平板、智慧屏、PC、AR/VR; N泛指其他IoT设备。 这里可以把这些IoT终端设备分为富设备和轻设备,对于富设备开发鸿蒙提供了基于Java、C++语言的开发框架,对于一些内存有限,功能有限的轻设备则提供了基于JavaScript的开发框架,这样可以让一些低端硬件配置的IoT设备运行鸿蒙应用程序。 3.1.2ACE支持的两种UI框架 鸿蒙跨平台运行时(ACE)为Java开发者和JavaScript开发者提供了一站式的开发环境。 1. 基于Java的应用开发框架(ACE Java UI) 鸿蒙的应用开发可以基于Java语言+XML的方式进行开发,此方式和安卓类似,如果开发者熟悉Java语言或者Android开发,那么使用此方式可以很快进行应用开发。ACE Java UI框架的架构图如图32所示。 图32鸿蒙ACE Java 总体架构图 2. 基于JavaScript的应用开发框架(ACE JavaScript UI) 鸿蒙开发同时还提供了JavaScript形式的开发。JavaScript的语法规则基本遵循ES6的语法规范。如果是前端开发人员,则可以使用HTML+CSS+JavaScript的形式进行应用的开发,但是对于后端一些服务能力,目前只能使用Java语言进行开发,所以对于JavaScript的开发者,依然需要Java语言的辅助。ACE JavaScript UI框架的架构图如图33所示。 图33鸿蒙ACE JavaScript总体架构图 3.2ACE开发中的核心概念 在学习ACE开发框架前,需要了解ACE中的一些核心概念。 3.2.1Ability和Slice Ability是HarmonyOS开发的核心,首先了解什么是Ability,我们用生活中的例子来做一个类比,Ability就好像是一个画板,初始什么都没有,一片空白,我们可以找一张画纸进行绘画,画完的画纸夹在画板上,画板上就会有我们创作的图画了。 HarmonyOS中的Ability其实就相当于画板,它用来承载画纸,那么画纸又是什么?标题中还有一个Slice,它就相当于画纸,我们写应用的UI,写完后通过Slice加载布局,就相当于在画纸上绘画,完成后把画纸放在画板上进行展示。 将对应的概念引申到程序中,我们有一个Ability(画板)用来向用户展示新闻,同时这个Ability拥有两个Slice(画纸),一个用来展示新闻标题,另一个用来展示新闻详情。那么我们就需要在这两个Slice中分别画上新闻的标题和详情,然后通过单击或其他交互方式来切换两个Slice,相当于给画板换另一张画纸。 3.2.2Ability分类 有了上述概念,我们基本知道Ability能做些什么了,但是还要具体了解一下这个核心组件,在HarmonyOS中,Ability可以分为两类,一类叫FA(Feature Ability),另一类叫作PA(Particle Ability),这两类Ability最直观的区别是FA有界面,可以和用户交互,而PA无界面,它提供一些应用运行需要的能力,例如读取数据。这两类Ability在创建的时候都有相应的模板。 Ability的模板种类。 (1) 对于FA类型的Ability,Page类型的模板是其唯一的模板类型,这种类型的模板提供了和用户交互的能力。 (2) 对于PA类型的Ability,它有两类模板。 ■Service模板: 用于提供后台运行任务的能力。 ■Data模板: 用于对外部提供统一的数据访问抽象。 3.2.3鸿蒙应用包结构 鸿蒙应用软件包以App Pack(Application Package)形式发布,它是由一个或多个HAP(HarmonyOS Ability Package)及描述每个HAP属性的pack.info组成。HAP是Ability的部署包,HarmonyOS应用代码围绕Ability组件展开。一个HAP是由代码、资源、第三方库及应用配置文件组成的模块包,可分为entry和feature两种模块类型,如图34所示。 图34鸿蒙应用包结构 entry: 应用的主模块。在一个App中,对于同一设备类型必须有且只有一个entry类型的HAP,可独立安装运行。 feature: 应用的动态特性模块。一个App可以包含一个或多个feature类型的HAP,也可以不含。只有包含Ability的HAP才能够独立运行。 有了上述概念,3.3节将分析之前创建的项目的结构和项目中配置文件的配置内容具体有什么含义。 视频讲解 3.3创建一个ACE Java项目 在对HarmonyOS应用程序有了一个初步认知之后,我们使用DevEco Studio来创建一个项目,把项目运行起来,先从整体上来了解一下HarmonyOS项目的整体结构及开发工具的基本使用。 环境和工具配置好后,就可以创建一个项目了。先创建一个项目,从整体上了解一下HarmonyOS应用的整体框架。我们在一个布局里放置一个文本框,用于显示一个数字,再添加一个按钮,每次单击按钮让文本框中的数字加1。通过这样一个小程序简单演示工具的使用和项目的基本框架。 3.3.1新建ACE Java项目 选择File→New→New Project进行项目创建,会弹出如图35所示的窗口。 图35新建ACE Java项目 创建项目窗口可分为两块,其中Device表示目前支持的设备。设备列表中从左到右依次为手机、平板、车机、电视机、智慧屏、穿戴设备、轻型穿戴设备等。 上边是新建项目时供选择的模板,因为笔者使用Java开发,所以选择第二个(Empty Feature Ability Java),单击Next按钮进入下个页面,如图36所示。 图36选择项目模板 配置完项目名、包名、使用的SDK版本及项目的保存路径后,单击Finish按钮即可,创建完成后项目会自动构建。构建成功后项目整体结构如图37所示。 图37ACE Java项目目录结构 先完成我们的功能,后续再了解目录及其作用。首先打开resources/base/layout目录中自动生成的布局文件,然后单击工具右侧的预览,如图38所示。 图38ACE Java项目预览 这是工具提供的一个预览器,当写xml布局的时候可以近乎实时地看到我们所写代码的效果。 3.3.2编写界面布局 在ability_main.xml文件中,添加一个Text组件和一个Button组件。这里为Button组件添加了一个背景文件,通过Button属性 background_element 引入。 background_element的值是$graphic:background_ability_main。$graphic表示引用graphic文件夹,background_ability_main 是graphic文件夹下的xml文件,如代码示例31所示。 代码示例31编写界面布局: first_demo/entry/layout/ability_main.xml <?xml version="1.0" encoding="utf-8"?> <DirectionalLayout xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:height="match_parent" ohos:width="match_parent" ohos:orientation="vertical"> <Text ohos:id="$+id:text" ohos:height="match_content" ohos:width="match_content" ohos:layout_alignment="horizontal_center" ohos:text="1" ohos:text_size="60fp" /> <Button ohos:height="match_content" ohos:width="match_content" ohos:text_size="18fp" ohos:id="$+id:btn_add" ohos:layout_alignment="horizontal_center" ohos:background_element="$graphic:background_ability_main" ohos:text_color="white" ohos:padding="15vp" ohos:text="单击加1"/> </DirectionalLayout> 此外还需要修改graphic目录下background_ability_main.xml文件,将背景设置为10像素的圆角,将填充色设置为#007CFD,如代码示例32所示。 代码示例32设置背景: first_demo/entry/layout/background_ability_main.xml <?xml version="1.0" encoding="utf-8"?> <shape xmlns:ohos="http://schemas.huawei.com/res/ohos" ohos:shape="rectangle"> <corners ohos:radius="10"/> <solid ohos:color="#007CFD"/> </shape> 此时在预览器中看到的效果如图39所示。 图39预览效果图 3.3.3编写界面逻辑代码 接下来实现“单击加1”功能,打开由项目自动创建的MainAbilitySlice文件,如代码示例33所示。这里通过Button事件,每单击一次,设置“count++;”。 代码示例33设置背景: first_demo/entry/java/MainAbilitySlice.java public class MainAbilitySlice extends AbilitySlice { private int count = 1; @Override public void onStart(Intent intent) { super.onStart(intent); super.setUIContent(ResourceTable.Layout_ability_main); Text text = (Text) findComponentById(ResourceTable.Id_text); Button button = (Button) findComponentById(ResourceTable.Id_btn_add); button.setClickedListener(new Component.ClickedListener() { @Override public void onClick(Component component) { count++; text.setText(count + ""); } }); } @Override public void onActive() { super.onActive(); } @Override public void onForeground(Intent intent) { super.onForeground(intent); } } 3.3.4通过模拟器预览效果 到此为止,功能已经开发完毕,单击工具上方菜单栏的Tools下边的HVD Manager,弹出华为账号授权界面,如图310所示。 图310华为账号授权 这里需要登录已注册的华为账号并且授权,单击“允许”按钮,跳转到网页授权,授权完成后,会弹出下面的界面,如图311所示。 图311选择远程设备 这里可以选择对应的远程设备,因为我们创建项目时选的是手机类型的项目,因此这里选手机P40,单击后边的蓝色箭头,之后在工具右侧的预览区会变成所选择的手机P40。 选择手机P40模拟器,如图312所示,等待模拟器启动完成后,就可以单击工具右上方的按钮启动项目了。 单击工具右上方的按钮启动项目,如图313所示。