鸿蒙开发之资源文件与HiLog日志

一、资源文件

1、资源文件的分类

resources目录

应用的资源文件(字符串、图片、音频等)统一存放于resources目录下,便于开发者使用和维护。resources目录包括两大类目录,一类为base目录与限定词目录,另一类为rawfile目录。

resources
|---base  // 默认存在的目录
|   |---element
|   |   |---string.json
|   |---media
|   |   |---icon.png
|---en_GB-vertical-car-mdpi // 限定词目录示例,需要开发者自行创建   
|   |---element
|   |   |---string.json
|   |---media
|   |   |---icon.png
|---rawfile  // 默认存在的目录
分类base目录与限定词目录rawfile目录
组织形式按照两级目录形式来组织,目录命名必须符合规范,以便根据设备状态去匹配相应目录下的资源文件。
一级子目录为base目录和限定词目录
base目录是默认存在的目录。当应用的resources资源目录中没有与设备状态匹配的限定词目录时,会自动引用该目录中的资源文件。
限定词目录需要开发者自行创建。目录名称由一个或多个表征应用场景或设备特征的限定词组合而成。
二级子目录为资源目录,用于存放字符串、颜色、布尔值等基础元素,以及媒体、动画、布局等资源文件。
支持创建多层子目录,目录名称可以自定义,文件夹内可以自由放置各类资源文件。rawfile目录的文件不会根据设备状态去匹配不同的资源。
编译方式目录中的资源文件会被编译成二进制文件,并赋予资源文件ID目录中的资源文件会被直接打包进应用,不经过编译,也不会被赋予资源文件ID。
引用方式通过指定资源类型(type)和资源名称(name)来引用通过指定文件路径和文件名来引用

资源组目录

base目录与限定词目录下面可以创建资源组目录(包括element、media、animation、layout、graphic、profile),用于存放特定类型的资源文件

资源组目录目录说明资源文件
element表示元素资源,以下每一类数据都采用相应的JSON文件来表征。
boolean,布尔型
color,颜色
float,浮点型
intarray,整型数组
integer,整型
pattern,样式
plural,复数形式
strarray,字串数组
string,字符串
element目录中的文件名称建议与下面的文件名保持一致。每个文件中只能包含同一类型的数据。
boolean.json
color.json
float.json
intarray.json
integer.json
pattern.json
plural.json
strrray.json
string.json
media表示媒体资源,包括图片、音频、视频等非文本格式的文件。文件名可自定义,例如:icon.png。
animation表示动画资源,采用XML文件格式。文件名可自定义,例如:zoom_in.xml。
layout表示布局资源,采用XML文件格式。文件名可自定义,例如:home_layout.xml。
graphic表示可绘制资源,采用XML文件格式。文件名可自定义,例如:notifications_dark.xml。
profile表示其他类型文件,以原始文件形式保存。文文件名可自定义。

2、资源文件的使用

A.Java引用资源文件

普通资源

普通资源:ResourceTable.type_name

在Java文件中,引用color.json文件中类型为“Color”、名称为“ref_red”的资源。

{
    "color": [
        {
            "name": "red",
            "value": "#ff0000"
        },
        {
            "name": "ref_red",
            "value": "$color:red"
        }
    ]
}
public class MainAbilitySlice extends AbilitySlice {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);

        ResourceManager rsManager = this.getResourceManager();

        String str = null;
        try {
            int intColor = rsManager.getElement(ResourceTable.Color_ref_red).getColor();
            Color color = new Color(intColor);
            Text text = (Text) findComponentById(ResourceTable.Id_text);
            text.setTextColor(color);
        } catch (IOException e) {
            e.printStackTrace();
        } catch (NotExistException e) {
            e.printStackTrace();
        } catch (WrongTypeException e) {
            e.printStackTrace();
        }
}

在这里插入图片描述

系统资源

系统资源:ohos.global.systemres.ResourceTable.type_name

目前支持的系统资源文件:

ic_app:表示HarmonyOS应用的默认图标,类型为媒体。

request_location_reminder_title:表示“请求使用设备定位功能”的提示标题,类型为字符串。

request_location_reminder_content:表示“请求使用设备定位功能”的提示内容,类型为字符串。
public class MainAbilitySlice extends AbilitySlice {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);

        ResourceManager rsManager = this.getResourceManager();

        String str = null;
        try {
            str = rsManager
                    .getElement(ohos.global.systemres.ResourceTable.
                            String_request_location_reminder_title).getString();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (NotExistException e) {
            e.printStackTrace();
        } catch (WrongTypeException e) {
            e.printStackTrace();
        }
        Text text = (Text) findComponentById(ResourceTable.Id_text);
            text.setText(str);
}

在这里插入图片描述

profile资源

