【每日学点鸿蒙知识】初始化BigInt、包体积瘦身、Tabs嵌套Grid、老年化适配、Release打包失败
1、HarmonyOS 在一个类中,怎么初始化一个BigInt类型的属性?
可以通过BigInt关键字来初始化,如:
let a = BigInt(1); let b = BigInt("2");
关于Uint8Array与string互转,示例:
// string 转Uint8Array
//1得到输入的数据字符串
let text1 = "hello world"
//2创建ArrayBuffer对象
let buf = new ArrayBuffer(text1.length*2);
//使用typeArray中的Uint16Array方法设置数据
let uint8 = new Uint8Array(buf);
//使用循环设置数据
for(let i =0;i<text1.length;i++){//使用charCodeAt字符转为二进制编码uint8[i] = text1.charCodeAt(i);
}
console.log('uint8----',uint8)// Uint8Array --> **string**
let spArray = uint8.slice(0,3);
let dataString = '';
for (let i = 0; i < spArray.length; i++) {dataString += String.fromCharCode(spArray[i]);
}console.log('dataString-----',dataString)
2、不同的hap使用相同的so,在打最终包的时候可以进行合并吗?包体积因为相同so的问题 减少包体积
减小应用包大小是提升应用下载、安装体验的重要方式之一。通过压缩、精简或者复用应用中的代码或资源,可以有效降低应用的大小,提升应用下载和安装速度,减少系统空间占用。
开发者可以参考下面三种方法减小应用包大小:
配置so压缩选项,通过压缩so库来减小应用包大小。应用存在多包(HAP、HSP)的场景时,可以使用HSP(Harmony Shared Package)动态共享包在应用的多个包(HAP、HSP)之间共享代码和资源,消除使用HAR(Harmony Archive)静态共享包造成的多包(HAP、HSP)间代码和资源的重复拷贝,从而减小应用包大小。使用扫描工具扫描分析App、HAP、HSP包,根据输出的检测报告,采取相应措施优化应用。减小应用包大小的方法配置so压缩选项当前DevEco Studio默认打包应用时不压缩so库文件,配置so压缩选项后,DevEco Studio会将so库文件以压缩形式打包到包中,从而减小应用包大小。
配置方法:https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/quick-start/module-configuration-file.md
修改应用模块配置文件module.json5中的compressNativeLibs字段,将值配置为true,重新编译、打包应用。{“module”: {// …“compressNativeLibs”: true // 标识libs库以压缩存储方式打包}}
so压缩效果
以DevEco Studio中C++默认库文件为例,压缩前后的文件大小对比如下:
文件名 原始大小 压缩后大小 压缩率armeabi-v7a/libc++_shared.so 1,108k 386k 34%
多包场景下使用HSP共享代码和资源当前系统提供了两种共享包,HAR(Harmony Archive)静态共享包和HSP(Harmony Shared Package)动态共享包。
HAR与HSP都是为了实现代码和资源的共享,都可以包含代码、C++库、资源和配置文件,最大的不同之处在于:HAR中的代码和资源跟随使用方编译,如果有多个使用方,它们的编译产物中会存在多份相同拷贝;而HSP中的代码和资源可以独立编译,运行时在一个进程中代码也只会存在一份。
在多包场景下,如果应用的多个HAP或HSP包使用HAR包实现代码和资源的共享,那么打包后的每个HAP或HSP包中都会存在一份共享HAR包的拷贝,导致App包中存在冗余代码和资源。应用模块HAP1和HAP2/HSP1都引用了HAR2和HAR3,打包后,App包中HAR2和HAR3存在多份重复拷贝,体积较大。
这种场景下,推荐开发者使用HSP代替HAR实现代码和资源共享。使用HSP2对原应用进行升级改造,打包后,App包中HAR2和HAR3只存在一份拷贝,HAR2、HAR3总大小大于HSP(11k)时,可以减小应用包大小。
https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/tools/app-check-tool.md
使用扫描工具分析应用包扫描工具可用于分析检测应用包,根据不同的参数设定,扫描指定路径的App、HAP、HSP包内容并输出检测结果报告,为开发者优化包结构或排查问题提供数据支撑。目前扫描工具支持以下几种分析统计:
扫描重复文件。扫描超出指定大小的文件。统计分析各类型文件的总大小和占比。根据扫描结果按照如下方式优化应用
重复文件
同一包内有重复资源,删除重复资源。多包(HAP、HSP)间重复资源,可以使用HSP实现资源的复用。较大文件
确认是否为应用必需,是否可删除。JPG、PNG、GIF等文件,可以考虑压缩。特定类型文件
so文件,通过配置so压缩选项来实现压缩打包。JPG、PNG、GIF等文件,可以考虑压缩。
3、HarmonyOS Tabs嵌套Grid问题?
tabs 的tabcontent 使用grid容器,Grid的元素个数不固定,导致各个tabcontent内容高度不对定,遇到的问题是,tabcontent 总是成了元素对多的高度,导致元素少的也很高,求支援
由于TabContent组件不支持设置通用高度属性,其高度由Tabs父组件高度与TabBar组件高度决定,tabs不能自适应高度。 Grid组件,rowsTemplate、columnsTemplate都不设置时layoutDirection、maxcount、minCount、cellLength才生效,maxCount内的值为多少,对应方向上最大显示行数就是多少,可以理解为maxCount有一个高度控制开关,只要设置了maxCount之后,Grid就能实现自适应高度效果,具体使用方式请参考文档:
https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-container-grid-V5#%E7%A4%BA%E4%BE%8B6
@Entry
@Component
struct Index {@State numbers: string[] = []aboutToAppear() {for (let i = 1; i <= 35; i++) {this.numbers.push(i + '')}}build() {Scroll() {Column({ space: 5 }) {Blank()Text('rowsTemplate、columnsTemplate都不设置layoutDirection、maxcount、minCount、cellLength才生效').fontSize(15).fontColor(0xCCCCCC).width('90%')Grid() {ForEach(this.numbers, (day: string) => {GridItem() {Text(day).fontSize(16).backgroundColor(0xF9CF93)}.width(40).height(80).borderWidth(2).borderColor(Color.Red)}, (day: string) => day)}.columnsGap(10).rowsGap(10).backgroundColor(0xFAEEE0).maxCount(6).minCount(2).cellLength(0).layoutDirection(GridDirection.Row).backgroundColor(Color.Blue)}.width('90%').margin({ top: 5, left: 5, right: 5 }).align(Alignment.Center)}}
}
5、HarmonyOS 有没有适老年化的最佳实践或demo?
有没有适老年化的最佳实践或demo,在系统设置中调大字体后,应用内的布局将非常丑陋。希望有一个最大和最小的字号,无论用户怎么调整,字号只会在这两个值范围内变化。maxFontSize和minFontSize配合maxLine并不起作用。
// xxx.ets
import measure from '@ohos.measure'@Entry
@Component
struct TextInputExample {@State text: string = ''@State truncatedHint: string = "文本未截断"controller: TextInputController = new TextInputController()build() {Column() {TextInput({ text: this.text, placeholder: 'input your word...', controller: this.controller }).placeholderColor(Color.Grey).placeholderFont({ size: 14, weight: 400 }).caretColor(Color.Blue).width(400).height(40).margin(20).fontSize(14).fontColor(Color.Black).onChange((value: string) => {this.text = valuelet textSizeShow1 : SizeOptions = measure.measureTextSize({textContent: this.text,constraintWidth: 100,fontSize: 14,overflow: TextOverflow.Ellipsis,maxLines: 2})let textSizeShow2 : SizeOptions = measure.measureTextSize({textContent: this.text + " ",constraintWidth: 100,fontSize: 14,overflow: TextOverflow.Ellipsis,maxLines: 2000000})console.log("tag textSizeShow1.height="+ textSizeShow1.height);console.log("tagtextSizeShow2.height="+ textSizeShow2.height);if (textSizeShow2 && textSizeShow1 && textSizeShow2?.height && textSizeShow1?.height && (textSizeShow2?.height > textSizeShow1?.height)) {console.log("tag 文本截断")this.truncatedHint = "文本截断"} else {console.log("tag文本未截断")this.truncatedHint = "文本未截断"}})Text(this.text).maxLines(2).width(100).textOverflow({overflow: TextOverflow.Ellipsis}).border({ width: 1 }).minFontSize(14).maxFontSize(24)Text(this.truncatedHint)}.width('100%')}
}
5、编译release包失败?
hvigor Finished :entry:default@PackageHap… after 571 mshvigor Finished :entry:default@SignHap… after 2 s 68 ms
hvigor Finished :entry:assembleHap… after 1 mshvigor Finished ::MakeProjectPackInfo… after 3 ms
hvigor Finished ::GeneratePackRes… after 1 ms
hvigor ERROR: Failed ::PackageApp…
hvigor ERROR: Tools execution failed.
2024/06/17 16:55:38.923 - Ohos BundleTool [Error]: debug is different.
2024/06/17 16:55:38.923 - Ohos BundleTool [Error]: some app variable is different.
2024/06/17 16:55:38.923 - Ohos BundleTool [Error]: Compressor::compressAppMode compress failed.
2024/06/17 16:55:38.926 - Ohos BundleTool [Error]: Compressor::compressProcess Bundle exception.
2024/06/17 16:55:38.926 - Ohos BundleTool [Error]: Compressor::compressProcess compress failed.2024/06/17 16:55:38.926 - Ohos BundleTool [Error]: CompressEntrance::main exit, compress failedDetail: Please check the message from tools.hvigor ERROR: BUILD FAILED in 23 s 837 ms
出现这种问题是多模块引用时,各模块 app.json5的vendor字段不一致导致。打包时应用了哪些模块,排查方法如下:
- File-> Setttings -> Build, Execution, Deployment -> Build Tools -> Hvigor 中将 Use log level 改成Debug。
- 重新执行 Build apps
- Build 日志中搜索 “app_packing_tool”入参:–hap-path、–hsp-path,可得构建app时所有依赖的hsp和hap
- hsp和hap的vendor要一致。
以我本地DevEco编译时,build日志检索结果如下:
hvigor DEBUG BasePackAppTask Use tool [PackageApp][‘java’,‘-Dfile.encoding=GBK’,‘-jar’,
‘D:\DevEco_pakage\Huawei\harmonyos\HarmonyOS-NEXT-DP1\base\toolchains\lib\app_packing_tool.jar’,‘–mode’,‘app’,‘–pack-info-path’,‘D:\demo\MyApplication\build\outputs\default\pack.info’,‘–hap-path’,
‘D:\demo\MyApplication\entry\build\default\outputs\default\app\entry-default.hap’,‘–hsp-path’,
‘D:\demo\MyApplication\library\build\default\outputs\default\app\library-default.hsp’,‘–force’,‘true’,‘–out-path’,
‘D:\demo\MyApplication\build\outputs\default\MyApplication-default-unsigned.app’,‘–main-module-limit’,‘2’,‘–normal-module-limit’,‘2’]
具体安装配置流程,请参考:https://developer.huawei.com/consumer/cn/doc/app/agc-help-harmonyos-internalrelease-0000001756878768
相关文章:
【每日学点鸿蒙知识】初始化BigInt、包体积瘦身、Tabs嵌套Grid、老年化适配、Release打包失败
1、HarmonyOS 在一个类中,怎么初始化一个BigInt类型的属性? 可以通过BigInt关键字来初始化,如: let a BigInt(1); let b BigInt("2"); 关于Uint8Array与string互转,示例: // string 转Uint8…...
Android service framework笔记
1. 网络摘录如何添加一个Application Framework Service(一)(without native code) 如何添加一个Application Framework Service(二)(with native code) 2.书籍摘录...
安全攻防:中间人攻击
1. 中间人攻击定义 中间人攻击(简称MITM)是攻击者在进行网络通信的双方中间,分别与两端建立独立的联系,并进行数据嗅探甚至篡改,而通信的双方却对中间人毫不知情,认为自己是直接在与对端通信。2. 常见中间人…...
【Rust自学】7.3. use关键字 Pt.1:use的使用与as关键字
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 7.3.1. use的作用 use的作用是将路径导入到当前作用域内。而引入的内容仍然是遵守私有性原则,也就是只有公共的部分引入进来才…...
变长的时间戳(第4版)
以32位为单位,一个时间戳可以是32位、64位、96位。 122932 113032 A类:(40036597)1000146097000≤229 B类:246060100086400000≤229 C类:1000100010001000000000≤230 每400年有40036597146097天,A类时间戳能表达1000…...
Intent--组件通信
组件通信1 获取子活动的返回值 创建Activity时实现自动注册!【Activity必须要注册才能使用】 默认 LinearLayout 布局,注意 xml 中约束布局的使用; 若需要更改 线性布局 只需要将标签更改为 LinearLayout 即可,记得 设置线性布局…...
Android14 OTA升级速度过慢问题解决方案
软件版本:Android14 硬件平台:QCS6115 问题:OTA整包升级接近20min,太长无法忍受。 该问题为Android高版本的虚拟AB分区压缩技术所致,其实就是时间换空间,个人推测AB分区压缩会节约硬件存储空间࿰…...
仓颉语言实战——1. 类型
仓颉语言实战——1. 类型 仓颉语言(Cangjie Language)是一个现代化的、简洁而强大的编程语言,它的类型系统为高效开发提供了极大的支持。本篇文章将围绕仓颉语言中的类型系统展开,结合实战代码,帮助开发者快速掌握这一…...
AWTK 在全志 tina linux 上支持 2D 图形加速
全志 tina linux 2D 图形加速插件。 开发环境为 全志 Tina Linux 虚拟机。 1. 准备 下载 awtk git clone https://github.com/zlgopen/awtk.git下载 awtk-linux-fb git clone https://github.com/zlgopen/awtk-linux-fb.git下载 awtk-tina-g2d git clone https://github.co…...
MySql幻读问题
认识具有反复性。 之前以为理解了幻读,最近看黑马的mysql教程以为再次加深了认识。然而现在认为之前的理解都是错误的,而且网上很多关于幻读的解释,都不太准确。 关于幻读的最佳解释还是要看官网mysql官网幻读解释 脏读和不可重复读比较好理…...
(南京观海微电子)——GH7009开机黑屏案例分析
一、 现象描述: 不良现象: LVDS模组,开机大概2秒后就黑屏。 二、问题分析 等主机进入Kernel 后做以下测试: 1、手动reset LCM 后 可以显示正常; 总结: 1)uboot 部分HS 太窄,仅有4个clk宽度&am…...
【Rust自学】7.4. use关键字 Pt.2 :重导入与换国内镜像源教程
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 7.4.1. 使用pub use重新导入名称 使用use将路径导入作用域内后。该名称在词作用域内是私有的。 以上一篇文章的代码为例: m…...
前端学习DAY28(水平)
元素水平方向的布局 元素在其父元素中水平方向的位置有以下几个属性共同决定 margin-left border-left padding-left width padding-right border-right margin-right 一个元素在其父元素中,水平布局必须要满足以下的等式 margin-left border-left …...
【MyBatis】day01搭建MyBatis框架
目录 第一章 初识Mybatis 第二章 搭建Mybatis框架 第三章 Mybatis核心配置详解【mybatis-config.xml】 第一章 初识Mybatis 1.1 框架概述 生活中“框架” 买房子 笔记本电脑 程序中框架【代码半成品】 Mybatis框架:持久化层框架【dao层】 SpringMVC框架&…...
yolov7算法及其改进
yolov7算法及其改进 1、YOLOV7简介2、ELAN架构设计2.1、Partial Residual Networks2.1.1、Masked Residual Layer2.1.2、Asymmetric Residual Layer 2.2、Cross Stage Partial Networks2.2.1、Cross stage partial operation2.2.2、Gradient flow truncate operation 2.3、Effi…...
spring cloud微服务-OpenFeign的使用
OpenFeign的使用 openFeign的作用是服务间的远程调用 ,比如通过OpenFeign可以实现调用远程服务。 已经有了LoadBalancer为什么还要用openFeign? 在微服务架构中,LoadBalancer和OpenFeign虽然都提供了服务间调用的能力,但它们的设计目的和…...
【汇编】关于函数调用过程的若干问题
1. 为什么需要bp指针? 因为bp是栈帧的起始地址,函数内的局部栈变量,采用相对bp的内存寻址。不能相对于sp,sp是一直在变的。 2. 函数调用过程? 函数开始,先压栈bp,保存父函数栈底指针bp&#…...
针对Kali 系统进行分区设置
手动设置分区 Kali 安装之腾讯云经验遇到坑_腾讯云安装kali-CSDN博客 安装过程中的几处关键点,文字总结如下: ①分区--手动 ②是否创建空的分区表 ---yes ③选择---创建一个新的分区 ④大小--默认-----主分区 ⑤分区类型----系统)一个逻辑分区 ⑥是否…...
C语言简单测试总结
前言 在学C语言之前回顾一下C中的一些知识.选用的是中国大学MOOC中C程序设计(面向对象进阶)中的C语言水平评估测试题. 题目 The keyword "unsigned" can modify the keyword [ B ] A.signed B.long C.long double D.float题解:unsigned是无符号的意识,通常在…...
Android OpenGl(二) Shader
一、Shader 1、什么是Shader,为什么要使用Shder (1)shader运行在gpu上的小程序 (2)以前使用固定管线,但缺点是灵活度不够,无法满足复杂需求,为了解决固定管线的缺点,出…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
质量体系的重要
质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...
使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度
文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...
从物理机到云原生:全面解析计算虚拟化技术的演进与应用
前言:我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM(Java Virtual Machine)让"一次编写,到处运行"成为可能。这个软件层面的虚拟化让我着迷,但直到后来接触VMware和Doc…...
AxureRP-Pro-Beta-Setup_114413.exe (6.0.0.2887)
Name:3ddown Serial:FiCGEezgdGoYILo8U/2MFyCWj0jZoJc/sziRRj2/ENvtEq7w1RH97k5MWctqVHA 注册用户名:Axure 序列号:8t3Yk/zu4cX601/seX6wBZgYRVj/lkC2PICCdO4sFKCCLx8mcCnccoylVb40lP...
