加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
一、项目环境构建
    1.项目本地初始化
        git init:项目初始化,生成本地仓库
        git add:提交暂存区
        git commit:提交本地仓库
        git push:提交远程库

    2.如何引入不同的模块
        import {xxx1} from "./components/xxx1"
        import {xxx2} from "./components/xxx2"
        import {xxx3} from "./components/xxx3"

        简化设计
        import {xxx1,xxx2,xxx3} from "./components"
        前提:在components目录下需要有一个index.ets文件,并且该文件中需要将对应的内容导出才行。

         har/hsp:   index.ets
    3.广告页

    4.token令牌,用户身份信息的,每次访问是都需要携带该令牌以表名用户的身份,如果没有,需要重新进行身份认证,需要输入用户名和密码,
                其实就是重新登录,登录成功之后,又会给你一个新的token,要保存好,下次访问时又可以携带了。

                JWT:
二、后端接口的调用流程
    122.51.240.24:31007/driver/users
    1.分析接口:url、需要的参数的和返回的参数
        接收的参数:只需要Token,已经在request工具类中设计好了,所以不需要特别考虑
        返回的参数:需要定义对应的数据模型,封装接口返回的数据
    2.定义接口需要的参数数据结构

    3.封装API

    4.在组件中调用该API

    5.组件渲染

三、分页获取数据
    1.上拉加载,当List列表到达底部时,上拉是加载新的一页数据【重要】
        onReachEnd:List列表到达底部执行的事件
    2.下拉刷新【先掌握Refresh组件的使用,然后实现下来刷新具体功能】

四、窗口的沉浸式:全屏化

五、鸿蒙权限管理
    https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/access-control-V5
    1、权限的级别
        normal:默认情况下,应用的APL等级都为normal等级。
        system_basic:该等级的应用服务提供系统基础服务。如果是normal级别的应用,在开发阶段可以自动获取签名临时获取权限,在应用上线还需要再AGC中进行权限申请。
        system_core:该等级的应用服务提供操作系统核心能力。
                    应用APL等级不允许配置为system_core。
    2、授权方式
        system_grant:系统授权
        user_grant:用户授权

    normal     system_grant      module.json5进行配置即可生效
    normal     user_grant        module.json5进行配置,还需要在代码中申请权限
    system_basic  system_grant   ACL使能,module.json5配置生效,在测试阶段只需要自动生成签名
    system_basic user_grant      ACL使能,module.json5配置生效,在测试阶段只需要自动生成签名,还需要在代码中申请权限

    ohos.permission.APPROXIMATELY_LOCATION
    ohos.permission.LOCATION
    级别:normal
    授权方式:user_grant

