日志服务 HarmonyOS NEXT 日志采集最佳实践
作者:高玉龙(元泊)
背景信息
随着数字化新时代的全面展开以及 5G 与物联网(IoT)技术的迅速普及,操作系统正面临前所未有的变革需求。在这个背景下,华为公司自主研发的鸿蒙操作系统(HarmonyOS)应运而生,旨在满足万物互联时代的多元化设备接入、高效协同和安全可靠运行的需求。
HarmonyOS 不仅着眼于智能手机市场,更是全球首个面向全场景智能生态的操作系统,支持从手机、平板电脑到智能家居、穿戴设备乃至工业控制等多种终端形态。2024 年 1 月 18 日正式推出 HarmonyOS NEXT 鸿蒙星河开发者预览,深圳市于 2024 年 3 月 3 日也发布了支持开源鸿蒙原生应用发展的 2024 年行动计划。

日志服务(SLS)介绍
日志服务(SLS,后文简称 SLS)是云原生观测与分析平台,为 Log、Metric、Trace 等数据提供大规模、低成本、实时的平台化服务。SLS 一站式提供数据采集、加工、查询与分析、可视化、告警、消费与投递等功能,全面提升您在研发、运维、运营、安全等场景的数字化能力。

在构建复杂而庞大的应用和智能生态系统过程中,SLS 作为开发调试、性能优化、运维监控和故障排查的重要基础设施。为确保各类应用程序能够在鸿蒙操作系统上实现无缝对接并高效利用 SLS,对 SLS SDK 进行 HarmonyOS 原生适配成为必然之举。
此举不仅可以提升鸿蒙生态下应用的稳定性和可靠性,也有助于开发者更好地遵循统一的标准和最佳实践,进一步促进鸿蒙操作系统生态的繁荣与发展。在这种情况下,基于 SLS 的移动应用日志管理和分析将成为不可或缺的工具,基于对 SLS+ 移动应用日志可以帮助开发人员快速定位和解决问题,优化应用性能。
SDK 特性介绍
HarmonyOS 下的 SLS SDK 基于共同的基座 C Core SDK 适配,底层适配鸿蒙NDK。C Core 部分使用纯 C 语言编写,对性能进行了极端优化(包括缓存管理、文件管理、PB 序列化等),能够适用于 IoT、移动端、服务端等各种场景。SDK 提供 ArkTS 语言原生调用 API。SDK 具备以下特性:
- 异步
- 客户端线程写入无阻塞
- 日志队列异步发送
- 聚合&压缩上传
- 日志聚合发送(支持按超时时间、日志数、日志大小聚合)
- 支持 lz4、zstd 压缩
- 多实例
- 支持创建多个实例分别发送到不同的目标
- 可以实例配置独立,互不影响
- 缓存
- 支持设置可允许占用的缓存内存上限
- 超过内存缓存上限时,日志写入会失败
- 自定义标识
- 支持设置自定义 Tag 和 Topic
- 断点续传
- 支持日志缓存到本地文件,只有发送成功才会删除,确保日志上传 At Least Once
- 日志上下文
- 支持查看某条日志的上下文,可以更好的定位问题

