当前位置: 首页 > news >正文

【每日学点鸿蒙知识】初始化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字段不一致导致。打包时应用了哪些模块,排查方法如下:

  1. File-> Setttings -> Build, Execution, Deployment -> Build Tools -> Hvigor 中将 Use log level 改成Debug。
  2. 重新执行 Build apps
  3. Build 日志中搜索 “app_packing_tool”入参:–hap-path、–hsp-path,可得构建app时所有依赖的hsp和hap
  4. 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 在一个类中&#xff0c;怎么初始化一个BigInt类型的属性&#xff1f; 可以通过BigInt关键字来初始化&#xff0c;如&#xff1a; let a BigInt(1); let b BigInt("2"); 关于Uint8Array与string互转&#xff0c;示例&#xff1a; // string 转Uint8…...

Android service framework笔记

1. 网络摘录如何添加一个Application Framework Service(一)(without native code) 如何添加一个Application Framework Service(二)(with native code) 2.书籍摘录...

安全攻防:中间人攻击

1. 中间人攻击定义 中间人攻击&#xff08;简称MITM&#xff09;是攻击者在进行网络通信的双方中间&#xff0c;分别与两端建立独立的联系&#xff0c;并进行数据嗅探甚至篡改&#xff0c;而通信的双方却对中间人毫不知情&#xff0c;认为自己是直接在与对端通信。2. 常见中间人…...

【Rust自学】7.3. use关键字 Pt.1:use的使用与as关键字

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 7.3.1. use的作用 use的作用是将路径导入到当前作用域内。而引入的内容仍然是遵守私有性原则&#xff0c;也就是只有公共的部分引入进来才…...

变长的时间戳(第4版)

以32位为单位&#xff0c;一个时间戳可以是32位、64位、96位。 122932 113032 A类&#xff1a;(40036597)1000146097000≤229 B类&#xff1a;246060100086400000≤229 C类&#xff1a;1000100010001000000000≤230 每400年有40036597146097天&#xff0c;A类时间戳能表达1000…...

Intent--组件通信

组件通信1 获取子活动的返回值 创建Activity时实现自动注册&#xff01;【Activity必须要注册才能使用】 默认 LinearLayout 布局&#xff0c;注意 xml 中约束布局的使用&#xff1b; 若需要更改 线性布局 只需要将标签更改为 LinearLayout 即可&#xff0c;记得 设置线性布局…...

Android14 OTA升级速度过慢问题解决方案

软件版本&#xff1a;Android14 硬件平台&#xff1a;QCS6115 问题&#xff1a;OTA整包升级接近20min&#xff0c;太长无法忍受。 该问题为Android高版本的虚拟AB分区压缩技术所致&#xff0c;其实就是时间换空间&#xff0c;个人推测AB分区压缩会节约硬件存储空间&#xff0…...

仓颉语言实战——1. 类型

仓颉语言实战——1. 类型 仓颉语言&#xff08;Cangjie Language&#xff09;是一个现代化的、简洁而强大的编程语言&#xff0c;它的类型系统为高效开发提供了极大的支持。本篇文章将围绕仓颉语言中的类型系统展开&#xff0c;结合实战代码&#xff0c;帮助开发者快速掌握这一…...

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幻读问题

认识具有反复性。 之前以为理解了幻读&#xff0c;最近看黑马的mysql教程以为再次加深了认识。然而现在认为之前的理解都是错误的&#xff0c;而且网上很多关于幻读的解释&#xff0c;都不太准确。 关于幻读的最佳解释还是要看官网mysql官网幻读解释 脏读和不可重复读比较好理…...

(南京观海微电子)——GH7009开机黑屏案例分析

一、 现象描述&#xff1a; 不良现象: LVDS模组&#xff0c;开机大概2秒后就黑屏。 二、问题分析 等主机进入Kernel 后做以下测试&#xff1a; 1、手动reset LCM 后 可以显示正常&#xff1b; 总结&#xff1a; 1&#xff09;uboot 部分HS 太窄&#xff0c;仅有4个clk宽度&am…...