六、WebView混合开发方式来解决地图问题
    1、什么是混合开发
        原生开发语言和web开发语言
        鸿蒙端原生开发语言:ArkTs
        web前端语言:html+css+js  框架
       原生语言和web前端混合在一起开发的一种方式,目前已经发展成为系统提供壳的原生能力sdk+web前端提供页面及交互的一种方式。

       webview:网页容器,用来容纳h5所实现的html页面和js渲染,本质上就相当于在我们app应用中的一个浏览器

    2、如何使用
        Web({
                src: "网页地址",
                controller: new webview.WebviewController()
        })

    3、网页端和鸿蒙原生端通信
        3.1 分配端口:创建两个端口,一个给网页另外一个给鸿蒙端,然后通过端口发送和接收数据。
            第一步:创建通信端口:
                 this.currentPorts = this.controller.createWebMessagePorts()
            第二步:分配端口:
                 this.controller.postMessage("trans_port", [this.currentPorts[1]], "*")
            第三步:网页接收和发送数据
                //需要接收端口
                var currentPort
                window.addEventListener("message",(event)=>{
                    if(event.data =="trans_port"){
                        currentPort = event.ports[0]

                        //接收鸿蒙端发送的消息
                        currentPort.onmessage=(event)=>{
                            document.querySelector("#myDiv").innerText = event.data
                        }
                    }
                })

                function sendMessage(){
                        if(currentPort){
                            var obj = {"type":"alert", "message":"我是网页中的获取的数据"}
                            //通过网页端的端口发送数据给鸿蒙端
                            currentPort.postMessage(JSON.stringify(obj))
                        }
                    }

            第四步:鸿蒙端发送和接收数据
              //鸿蒙端发送数据给网页
              sendMessage() {
                this.currentPorts[0].postMessageEvent("圣诞快乐!!!!")
              }

              //通过鸿蒙端的端口接收数据
              this.currentPorts[0].onMessageEvent((result: webview.WebMessage) => {
                if (typeof result === "string") {
                  const obj = JSON.parse(result) as DataResult
                  promptAction.showToast({ message: obj.message })
                }
              })

        3.2 直接方法调用:sdk注入方式,在鸿蒙端或网页端定义一些方法,供对方直接调用[重点掌握]
            1、在网页调用鸿蒙端的方法:
                Web({
                        src: $rawfile("demo2.html"),
                        controller: this.controller
                      })
                        .width('100%')
                        .javaScriptProxy({
                          name: "itluma", //注入对象的名称
                          object: this.obj, //注入的具体对象
                          methodList: ["openPhoto"],
                          controller: this.controller
                        })
                在网页中就可以直接使用
                    window.itluma.openPhoto() //调用鸿蒙注入的方法

            2、在鸿蒙端也可以调用网页的方法
                this.controller.runJavaScript(`网页中的js方法`)



七、发布应用基本流程
    1.生成秘钥和证书请求文件(*.p12, *.csr)
        秘钥文件主要用来对数据签名和验证、证书请求文件用于向AGC申请数字证书用的
            密码:swift123456 别名:swift
    2.申请发布证书(*.cer)
        AGC颁发为应用配置签名信息的数字证书,用来保障软件代码的完整性和发布者的身份真实性
    3.申请发布Profile文件(*.p7b)
        包含一些应用包名、数字证书信息、应用申请的权利以及应用调试的设备列表等等,每个应用都必须包含一个Profile文件

    需要添加一下公钥指纹信息!

    4.配置签名:因为有些Kit必须使用真实签名才能使用,比如Map

    5.编译打包
    6.上架
八、性能优化:
    1.感知优化:动画
    2.渲染优化:懒加载、组件复用、布局等等
    3.并发优化:多线程 图片压缩
        耗时任务:IO操作、文件压缩、解压缩、裁剪、位移
       文件上传-图片不要全用原图,先压缩然后再上传
        a.创建子线程(worker、taskpool)
        b.将主线程拿到的图片传递给子线程
        c.子线程进行图片压缩
        d.压缩完成后,将完成的图片在回传给主线程
        e.销毁子线程
        f.主线程继续上传操作

九、面试中常见的项目问题
1、说一下你做的这个项目及其开发项目流程
    项目背景介绍:在公司已有业务系统基础上,完成鸿蒙端的适配,主要业务流程是通过调用后台接口来显示,这是一个物理类型的项目,主要服务与企业完成物品的运输过程,给司机提供快捷的操作方式
                核心流程,选择任务-》提货-》延迟提货-》交货-》上报异常-》回车登记,这是一个送货流程
    - 构建项目基础环境
    - 进行架构设计,分层架构,主要分2层架构,特征层和公共层, hap/har
    - 导入一些设计资源,图片、色值
    - 创建项目基础目录:组件库|数据模型|工具|常量
    - 开发常用的工具类型:网络请求、首选项、数据类型转换等等
    - 封装常用的组件:列表组件|加载|上传|弹框|卡片
    - 按照需求完成业务流程,并交付测试
    - 签名、发布上线

