申请网站免费,一旦开战最危险的城市,厦门微网站建设,秦皇岛pc端网站建设一、背景
9月25日华为秋季全场景新品发布会#xff0c;余承东宣布鸿蒙HarmonyOS NEXT蓄势待发#xff0c;不再支持安卓应用。网易有道、同程旅行、美团、国航、阿里等公司先后宣布启动鸿蒙原生应用开发工作。
二、鸿蒙Next介绍
HarmonyOS是一款面向万物互联#xff0c;全…一、背景
9月25日华为秋季全场景新品发布会余承东宣布鸿蒙HarmonyOS NEXT蓄势待发不再支持安卓应用。网易有道、同程旅行、美团、国航、阿里等公司先后宣布启动鸿蒙原生应用开发工作。
二、鸿蒙Next介绍
HarmonyOS是一款面向万物互联全新的分布式操作系统。
1、鸿蒙Next(5.0)系统底座全栈自研去掉了传统的AOSP代码。
2、仅支持鸿蒙内核和鸿蒙系统的应用。
3、业内人士向证券时报公司记者表示“华为内部确实有这计划就是明年Q1推出不兼容安卓的鸿蒙版本但目前内部还没有下发相关通知所以具体何时推出暂不明确
三、鸿蒙系统开发
鸿蒙系统架构 3.1 IDE
HUAWEI DevEco Studio 基于IntelliJ IDEA Community开源版本定制开发支持HarmonyOS和OpenHarmony应用及服务开发。
下载地址developer.harmonyos.com/cn/develop/…
3.2 示例讲解
github地址 github.com/guofeng007/…
界面效果 全局配置 {app: {// 最重要的是包名版本号图片和app名称bundleName: com.example.myapplication, vendor: example,versionCode: 1000000,versionName: 1.0.0,icon: $media:app_icon,label: $string:app_name}
}模块配置
{module: {name: entry,type: entry,// 模块生命周期入口 srcEntry: ./ets/MyAbilityStage.ts, description: $string:module_desc,// 应用入口mainElement: EntryAbility,deviceTypes: [phone],deliveryWithInstall: true,installationFree: false,pages: $profile:main_pages,abilities: [{// 入口具体声明配置参考androidname: 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]}]}]}
}APP模块全局声明周期
import AbilityStage from ohos.app.ability.AbilityStage;export default class MyAbilityStage extends AbilityStage {onCreate() {// 应用的HAP在首次加载的时为该Module初始化操作}onAcceptWant(want) {// 仅specified模式下触发return MyAbilityStage;}
}入口任务栈
这个比较重要对从安卓转过来的同学来说可以理解为一个TaskStack在手机的多任务栏显示为一个任务是一个任务容器。
EntryAbility 继承自 UIAbility 并实现了其中的 onCreate 、onDestroy 、 onWindowStageCreate 、 onWindowStageDestroy 、 onForeground 、 onBackground 等方法显然这些方法就是这个 ability 的生命周期。 然后在 onWindowStageCreate 生命周期中通过 windowStage.loadContent 加载了 pages/Index 的内容pages/Index就相当于我们的入口UI页面。
UIAbility介绍 UIAbility是一种包含用户界面的应用组件主要用于和用户进行交互。UIAbility也是系统调度的单元为应用提供窗口在其中绘制界面。 每一个UIAbility实例都对应于一个最近任务列表中的任务。 一个应用可以有一个UIAbility也可以有多个UIAbility。 一个UIAbility可以对应于多个页面。 UIAbilityWindow生命周期 UIAbility的启动模式 是指UIAbility实例在启动时的不同呈现状态。针对不同的业务场景系统提供了三种启动模式 singleton单实例模式multiton多实例模式specified指定实例模式
import UIAbility from ohos.app.ability.UIAbility;
import hilog from ohos.hilog;
import window from ohos.window;export default class EntryAbility extends UIAbility {onCreate(want, launchParam) {hilog.info(0x0000, testTag, %{public}s, Ability onCreate);}onDestroy() {hilog.info(0x0000, testTag, %{public}s, Ability onDestroy);}onWindowStageCreate(windowStage: window.WindowStage) {// Main window is created, set main page for this abilityhilog.info(0x0000, testTag, %{public}s, Ability onWindowStageCreate);windowStage.loadContent(pages/Index, (err, data) {if (err.code) {hilog.error(0x0000, testTag, Failed to load the content. Cause: %{public}s, JSON.stringify(err) ?? );return;}hilog.info(0x0000, testTag, Succeeded in loading the content. Data: %{public}s, JSON.stringify(data) ?? );});}onWindowStageDestroy() {// Main window is destroyed, release UI related resourceshilog.info(0x0000, testTag, %{public}s, Ability onWindowStageDestroy);}onForeground() {// Ability has brought to foregroundhilog.info(0x0000, testTag, %{public}s, Ability onForeground);}onBackground() {// Ability has back to backgroundhilog.info(0x0000, testTag, %{public}s, Ability onBackground);}
}路由配置
{src: [pages/Index,pages/routes/FirstPage,pages/routes/SecondPage,pages/routes/WebComponent]
}3.3 ArkUI
ArkUI的基本单元是组件组件是一个独立子页面或者子模块。示例代码有注释包含页面UI组件状态route跳转。
组件声明周期 import router from ohos.routerEntry //Entry表示该自定义组件为入口组件
Component //Component表示自定义组件
struct Index {//State表示组件中的状态变量状态变量变化会触发UI刷新State count: number 1State url: string https://img1.baidu.com/it/u3302184040,3713353210fm253fmtautoapp138fJPEG?w889h500private product: string[] [PC。, 平板。, 手环。]//UI描述以声明式的方式来描述UI的结构例如build()方法中的代码块。build() {//系统组件ArkUI框架中默认内置的基础和容器组件,比如示例中的Row、Column、Text//不允许在UI描述里直接使用声明局部变量// let a 1 ERRORRow() {Column() {Button(Page跳转).onClick((){router.pushUrl({ url: pages/routes/FirstPage, params: {param: 第一个页面传来的值,} })})Button(Webview跳转).onClick((){router.pushUrl({ url: pages/routes/WebComponent, params: {param: 第一个页面传来的值,} })})Text(this.count.toString())//属性方法组件可以通过链式调用配置多项属性如fontSize()、width()、height()、backgroundColor()等.fontWeight(FontWeight.Bold)//定义扩展原生组件样式.setCustomText(30)}}}
}3.4 Webview
在原生APP组件开发过程中很多活动页面都是h5实现但是需要很多原生的能力比如相机这种情况下就需要类似JsBridge方式的WebView
import webView from ohos.web.webview;Entry
Component
struct WebComponent {controller: webView.WebviewController new webView.WebviewController();webUrl: string https://www.baidu.com/jsBridge {callNaMethod() {console.log(H5调用Native方法)}}aboutToAppear(){webView.WebviewController.setWebDebuggingAccess(true)}build() {Stack() {//加载网络url// Web({ src: this.webUrl, controller: this.controller })//加载本地htmlWeb({ src: $rawfile(demo.html), controller: this.controller })//允许访问本地文件.fileAccess(true)//设置是否允许执行JavaScript脚本.javaScriptAccess(true)//注入JavaScript对象到window对象中并在window对象中调用该对象的方法.javaScriptProxy({object: this.jsBridge,name: jsBridge,methodList: [callNaMethod],controller: this.controller}).onPageEnd(event {//异步执行JavaScript脚本 调用H5方法this.controller.runJavaScript(callH5Method()).then(result {console.log(H5返回值${result})}).catch(error {console.error(error: error);})})}}
}测试html
!DOCTYPE htmlhtmlbody!--调用原生方法--
button typebutton onclickwindow.jsBridge.callNaMethod()点击调用原生界面方法/button
/bodyscript typetext/javascriptfunction callH5Method() {return 从H5返回}
/script
/html3.5 Devtools调试webview
代码中允许webview调试 web_webview.WebviewController.setWebDebuggingAccess(true);
// xxx.ets
import web_webview from ohos.web.webview;Entry
Component
struct WebComponent {controller: web_webview.WebviewController new web_webview.WebviewController();aboutToAppear() {// 配置web开启调试模式web_webview.WebviewController.setWebDebuggingAccess(true);}build() {Column() {Web({ src: www.example.com, controller: this.controller })}}
}用hdc命令行工具
需要全局设置path /Users/你的用户名/Library/Huawei/Sdk/hmscore/3.1.0/toolchains/
// 添加映射 hdc fport tcp:9222 tcp:9222 // 查看映射 hdc fport ls在PC端chrome浏览器地址栏中输入chrome://inspect/#devices页面识别到设备后就可以开始页面调试。调试效果如下 总结
鸿蒙整体上开发很像Kotlin Compose有经验的很容易上手。
为了能让大家更好的学习鸿蒙 (Harmony OS) 开发技术这边特意整理了《鸿蒙 (Harmony OS)开发学习手册》共计890页希望对大家有所帮助https://qr21.cn/FV7h05
《鸿蒙 (Harmony OS)开发学习手册》
入门必看https://qr21.cn/FV7h05
应用开发导读(ArkTS)应用开发导读(Java) HarmonyOS 概念https://qr21.cn/FV7h05
系统定义技术架构技术特性系统安全 如何快速入门https://qr21.cn/FV7h05
基本概念构建第一个ArkTS应用构建第一个JS应用…… 开发基础知识https://qr21.cn/FV7h05
应用基础知识配置文件应用数据管理应用安全管理应用隐私保护三方应用调用管控机制资源分类与访问学习ArkTS语言…… 基于ArkTS 开发https://qr21.cn/FV7h05
Ability开发UI开发公共事件与通知窗口管理媒体安全网络与链接电话服务数据管理后台任务(Background Task)管理设备管理设备使用信息统计DFX国际化开发折叠屏系列……