HarmonyOS SDK 通过 OpenHarmony 三方库中心托管发布,当前支持 HarmonyOS NEXT API 9.0 及以上,仅支持 stage 模式。
SDK 使用最佳实践
准备工作
在使用 HarmonyOS SDK 进行日志采集之前,您需要做一些准备工作。
- 已开通日志服务(SLS),请参见开通日志服务 [ 1] 。
- 已创建好对应的 Project 和 Logstore,请参见管理 Project [ 2] 和管理 Logstore [ 3] 。
- 已创建并获取 AccessKey,请参见访问密钥 [ 4] 。阿里云账号 AccessKey 拥有所有 API 的访问权限,风险很高。强烈建议您创建并使用 RAM 用户进行 API 访问或日常运维。RAM 用户需具备操作日志服务(SLS)资源的权限。具体操作,请参见为 RAM 用户授权 [ 5] 。
- [可选]搭建 HarmonyOS 开发环境。开发鸿蒙应用需要使用 HarmonyOS 的 IDE 进行开发,具体内容请参考 HarmonyOS 官网开发文档 [ 6] 。
日志采集
安装 SDK
在项目的 entry 或 library 目录下执行如下命令。
ohpm install @aliyunsls/producer --registry=https://ohpm.openharmony.cn/ohpm
以上命令执行完成后,在 entry 或 library 目录下的 oh-package.json5 文件中会自动增加以下信息。
"dependencies": {"@aliyunsls/producer": "^0.1.0"
}
你可以通过以上信息来确定 SDK 是否安装成功。
集成 SDK
SDK 安装成功后,您可以按照实际业务需要,在指定的 ets 文件中导入 SLS 模块。
import { AliyunLog } from "@aliyunsls/producer"
您还需要完成 SDK 的初始化工作。
let aliyunLog: AliyunLog = new AliyunLog("https://cn-qingdao.log.aliyuncs.com", // 需要根据实际业务需要,替换为您Project所在Region"test-project-yuanbo", // 需要根据实际业务需要,替换为您的Project"applog", // 需要根据实际业务需要,替换为您的Logstore"<accesskey id>","<accesskey secret>","<accesskey token>" // 仅当AccessKey是通过STS方式获取时才需要
);
参数说明:
| 参数名称 | 说明 |
|---|---|
| endpoint | SLS 所在地域的访问域名,请参见服务入口 [ 7] 。 |
| project | SLS 的资源管理单元,请参见项目(Project) [ 8] 。 |
| logstore | SLS 中日志数据的采集、存储和查询单元,请参见日志库(Logstore) [ 9] 。 |
| accesskey | 调用 API 访问云资源的安全口令,请参见访问密钥 [ 10] 。 |
日志采集
完成 SDK 的初始化之后,可以通过以下方式完成日志的采集。
aliyunLog.addLog(new Map([// 根据实际业务需要,调整您需要上报的业务字段["from", "Home"],["page", "HomePage"],]
));
更多 SDK 使用相关的信息,建议您参考 SLS 官网文档 HarmonyOS SDK [1****1] 。
日志使用
场景一:查询和可视化分析
数据通过 SDK 采集上来之后,我们可以通过 SLS 控制台进行日志的查询和分析。
首先在 SLS 控制台 Project 列表中找到您的 Project,并进入到 Project 页面。如下:

接着,在左侧日志库菜单中找到您的 Logstore。如下:

如果 Logstore 没有开启索引,在您打开 Logstore 页面之后,会收到一个“未开启日志库索引”的提示框。您可以通过 Logstore 页面右上角的开启索引按钮来配置相关字段的索引。配置索引的具体方式可以参考创建索引 [ 12] 这篇文档。本文示例的 Logstore 已经对以下字段进行了索引配置:

索引开启后,即可在 Logstore 页面看到我们上报的日志信息,如下:

注意: 如果您的日志是在开启索引之前写入的,您需要重建索引后才能看到历史写入的数据。如何重建索引?您可以参考文档重建索引 [ 13] 。
可视化分析示例一:分析 CartPage 的访问趋势
基于示例数据,我们可以通过 SQL 查询出 page 字段的访问趋势,如下:
* and page: CartPage | select date_trunc('minute', __time__) as minute, count(*) as cnt group by minute order by minute asc
以上查询分析语句的含义是:
- “|”之前的部分,是通过查询语句 page: CartPage 过滤出 page 为 CartPage 的页面数据。请参考更多关于查询语法 [ 14] 的信息。
- “|”之后的部分,是通过 SQL 语句对过滤出来的数据进行分析,即:通过 date_trunc 语句把时间对齐到分钟级别,然后使用 count(*) 计算出每分钟页面的访问次数。请参考更多关于分析语法 [ 15] 的信息。
通过 SLS 可视化能力,可以对查询分析的结果使用丰富的图表展示,如下图是通过“线图 Pro”类型的图表,按照时间升序展示每分钟的页面访问次数。

可视化分析示例二:分析 CartPage 页面的访问来源
基于示例数据,可以使用如下查询分析语句查询 Cart 页面的来源分布:
* and page: CartPage | select "from" as "from", count(*) as cnt group by "from"
备注: 因为 from 是 SQL 的保留字段,因此示例中使用了双引号""对 from 进行包装。
下图是通过饼图 Pro 类型的图表,绘制的来源页面分布。

SLS 拥有非常强大的可视化分析能力,以上仅是非常简单的示例。实际使用中,可能会涉及到多种指标的同比/环比,漏斗转化实时分析等等。SLS 对此提供了非常灵活和丰富的能力进行支持。更多信息可以参考查询与分析 [ 16] 以及可视化 [ 17] 。
场景二:日志加工处理
如果从鸿蒙设备上采集到的原始数据格式没有事先约定好,或者数据格式较为复杂,或者需要对个别字段做富化/脱敏等,您可以使用 SLS 数据加工能力对原始数据做富化和清洗。您可以参考以下步骤。
- [可选]新增一个 Logstore 用于存储加工处理后的数据,如下:

可根据实际业务的需要,提前对该 Logstore 进行索引等配置。
- 进入到数据加工配置页面

您可以通过 Logstore 名称右侧的“数据加工”超链接进入到数据加工配置页面。
- 配置数据加工任务

如上图,您可以参考以下步骤配置数据加工任务。
a. 把目标数据加入到测试数据,用于验证数据加工脚本是否符合预期。
b. 在脚本编辑区域,根据实际业务需要输入数据加工脚本规则,示例如下:
# 富化__tag__:__client_ip__字段,提取出省、市、经纬度等信息
e_set("x", geo_parse(v("__tag__:__client_ip__")))
e_json("x", prefix="geo_") # 平铺x节点,并增加geo_前缀e_drop_fields("x")# 平铺content节点
e_json("content")
e_drop_fields("content")
关于数据加工脚本支持的语法,您可以参考数据加工语法 [ 18] 。
c. 脚本编写完成后,您可以通过右上角“预览数据”按钮验证数据加工的结果。
如下图,是以上数据加工脚本的预览结果:

数据加工预览结果符合预期后,您就可以保存当前数据加工任务了,后续的具体操作请参考创建数据加工任务 [ 19] 。
其他场景
除了上文中提到的查询与可视化分析、日志加工处理之外,SLS 还支持基于业务日志创建自定义告警监控业务,通过流处理、批处理(定时SQL)功能对数据进一步加工、聚合处理,通过消费与投递功能投递业务数据到 OSS、MaxCompute 等。您可以通过访问日志服务(SLS) [ 20] 官网文档等方式进一步了解 SLS 各种功能,助力您的业务发展。
总结
SLS SDK 通过适配 HarmonyOS NDK,并提供原生 ArkTS 语言原生 API 的方式,使开发者能够确保应用程序在 HarmonyOS 操作系统上实现无缝对接和高效利用 SLS 功能,可以有效提升应用的稳定性和性能。SDK 提供的异步日志写入、日志聚合压缩上传、缓存控制、自定义标识、断点续传、日志上下文查看等丰富特性,可以简化日志管理流程,提升故障排查、性能优化、资源利用监控、安全防范等方面的能力。
此外,借助 SLS 的强大平台功能,如实时查询、可视化分析、数据加工处理等等能力,不仅能够快速定位问题,优化应用性能,还能够在满足数据合规性要求的同时,基于业务日志构建全面的运维监控体系,为数字化运营决策提供有效支持。
除了以上能力外,SLS 还提供基于 OTel(OpenTelemetry)协议的多平台数据采集插件,您可以借助这些插件实现端到端的 Trace 数据采集和分析能力。
- 通过 OpenTelemetry 接入 Android Trace 数据
https://help.aliyun.com/zh/sls/user-guide/import-trace-data-from-android-apps-to-log-service-1
- 通过 OpenTelemetry 接入 iOS Trace 数据
https://help.aliyun.com/zh/sls/user-guide/import-trace-data-from-ios-apps-to-log-service-46
- 通过 OpenTelemetry 接入 Flutter/Dart Trace 数据
https://help.aliyun.com/zh/sls/user-guide/import-trace-data-from-flutter-and-dart-applications-by-using-opentelemetry-sdk-for-flutter
- 通过 OpenTelemetry 接入 C++ Trace 数据
https://help.aliyun.com/zh/sls/user-guide/import-trace-data-from-cpp-applications-to-log-service
- 接入 Web Trace 数据
https://help.aliyun.com/zh/sls/user-guide/import-data-from-web-pages-to-log-service
- 接入小程序 Trace 数据
https://help.aliyun.com/zh/sls/user-guide/import-data-from-mini-programs-to-log-service
更多关于 Trace 数据采集和使用相关的内容,你可以参考 SLS Trace [2****1] 服务。欢迎您试用!
相关链接:
[1] 开通日志服务
https://www.aliyun.com/product/sls
[2] 管理 Project
https://help.aliyun.com/zh/sls/user-guide/manage-a-project
[3] 管理 Logstore
https://help.aliyun.com/zh/sls/user-guide/manage-a-logstore
[4] 访问密钥
https://help.aliyun.com/zh/sls/developer-reference/accesskey-pair#reference-rh5-tfy-zdb
[5] 为 RAM 用户授权
https://help.aliyun.com/zh/sls/create-a-ram-user-and-authorize-the-ram-user-to-access-log-service#section-kxp-1ok-zj4
[6] HarmonyOS 官网开发文档
https://developer.huawei.com/consumer/cn/doc/
[7] 服务入口
https://help.aliyun.com/zh/sls/user-guide/manage-a-project#section-mb8-vvq-67c
[8] 项目(Project)
https://help.aliyun.com/zh/sls/product-overview/project
[9] 日志库(Logstore)
https://help.aliyun.com/zh/sls/product-overview/logstore
[10] 访问密钥
https://help.aliyun.com/zh/sls/developer-reference/accesskey-pair
[11] HarmonyOS SDK
https://help.aliyun.com/zh/sls/developer-reference/harmonyos-sdk/
[12] 创建索引
https://help.aliyun.com/zh/sls/user-guide/create-indexes
[13] 重建索引
https://help.aliyun.com/zh/sls/user-guide/reindex-logs-for-a-logstore
[14] 查询语法
https://help.aliyun.com/zh/sls/user-guide/search-syntax
[15] 分析语法
https://help.aliyun.com/zh/sls/user-guide/sql-syntax-and-functions/
[16] 查询与分析
https://help.aliyun.com/zh/sls/user-guide/index-and-query/
[17] 可视化
https://help.aliyun.com/zh/sls/user-guide/visualization-2/
[18] 数据加工语法
https://help.aliyun.com/zh/sls/user-guide/data-processing-syntax/
[19] 创建数据加工任务
https://help.aliyun.com/zh/sls/user-guide/create-a-data-transformation-job
[20] 日志服务(SLS)
https://help.aliyun.com/zh/sls/product-overview/
[21] SLS Trace
https://help.aliyun.com/zh/sls/user-guide/usage-notes-39
相关文章:
日志服务 HarmonyOS NEXT 日志采集最佳实践
作者:高玉龙(元泊) 背景信息 随着数字化新时代的全面展开以及 5G 与物联网(IoT)技术的迅速普及,操作系统正面临前所未有的变革需求。在这个背景下,华为公司自主研发的鸿蒙操作系统(…...
Educational Codeforces Round 133 (Rated for Div. 2) (C dp D前缀和优化倍数关系dp)
A:能用3肯定用三,然后分类讨论即可 #include<bits/stdc.h> using namespace std; const int N 2e510,M2*N,mod998244353; #define int long long typedef long long LL; typedef pair<int, int> PII; typedef unsigned long long ULL; usi…...
【讲解下如何Stable Diffusion本地部署】
🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…...
wps斜线表头并分别打字教程
wps斜线表头怎么做并分别打字: 1、首先选中我们想要设置的表头。 2、接着右键选中它,点击“设置单元格格式” 3、然后点击上方“边框”选项卡。 4、随后选择图示的斜线,点击“确定” 5、设置完成后,我们只要在其中打字就可以在斜…...
2024第八届全国青少年无人机大赛暨中国航空航天科普展览会
2024第八届全国青少年无人机大赛暨中国航空航天科普展览会 邀请函 主办单位: 中国航空学会 重庆市南岸区人民政府 招商执行单位: 重庆港华展览有限公司 为更好的培养空航天产业人才,汇聚航空教育产业创新科技,丰富和完善航…...
fastadmin学习08-查询数据渲染到前端
index.php查询,这个是前台的index.php public function index() {$slideImgs Db::name("slideimg")->where("status",,normal)->limit(5)->order(sort,desc)->select();$productList Db::name("product")->where(…...
实验报告答案
基本任务(必做) 先用普通用户(自己的姓名拼音)登录再操作 编程有代码截图和执行过程结果截图 代写获取: https://laowangall.oss-cn-beijing.aliyuncs.com/studentall.pdf 1. Linux的Shell编程 (1&am…...
PDF编辑和格式转换工具 Cisdem PDFMaster for Mac
Cisdem PDFMaster for Mac是一款功能强大的PDF编辑和格式转换工具。它为用户提供了直观且易于使用的界面,使常用功能触手可及,从而帮助用户轻松管理、编辑和转换PDF文件。 软件下载:Cisdem PDFMaster for Mac v6.0.0激活版下载 作为一款完整的…...
E-魔法猫咪(遇到过的题,做个笔记)
题解: 来自学长们思路: 其中一种正解是写单调队列。限制队列内的数单调递增,方法为每当新来的数据比当前队尾数据小时队 尾出列,直到能够插入当前值,这保证了队头永远是最小值。因此总体思路是队尾不断插入新值的同时 …...
keil创建工程 芯源半导体CW32F003E4P7
提前下载keil 安装步骤 1、下载CW32F003固件库 芯源半导体官网下载固件库 下载好后右键解压 CW32F003_StandardPeripheralLib_V1.5\IdeSupport\MDK 进入MDK文件夹 双击WHXY.CW32F003_DFP.1.0.4.pack安装固件库 点击next然后finish安装结束 keil创建工程 点击new uVision P…...
学习鸿蒙基础(12)
目录 一、网络json-server配置 (1)然后输入: (2)显示下载成功。但是输入json-server -v的时候。报错。 (3)此时卸载默认的json-server (4)安装和nodejs匹配版本的js…...
HTML5和CSS3笔记
一:网页结构(html): 1.1:页面结构: 1.2:标签类型: 1.2.1:块标签: 1.2.2:行内标签: 1.2.3:行内块标签: 1.2.4:块标签与行…...
MHA高可用-解决MySQL主从复制的单点问题
目录 一、MHA的介绍 1.什么是 MHA 2.MHA 的组成 2.1 MHA Node(数据节点) 2.2 MHA Manager(管理节点) 3.MHA 的特点 4. MHA工作原理总结如下: 二、搭建 MySQL MHA 实验环境 …...
【多线程】震惊~这是我见过最详细的ReentrantLock的讲解
一.与synchronized相比ReentrantLock具有以下四个特点: 可中断:synchronized只能等待同步代码块执行结束,不可以中断,强行终断会抛出异常, 而reentrantlock可以调用线程的interrupt方法来中断等待,继续执行下面的代码。 在获取锁…...
分布式链路追踪与云原生可观测性
分布式链路追踪系统历史 Dapper, a Large-Scale Distributed Systems Tracing Infrastructure - Google Dapper,大规模分布式系统的跟踪系统大规模分布式系统的跟踪系统:Dapper设计给我们的启示 阿里巴巴鹰眼技术解密 - 周小帆京东云分布式链路追踪在金…...
CSS3新增的语法(三)【2D,3D,过渡,动画】
CSS3新增的语法(三)【2D,3D,过渡,动画】 10.2D变换10.1. 2D位移10.2. 2D缩放10.3. 2D旋转10.4. 2D扭曲(了解)10.5. 多重变换10.6. 变换原点 11. 3D变换11.1. 开启3D空间11.2. 设置景深11.3. 透视点位置11.4. 3D 位移11…...
Flutter应用在苹果商店上架前的准备工作与注意事项
引言 🚀 Flutter作为一种跨平台的移动应用程序开发框架,为开发者提供了便利,使他们能够通过单一的代码库构建出高性能、高保真度的应用程序,同时支持Android和iOS两个平台。然而,完成Flutter应用程序的开发只是第一步…...
如何开启MySQL的binlog日志
1.启用远程连接: 如果你想要允许远程主机连接到MySQL服务器,需要进行以下步骤: 确保MySQL服务器的防火墙允许远程连接的流量通过。在MySQL服务器上,编辑MySQL配置文件(一般是my.cnf),找到bind-…...
设计模式|状态机模式(State Machine Pattern)
文章目录 结构使用步骤示例使用状态机的场景常见面试题 状态机模式(State Machine Pattern)是一种用于描述对象的行为软件设计模式,属于行为型设计模式。在状态机模式中,对象的行为取决于其内部状态,并且在不同的状态下…...
Django源码之路由的本质(上)——逐步剖析底层执行流程
目录 1. 前言 2. 路由定义 3. 路由定义整体源码分析 3.1 partial实现path函数调用 3.2 图解_path函数 3.3 最终 4.URLPattern和Pattern的简单解析 5. 小结 1. 前言 在学习Django框架的时候,我们大多时候都只会使用如何去开发项目,对其实现流程并…...
3步解锁联想刃7000k BIOS隐藏功能:安全提升硬件性能的完整指南
3步解锁联想刃7000k BIOS隐藏功能:安全提升硬件性能的完整指南 【免费下载链接】Lenovo-7000k-Unlock-BIOS Lenovo联想刃7000k2021-3060版解锁BIOS隐藏选项并提升为Admin权限 项目地址: https://gitcode.com/gh_mirrors/le/Lenovo-7000k-Unlock-BIOS 联想刃7…...
HTML5 教程
HTML5 教程 引言 HTML5,作为现代网页开发的核心技术之一,自从推出以来就受到了广泛的关注和认可。它不仅改进了原有的HTML特性,还引入了新的元素和API,使得网页设计和开发更加高效、强大。本教程旨在为您提供一个全面的HTML5学习路径,帮助您快速掌握HTML5的基础知识和高…...
告别头像上传模糊!用Cropper.js打造完美头像裁剪上传功能(附完整前后端代码)
从零构建高精度头像裁剪系统:Cropper.js全栈实战指南 每次上传头像时,你是否遇到过这样的尴尬——精心选择的图片上传后变得模糊不清,或者被强制拉伸变形?这种糟糕的用户体验在社交平台、企业系统中尤为常见。本文将带你从零构建…...
告别龟速!实测字节跳动Rust镜像源rsproxy.cn,安装rust和cargo快到飞起
Rust开发者福音:字节跳动镜像源rsproxy.cn全实测与避坑指南 上周深夜两点,我盯着终端里以KB/s为单位缓慢爬升的Rust安装进度条,第5次按下了CtrlC。作为一门以"零成本抽象"著称的语言,Rust的安装体验却让国内开发者付出了…...
别再只用默认样式了!LVGL Chart图表控件的10个美化技巧与高级样式配置
LVGL Chart图表控件进阶:10个专业级视觉优化技巧 在嵌入式GUI开发中,数据可视化是提升用户体验的关键环节。LVGL作为轻量级图形库的佼佼者,其Chart组件虽然开箱即用,但默认样式往往难以满足专业产品的视觉要求。本文将深入解析10个…...
告别OrthoFinder限制:用IQtree+Notung搞定跨物种基因家族树(附兰科NB-ARC实战)
突破OrthoFinder局限:基于IQtree与Notung的跨物种基因家族进化分析实战 当你在研究一个特定基因家族的进化历程时,OrthoFinder的默认聚类机制可能会成为一道难以逾越的障碍。想象一下这样的场景:你精心收集了四个兰科物种的NB-ARC结构域序列&…...
构建端到端个人知识库智能体:从RAG原理到飞书集成实战
1. 项目概述:一个端到端的个人知识库智能体 如果你和我一样,每天被海量的信息淹没——公众号文章、付费课程、技术文档、会议纪要,想找的时候却像大海捞针,那么这个项目可能就是你的“数字大脑”外挂。我最近花了不少时间&#x…...
【AI搜索时代生存指南】:Perplexity vs Google搜索的5大核心差异,90%的开发者还不知道的关键决策点
更多请点击: https://intelliparadigm.com 第一章:AI搜索时代的技术范式迁移 传统关键词匹配式搜索正被语义理解、上下文感知与生成式推理深度重构。AI搜索不再仅返回文档链接,而是直接合成答案、推演逻辑链、调用工具并动态验证结果——这标…...
如何用Rusted PackFile Manager彻底重构全面战争模组开发工作流?
如何用Rusted PackFile Manager彻底重构全面战争模组开发工作流? 【免费下载链接】rpfm Rusted PackFile Manager (RPFM) is a... reimplementation in Rust and Qt6 of PackFile Manager (PFM), one of the best modding tools for Total War Games. 项目地址: h…...
终极免费风扇控制软件:FanControl完整配置与优化指南
终极免费风扇控制软件:FanControl完整配置与优化指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/…...
