# swift_5_0
**Repository Path**: xuan1206/swift_5_0
## Basic Information
- **Project Name**: swift_5_0
- **Description**: 顺风速达项目5.0版本
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-03-07
- **Last Updated**: 2025-03-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
WebView混合开发
1.什么是混合开发
鸿蒙:ArkTs原生开发语言解决问题
Web前端:html/js/css 框架 vue react angular
鸿蒙+web前端:解决问题,混合开发
鸿蒙提供网页容器用来容纳h5所实现的html页面和js渲染,本质上就相当于在我们的app应用中存在一个浏览器,我们需要将访问的地址放置到
webview的网页容器中,这就混合开发。
2.混合开发中web组件的使用
import { webview } from '@kit.ArkWeb';
Web({
src: "https://www.bilibili.com" 或者放一个本地网页 $rawfile("demo.html"),
controller: new webview.WebviewController()
})
.width("100%")
.layoutWeight(1)
3.混合开发中2中通信方式
3.1 通过端口通信模式:可以分配2个端口,网页端一个,鸿蒙端一个
1.分配端口
a、鸿蒙中创建端口,并分配其中一个给网页
createPorts() {
//1.创建通信端口
this.currentPorts = this.controller.createWebMessagePorts()
//2.分配端口
if (this.currentPorts.length) {
//将创建的第二个端口分配给网页
this.controller.postMessage("trans_port", [this.currentPorts[1]], "*")
}
}
什么时候调用该方法呢?web组件加载完网页后调用创建端口的方法
Web({
...
})
...
.onPageEnd(() => {
this.createPorts()
})
b、网页中接收端口
2.双方通信
a、网页发送数据给鸿蒙端
function sendMessage(){
if(currentPort){
currentPort.postMessage(JSON.stringify({type:"alert", message:"我是网页中的数据"}))
}
}
在鸿蒙端添加消息监听
createPorts() {
//1.创建通信端口
this.currentPorts = this.controller.createWebMessagePorts()
//2.分配端口
if (this.currentPorts.length) {
//将创建的第二个端口分配给网页
this.controller.postMessage("trans_port", [this.currentPorts[1]], "*")
//通过留下来的这个端口接收网页数据
this.currentPorts[0].onMessageEvent((result: webview.WebMessage) => {
if (typeof result === "string") {
const data = JSON.parse(result) as DataResult
if (data.type == "alert") {
promptAction.showToast({ message: data.message })
}
}
})
}
}
b、鸿蒙端发送数据给网页端
1.鸿蒙端发送数据
sendMessage() {
this.currentPorts[0].postMessageEvent("我是鸿蒙端的数据")
}
Button("原生组件")
.onClick(() => {
//promptAction.showToast({ message: "原生提示" })
this.sendMessage()
})
2.网页端接收数据
//给窗体添加一个message事件监听
window.addEventListener("message", (event)=>{
if(event.data=="trans_port"){
currentPort = event.ports[0] //接收鸿蒙端分配的端口
if(currentPort){
currentPort.onmessage=(event)=>{
document.querySelector("#myDiv").innerText = event.data
}
}
}
})
3.2 调用方法方式传值
1.网页端调用鸿蒙端方法
a、先在鸿蒙端将方法描述清楚
Web({
src: $rawfile("demo2.html"),
controller: this.obj.controller
})
.width('100%')
.layoutWeight(1)
.javaScriptProxy({
name: "atstudy", //定义一个名称,可以任意
object: this.obj, //方法的对象
methodList: ["openPhoto"], //方法名
controller: this.obj.controller //控制器
})
b、网页端调用方法
window.atstudy.openPhoto()
2.鸿蒙端调用网页端方法
a、在网页端定义方法
function setPhoto(url){
document.querySelector("#myImg").src=url
document.querySelector("#myDiv").innerText=url
}
b、鸿蒙端调用方法
this.controller.runJavaScript(`setPhoto('${result.photoUris[0]}')`)
二、项目架构
APP/HAP/HSP/HAR
APP:是一个应用
HAP:应用安装和运行的基本结构,包括代码、资源、第三库、配置文件,entry/feature
HSP、HAR:共享包
HSP:动态共享包,包括代码、资源和配置文件,一般作为HAP的依赖项,运行时与应用在同一个进程中
HAR:静态共享包,包括代码、资源和配置文件,一般作为HAP的依赖项,打包构建时,HAR的编译产物会被放入HAP中,作为HAP的一部分
HAR还可以作为第三方库发布OHPM中共大家使用
三、项目签名
配置能够发布应用的签名:需要4中类型的配置文件p12、p7b、cer、csr
1.申请秘钥和证书请求文件,生成一个*.p12的文件,请求文件就是csr文件,包括秘钥对中详细信息
申请秘钥需要配置文件名及密码:swift.p12, 密码:swift123456,别名为:swift
2.申请发布证书(申请调试证书)
生成成功后,需要下载本地 *.cer
3.申请发布Profile
生成成功后,也需要下载本地 *.p7b
4.配置签名
有些场景还需要给当前项目添加公钥指纹,然后在entry模块下的module.json5文件中添加client_id
5.编译打包
6.上架
四、性能问题
1、布局的优化\渲染性能优化
减少组件的节点数,合理使用布局容器组件
使用@Builder替代自定义组件
控制渲染的范围,长列表的优化:List优化、Grid优化【ColumnStart,ColumEnd】、瀑布流优化【WaterFlow】:LazyForEach
组件复用, id
2、感知的优化
转场动画、导航转场【Navigation\router】
3、运行性能
并发能力,多线程的使用,TaskPool、Worker线程的使用
图片上传不需要全用原图节省资源,上传图片时先进行图片压缩然后再上传
1.建立多线程-子线程
2.将主线程拿到图片,然后给子线程
3.子线程进行图片的压缩
4.压缩完成后,将完成的图片给主线程
5.子线程关闭销毁
6.主线程继续完成上传操作
五、毕业项目
1、自选题材:
https://www.axureshop.com/
https://js.design
案例1:https://www.axureshop.com/ys/2319227
案例2:https://js.design/v?i=ZFEixv&p=VdGWIn41JR&f=0eFRuSdMrRgEdJ8S7uT81&wi=true&box=14pm&scale=fit&mode=programmer
2、要有完整的业务功能
要做相关应用的行业背景参考,尽可能有对应app的使用经验【搜索对应的app、微信小程序】,能够走通一条业务线
3、最好结合个人实际情况选题
专业、工作背景
4、完成项目后需要准备一个ppt,主要介绍项目的背景、业务功能和使用的技术及总结!
5、完成后将项目和ppt一起打包发给我!!!
注:计划时间2周,如何情况特殊情提前说明!
80% 做鸿蒙的适配工作!