【Rust自学】7.4. use关键字 Pt.2 :重导入与换国内镜像源教程

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 7.4.1. 使用pub use重新导入名称 使用use将路径导入作用域内后。该名称在词作用域内是私有的。 以上一篇文章的代码为例&#xff1a; m…...

前端学习DAY28(水平)

元素水平方向的布局 元素在其父元素中水平方向的位置有以下几个属性共同决定 margin-left border-left padding-left width padding-right border-right margin-right 一个元素在其父元素中&#xff0c;水平布局必须要满足以下的等式 margin-left border-left …...

【MyBatis】day01搭建MyBatis框架

目录 第一章 初识Mybatis 第二章 搭建Mybatis框架 第三章 Mybatis核心配置详解【mybatis-config.xml】 第一章 初识Mybatis 1.1 框架概述 生活中“框架” 买房子 笔记本电脑 程序中框架【代码半成品】 Mybatis框架&#xff1a;持久化层框架【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的作用是服务间的远程调用 &#xff0c;比如通过OpenFeign可以实现调用远程服务。 已经有了LoadBalancer为什么还要用openFeign? 在微服务架构中&#xff0c;LoadBalancer和OpenFeign虽然都提供了服务间调用的能力&#xff0c;但它们的设计目的和…...

【汇编】关于函数调用过程的若干问题

1. 为什么需要bp指针&#xff1f; 因为bp是栈帧的起始地址&#xff0c;函数内的局部栈变量&#xff0c;采用相对bp的内存寻址。不能相对于sp&#xff0c;sp是一直在变的。 2. 函数调用过程&#xff1f; 函数开始&#xff0c;先压栈bp&#xff0c;保存父函数栈底指针bp&#…...

针对Kali 系统进行分区设置

手动设置分区 Kali 安装之腾讯云经验遇到坑_腾讯云安装kali-CSDN博客 安装过程中的几处关键点,文字总结如下&#xff1a; ①分区--手动 ②是否创建空的分区表 ---yes ③选择---创建一个新的分区 ④大小--默认-----主分区 ⑤分区类型----系统&#xff09;一个逻辑分区 ⑥是否…...

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&#xff0c;为什么要使用Shder &#xff08;1&#xff09;shader运行在gpu上的小程序 &#xff08;2&#xff09;以前使用固定管线&#xff0c;但缺点是灵活度不够&#xff0c;无法满足复杂需求&#xff0c;为了解决固定管线的缺点&#xff0c;出…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中&#xff0c;部分节点存储的数据量或访问量远高于其他节点&#xff0c;导致这些节点负载过高&#xff0c;影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

图表类系列各种样式PPT模版分享

图标图表系列PPT模版&#xff0c;柱状图PPT模版&#xff0c;线状图PPT模版&#xff0c;折线图PPT模版&#xff0c;饼状图PPT模版&#xff0c;雷达图PPT模版&#xff0c;树状图PPT模版 图表类系列各种样式PPT模版分享&#xff1a;图表系列PPT模板https://pan.quark.cn/s/20d40aa…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

3-11单元格区域边界定位(End属性)学习笔记

返回一个Range 对象&#xff0c;只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意&#xff1a;它移动的位置必须是相连的有内容的单元格…...

【Go语言基础【12】】指针:声明、取地址、解引用

文章目录 零、概述&#xff1a;指针 vs. 引用&#xff08;类比其他语言&#xff09;一、指针基础概念二、指针声明与初始化三、指针操作符1. &&#xff1a;取地址&#xff08;拿到内存地址&#xff09;2. *&#xff1a;解引用&#xff08;拿到值&#xff09; 四、空指针&am…...

人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式

今天是关于AI如何在教学中增强学生的学习体验&#xff0c;我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育&#xff0c;这并非炒作&#xff0c;而是已经发生的巨大变革。教育机构和教育者不能忽视它&#xff0c;试图简单地禁止学生使…...