获取profile中的文件内容

public class MainAbilitySlice extends AbilitySlice {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);


        Resource resource = null;
        try {
            Text text = (Text) findComponentById(ResourceTable.Id_text);

            resource = getResourceManager().getResource(ResourceTable.Profile_test);
            InputStreamReader inputStreamReader = new InputStreamReader(resource, "utf-8");
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);

            String lineTxt = "";
            while((lineTxt = bufferedReader.readLine()) != null){
                text.append(","+lineTxt);
            }

        } catch (Exception e) {

        }
}

在这里插入图片描述

B.XML引用资源文件

普通资源

普通资源:$type:name

<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:width="match_parent"
    ohos:height="match_parent"
    ohos:orientation="vertical"
    ohos:padding="32">
    <Text
        ohos:id="$+id:text"
        ohos:width="match_content"
        ohos:height="match_content"
        ohos:layout_alignment="horizontal_center"
        ohos:text="$string:app_name"
        ohos:text_size="25vp"/>
    <Button
        ohos:id="$+id:button"
        ohos:margin="50"
        ohos:width="match_content"
        ohos:height="match_content"
        ohos:layout_alignment="horizontal_center"
        ohos:background_element="$graphic:background_button"
        ohos:text="跳转页面"
        ohos:text_size="50"/>
</DirectionalLayout>

在这里插入图片描述

系统资源

系统资源:$ohos:type:name。

<?xml version="1.0" encoding="utf-8"?>
<DirectionalLayout
    xmlns:ohos="http://schemas.huawei.com/res/ohos"
    ohos:width="match_parent"
    ohos:height="match_parent"
    ohos:orientation="vertical"
    ohos:padding="32">
    <Text
        ohos:id="$+id:text"
        ohos:width="match_content"
        ohos:height="match_content"
        ohos:layout_alignment="horizontal_center"
        ohos:text="$ohos:string:request_location_reminder_title"
        ohos:text_size="25vp"/>
    <Button
        ohos:id="$+id:button"
        ohos:margin="50"
        ohos:width="match_content"
        ohos:height="match_content"
        ohos:layout_alignment="horizontal_center"
        ohos:background_element="$graphic:background_button"
        ohos:text="跳转页面"
        ohos:text_size="50"/>
</DirectionalLayout>

在这里插入图片描述

rawfile资源

rawfile目录中的资源文件,通过指定文件路径和文件名称来引用。