2、你这个项目中有什么你觉得比较难点
    - 使用原生http请求比较繁琐,在业务的基础上进行统一封装,规范请求类型、统一处理返回类型
    - 第三库的使用,axios|dayjs|log
    - 针对业务场景封装原生组件,HmSelectCard因为这个组件基础组件和业务组件解耦的一个应用,既要保证组件的独立性,又要保证功能的适用性
    - 封装上传组件-唤出相册-采用多线程进行图片压缩-写入沙箱-调用后端服务进行上传-进行地址回显
    - 上报位置-获取定位
        第一种:webview,混合开发方式
        第二种:采用鸿蒙原生kit来解决,模拟器会存在问题,需要真机环境
    - tabs组件的布局问题

3、你有没有封装过鸿蒙组件,请说一下过程
    在我们的这个项目中,我们总共封装了几十个组件:进度条、卡片、上传、弹框、提示框、预览等等
    过程:
        1.明确组件的功能需求:交互逻辑、基本UI展示
        2.创建组件项目基础结构
            @Component
            struct ComponentName{
                build(){

                }
            }
        3.配置组件的属性和对外的接口
            属性:方便使用者在使用时可以根据自己的需求去配置:大小、尺寸、位置等等
            接口:定义组件对外提供的方法:触发特定的动作

4、鸿蒙中组件之间如何通信
    组件之间通信:
        以下这些基本是采用v1的状态管理:
       - 单向:@Prop
       - 双向:@Link  @ObjectLink|@Observed
       - 后代:@Provide|@Consume

   跨组件通信:
    应用间通信:
       - LocalStorage:页面
       - AppStorage:应用
       - PersistentStorage:持久化
    线程:
       - eventHub:线程中
       - Emitter:线程之间

5、鸿蒙技术是怎么学的?
    参考:公司业务转岗需要,提供转岗的技术储备,并且经常性的参加华为提供的企业实训,通过鸿蒙的官方技术手册学习
        23年是基于鸿蒙4.0(api9)进行适配,在24年6月份后基于鸿蒙5.0(api11-12)进行适配

6、项目是否已经上线
    上线进行中,公司业务人员在和华为沟通中,因为上架比较麻烦目前还有很多适配问题需要解决,估计月底能够完成!

7、简历上如何描述个人项目
    是一个交通|医疗|电商|建筑|餐饮行业的鸿蒙4.0到5.0的过渡版项目设计、开发、测试及上架(因审核周期长、待最终交付)
   - 完成基础项目库的设计开发,封装了十几个基础组件,并拆解到har包中供其他模块使用
   - 搭建项目基础架构,包括组件库-UI适配-数据管理-工具使用功能-页面布局等等
   - 重点攻关5.0设备中基于项目实际需求的技术特性-比如:tab样式布局、网络工具类、文件上传、定位等等
   - 重点攻关混合开发|支付|挂号|线程通信
   - 集成各种系统能力-相册-电话-震动-播放-视频-定位-权限-导航-通知-提醒-ability通信
   - 项目优化:动效优化、渲染优化、并发能力
   - 配置签名:秘钥和请求证书->发布证书->Profile文件->配置签名-》上架AGC全流程

8、开发鸿蒙需要注意的点
    - 模拟器很多能力不足
    - 真机有些无法debugger
    - 没有热更新
    - 文档问题-不好找、用法和代码验证起来需要大量时间
    - next类型是最大的一个问题

9、总结结束!!!!!!!!!!!!!



毕业项目:项目答辩,项目选题,下周一前,告诉老师你的项目题目,自选题材
    突出重点:鸿蒙界面的布局能力、业务能力
    https://www.axureshop.com/、https://js.design
    案例:https://www.axureshop.com/ys/2208121
         https://www.axureshop.com/ys/519174
    案例:https://js.design/v?i=ZFEixv&p=VdGWIn41JR&f=_RPuD2j6c9QveZpUPzFk6&wi=true&box=14pm&scale=fit&mode=programmer

空文件

简介

暂无描述 展开 收起
HTML 等 2 种语言
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化