public class MainAbilitySlice extends AbilitySlice {
    @Override
    public void onStart(Intent intent) {
        super.onStart(intent);
        super.setUIContent(ResourceTable.Layout_ability_main);

        Resource resource = null;
        try {
            Text text = (Text) findComponentById(ResourceTable.Id_text);
            resource = getResourceManager().getRawFileEntry("resources/rawfile/test.txt").openRawFile();
            InputStreamReader inputStreamReader = new InputStreamReader(resource, "utf-8");
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            String lineTxt = "";
            while((lineTxt = bufferedReader.readLine()) != null){
                text.append(","+lineTxt );
            }
        } catch (Exception e) {

        }
}

在这里插入图片描述

二、HiLog日志

1.HiLog概述

HarmonyOS提供了HiLog日志系统,让应用可以按照指定类型、指定级别、指定格式字符串输出日志内容,输出日志的接口由HiLog类提供。

在输出日志之前,必须调用HiLog的辅助类HiLogLabel中定义日志类型,服务域和标记,使用特定于指定日志级别的界面,并指定隐私标识符。

2.定义日志标签

使用HiLogLabel(int type, int domain, String tag)定义日志标签,其中包括了日志类型、业务领域和TAG。

static final HiLogLabel label = new HiLogLabel(HiLog.LOG_APP, 0x00201, "MY_TAG"); 
参数type:用于指定输出日志的类型。HiLog中当前只提供了一种日志类型,即应用日志类型LOG_APP。

参数domain:用于指定输出日志所对应的业务领域,取值范围为0x0~0xFFFFF,开发者可以根据需要进行自定义。

参数tag:用于指定日志标识,可以为任意字符串,建议标识调用所在的类或者业务行为。

3.输出日志

HiLog中定义了DEBUG、INFO、WARN、ERROR、FATAL(日志级别:调试,信息,警告,错误和致命)五种日志级别,并提供了对应的方法用于输出不同级别的日志。

接口名功能描述
debug​(HiLogLabel label, String format, Object… args)输出DEBUG级别的日志。DEBUG级别日志表示仅用于应用调试,默认不输出,输出前需要在设备的“开发人员选项”中打开“USB调试”开关。
info​(HiLogLabel label, String format, Object… args)输出INFO级别的日志。INFO级别日志表示普通的信息。
warn​(HiLogLabel label, String format, Object… args)输出WARN级别的日志。WARN级别日志表示存在警告。
error​(HiLogLabel label, String format, Object… args)输出ERROR级别的日志。ERROR级别日志表示存在错误。
fatal​(HiLogLabel label, String format, Object… args)输出FATAL级别的日志。FATAL级别日志表示出现致命错误、不可恢复错误。
参数label:定义好的HiLogLabel标签。

参数format:格式字符串,用于日志的格式化输出。格式字符串中可以设置多个参数,例如格式字符串为“Failed to visit %s.”,“%s”为参数类型为string的变参标识,具体取值在args中定义。

每个参数需添加隐私标识,分为{public}或{private},默认为{private}。{public}表示日志打印结果可见,{private}表示日志打印结果不可见,其输出结果为<private>。

参数args:可以为0个或多个参数,是格式字符串中参数类型对应的参数列表。参数的数量、类型必须与格式字符串中的标识一一对应。

输出一条WARN级别的信息

HiLog.warn(label, "Failed to visit %{private}s, reason:%{public}d.", url, errno);

该行代码表示输出一个日志标签为label的警告信息,格式字符串为:“Failed to visit %{private}s, reason:%{public}d.”。其中变参url的格式为私有的字符串,errno为公共的整型数。

4.查看日志信息

HUAWEI DevEco Studio提供了HiLog窗口查看日志信息,开发者可通过设置设备、进程、日志级别和搜索关键词来筛选日志信息。搜索功能支持使用正则表达式,开发者可通过搜索自定义的业务领域值和TAG来筛选日志信息。

根据实际情况选择了设备和进程后,搜索业务领域值“00201”进行筛选,得到对应的日志信息。
在这里插入图片描述

11-25 16:01:54.411 23515-23515/com.example.myapplication W 00201/MY_TAG: Failed to visit <private>, reason:503.
W表示日志级别为WARN。

00201/MY_TAG为开发者在HiLogLabel中定义的内容。

日志内容中的url为私有参数不显示具体内容,仅显示<private>。errno为公有参数,显示实际取值503。

5.使用LiLog

在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
华为鸿蒙HarmonyOS开发整理资料汇总,共38份。 1学前必读:HarmonyOS学习资源主题分享 2学前必读:OpenHarmony-联盟生态资料合集 3-1.HarmonyOS概述:技术特性 3-2.HarmonyOS概述:开发工具与平台 3-3.HarmonyOS概述:系统安全 3-4.HarmonyOS概述:系统定义 3-5.HarmonyOS概述:下载与安装软件 3-6.HarmonyOS概述:应用开发基础知识 3-7.HarmonyOS概述:最全HarmonyOS文档和社区资源使用技巧 4-1.生态案例:【开发者说】重塑经典,如何在HarmonyOS手机上还原贪吃蛇游戏 4-2.生态案例:HarmonyOLabo涂鸦鸿蒙亲子版 4-3.生态案例:HarmonyOS分镜头APP案例 4-4.生态案例:HarmonyOS时光序历史学习案例 4-5.生态案例:HarmonyOS先行者说 宝宝巴士携手HarmonyOS共同打造儿童教育交互新体验 4-6.生态案例:HarmonyOS智能农场物联网连接实践 4-7.生态案例:分布式开发样例,带你玩转多设备 4-8.生态案例:华为分布式日历应用开发实践 5-1.【Codelab】HarmonyOS基于图像模块实现图库图片的四种常见操作 5-2.【CodeLab】手把手教你创建第一个手机“Hello World” 5-3.【Codelab】如此简单!一文带你学会15个HarmonyOS JS组件 5-4.【Codelab】懒人“看”书新法—鸿蒙语音播报,到底如何实现? 5-5.【Codelab】基于AI通用文字识别的图像搜索,这波操作亮了 5-6.【Codelab】开发样例概览 6-1.技术解读之HarmonyOS轻量JS开发框架与W3C标准差异分析 6-2.技术解读之HarmonyOS驱动加载过程分析 6-3.技术解读之HarmonyOS组件库使用实践 6-4.技术解读之华为架构师解读:HarmonyOS低时延高可靠消息传输原理 6-5.技术解读之解密HarmonyOS UI框架 6-6.技术解读之如何从OS框架层面实现应用服务功能解耦 7-1.常见问题之HarmonyOS元服务的设计与开发解析 7-2.常见问题之Java开发 7-3.常见问题之JS开发 7-4.常见问题之模拟器登录 7-5.常见问题之模拟器运行 7-6.常见问题之如何使用JsJava开发HarmonyOS UI 7-7.常见问题之应用配置 7-8.常见问题之预览器运行 8【视频合集】入门到进阶视频学习资料合集30+

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeDevMaster

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值