鸿蒙金融理财全栈项目——运维监控、性能优化、安全加固

鸿蒙金融理财全栈项目——运维监控、性能优化、安全加固

《鸿蒙APP开发从入门到精通》第20篇:鸿蒙金融理财全栈项目——运维监控、性能优化、安全加固 📊🔧🛡️

在这里插入图片描述

内容承接与核心价值

这是《鸿蒙APP开发从入门到精通》的第20篇——运维监控、性能优化、安全加固篇100%承接第19篇的生态合作、用户运营、数据变现架构,并基于金融场景的运维监控、性能优化、安全加固要求,设计并实现鸿蒙金融理财全栈项目的运维监控、性能优化、安全加固功能

学习目标

  • 掌握鸿蒙金融理财项目的运维监控设计与实现;
  • 实现应用监控、服务器监控、数据库监控;
  • 理解性能优化在金融场景的核心设计与实现;
  • 实现前端优化、后端优化、数据库优化;
  • 掌握安全加固在金融场景的设计与实现;
  • 实现代码加固、数据加密、安全审计;
  • 优化金融理财项目的用户体验(运维监控、性能优化、安全加固)。

学习重点

  • 鸿蒙金融理财项目的运维监控设计原则;
  • 性能优化在金融场景的应用;
  • 安全加固在金融场景的设计要点。

一、 运维监控基础 🎯

1.1 运维监控定义

运维监控是指对金融理财项目的应用、服务器、数据库等进行监控,及时发现和解决问题,主要包括以下方面:

  • 应用监控:监控应用的运行状态;
  • 服务器监控:监控服务器的资源使用情况;
  • 数据库监控:监控数据库的性能。

1.2 运维监控架构

运维监控采用分层架构,由以下部分组成:

  • 应用监控层:负责应用的运行状态监控;
  • 服务器监控层:负责服务器的资源使用情况监控;
  • 数据库监控层:负责数据库的性能监控。

二、 运维监控实战 🛠️

2.1 实战目标

基于金融场景的运维监控要求,实现以下功能:

  • 应用监控:监控应用的运行状态;
  • 服务器监控:监控服务器的资源使用情况;
  • 数据库监控:监控数据库的性能。

2.2 🔧 应用监控实现

1. 应用监控工具类

⌨️ entry/src/main/ets/utils/ApplicationMonitoringUtil.ets

import monitoring from'@ohos.monitoring';// 应用监控工具类exportclassApplicationMonitoringUtil{privatestatic instance: ApplicationMonitoringUtil |null=null;private monitoringHelper: monitoring.MonitoringHelper |null=null;// 单例模式staticgetInstance(): ApplicationMonitoringUtil {if(!ApplicationMonitoringUtil.instance){ ApplicationMonitoringUtil.instance =newApplicationMonitoringUtil();}return ApplicationMonitoringUtil.instance;}// 初始化应用监控工具asyncinit():Promise<void>{if(!this.monitoringHelper){this.monitoringHelper = monitoring.createMonitoringHelper();}}// 获取应用运行状态asyncgetApplicationRunningStatus():Promise<monitoring.ApplicationRunningStatus>{if(!this.monitoringHelper){returnnull;}const result =awaitthis.monitoringHelper.getApplicationRunningStatus();return result;}// 监控应用性能asyncmonitorApplicationPerformance():Promise<monitoring.ApplicationPerformanceData>{if(!this.monitoringHelper){returnnull;}const result =awaitthis.monitoringHelper.monitorApplicationPerformance();return result;}}
2. 应用监控应用

⌨️ entry/src/main/ets/pages/ApplicationMonitoringPage.ets

import{ ApplicationMonitoringUtil }from'../utils/ApplicationMonitoringUtil';@Entry@Component struct ApplicationMonitoringPage {@State applicationRunningStatus: monitoring.ApplicationRunningStatus |null=null;build(){Column({ space:16}){Text('应用监控').fontSize(18).fontWeight(FontWeight.Bold).textColor('#000000');if(this.applicationRunningStatus){Text(`应用状态:${this.applicationRunningStatus.status}`).fontSize(14).textColor('#000000');Text(`CPU使用率:${this.applicationRunningStatus.cpuUsage}%`).fontSize(14).textColor('#666666');Text(`内存使用率:${this.applicationRunningStatus.memoryUsage}%`).fontSize(14).textColor('#666666');Text(`网络请求数:${this.applicationRunningStatus.networkRequestCount}`).fontSize(14).textColor('#666666');}ButtonComponent({ text:'监控应用性能',onClick:async()=>{awaitthis.monitorApplicationPerformance();}, disabled:false});}.width('100%').height('100%').padding(16).backgroundColor('#F5F5F5');}aboutToAppear(){// 初始化应用监控 ApplicationMonitoringUtil.getInstance().init();// 获取应用运行状态this.getApplicationRunningStatus();}asyncgetApplicationRunningStatus():Promise<void>{this.applicationRunningStatus =await ApplicationMonitoringUtil.getInstance().getApplicationRunningStatus();}asyncmonitorApplicationPerformance():Promise<void>{const result =await ApplicationMonitoringUtil.getInstance().monitorApplicationPerformance(); promptAction.showToast({ message:`应用性能监控完成,响应时间:${result.responseTime}ms`});}}

2.3 🔧 服务器监控实现

1. 服务器监控工具类

⌨️ entry/src/main/ets/utils/ServerMonitoringUtil.ets

import server from'@ohos.server';// 服务器监控工具类exportclassServerMonitoringUtil{privatestatic instance: ServerMonitoringUtil |null=null;private serverHelper: server.ServerHelper |null=null;// 单例模式staticgetInstance(): ServerMonitoringUtil {if(!ServerMonitoringUtil.instance){ ServerMonitoringUtil.instance =newServerMonitoringUtil();}return ServerMonitoringUtil.instance;}// 初始化服务器监控工具asyncinit():Promise<void>{if(!this.serverHelper){this.serverHelper = server.createServerHelper();}}// 获取服务器资源使用情况asyncgetServerResourceUsage():Promise<server.ServerResourceUsage>{if(!this.serverHelper){returnnull;}const result =awaitthis.serverHelper.getServerResourceUsage();return result;}// 监控服务器性能asyncmonitorServerPerformance():Promise<server.ServerPerformanceData>{if(!this.serverHelper){returnnull;}const result =awaitthis.serverHelper.monitorServerPerformance();return result;}}
2. 服务器监控应用

⌨️ entry/src/main/ets/pages/ServerMonitoringPage.ets

import{ ServerMonitoringUtil }from'../utils/ServerMonitoringUtil';@Entry@Component struct ServerMonitoringPage {@State serverResourceUsage: server.ServerResourceUsage |null=null;build(){Column({ space:16}){Text('服务器监控').fontSize(18).fontWeight(FontWeight.Bold).textColor('#000000');if(this.serverResourceUsage){Text(`CPU使用率:${this.serverResourceUsage.cpuUsage}%`).fontSize(14).textColor('#000000');Text(`内存使用率:${this.serverResourceUsage.memoryUsage}%`).fontSize(14).textColor('#666666');Text(`磁盘使用率:${this.serverResourceUsage.diskUsage}%`).fontSize(14).textColor('#666666');Text(`网络带宽:${this.serverResourceUsage.networkBandwidth}MB/s`).fontSize(14).textColor('#666666');}ButtonComponent({ text:'监控服务器性能',onClick:async()=>{awaitthis.monitorServerPerformance();}, disabled:false});}.width('100%').height('100%').padding(16).backgroundColor('#F5F5F5');}aboutToAppear(){// 初始化服务器监控 ServerMonitoringUtil.getInstance().init();// 获取服务器资源使用情况this.getServerResourceUsage();}asyncgetServerResourceUsage():Promise<void>{this.serverResourceUsage =await ServerMonitoringUtil.getInstance().getServerResourceUsage();}asyncmonitorServerPerformance():Promise<void>{const result =await ServerMonitoringUtil.getInstance().monitorServerPerformance(); promptAction.showToast({ message:`服务器性能监控完成,响应时间:${result.responseTime}ms`});}}

2.4 🔧 数据库监控实现

1. 数据库监控工具类

⌨️ entry/src/main/ets/utils/DatabaseMonitoringUtil.ets

import database from'@ohos.database';// 数据库监控工具类exportclassDatabaseMonitoringUtil{privatestatic instance: DatabaseMonitoringUtil |null=null;private databaseHelper: database.DatabaseHelper |null=null;// 单例模式staticgetInstance(): DatabaseMonitoringUtil {if(!DatabaseMonitoringUtil.instance){ DatabaseMonitoringUtil.instance =newDatabaseMonitoringUtil();}return DatabaseMonitoringUtil.instance;}// 初始化数据库监控工具asyncinit():Promise<void>{if(!this.databaseHelper){this.databaseHelper = database.createDatabaseHelper();}}// 获取数据库性能asyncgetDatabasePerformance():Promise<database.DatabasePerformanceData>{if(!this.databaseHelper){returnnull;}const result =awaitthis.databaseHelper.getDatabasePerformance();return result;}// 监控数据库性能asyncmonitorDatabasePerformance():Promise<database.DatabasePerformanceData>{if(!this.databaseHelper){returnnull;}const result =awaitthis.databaseHelper.monitorDatabasePerformance();return result;}}
2. 数据库监控应用

⌨️ entry/src/main/ets/pages/DatabaseMonitoringPage.ets

import{ DatabaseMonitoringUtil }from'../utils/DatabaseMonitoringUtil';@Entry@Component struct DatabaseMonitoringPage {@State databasePerformance: database.DatabasePerformanceData |null=null;build(){Column({ space:16}){Text('数据库监控').fontSize(18).fontWeight(FontWeight.Bold).textColor('#000000');if(this.databasePerformance){Text(`查询响应时间:${this.databasePerformance.queryResponseTime}ms`).fontSize(14).textColor('#000000');Text(`插入响应时间:${this.databasePerformance.insertResponseTime}ms`).fontSize(14).textColor('#666666');Text(`更新响应时间:${this.databasePerformance.updateResponseTime}ms`).fontSize(14).textColor('#666666');Text(`删除响应时间:${this.databasePerformance.deleteResponseTime}ms`).fontSize(14).textColor('#666666');}ButtonComponent({ text:'监控数据库性能',onClick:async()=>{awaitthis.monitorDatabasePerformance();}, disabled:false});}.width('100%').height('100%').padding(16).backgroundColor('#F5F5F5');}aboutToAppear(){// 初始化数据库监控 DatabaseMonitoringUtil.getInstance().init();// 获取数据库性能this.getDatabasePerformance();}asyncgetDatabasePerformance():Promise<void>{this.databasePerformance =await DatabaseMonitoringUtil.getInstance().getDatabasePerformance();}asyncmonitorDatabasePerformance():Promise<void>{const result =await DatabaseMonitoringUtil.getInstance().monitorDatabasePerformance(); promptAction.showToast({ message:`数据库性能监控完成,查询响应时间:${result.queryResponseTime}ms`});}}

三、 性能优化实战 🛠️

3.1 实战目标

基于金融场景的性能优化要求,实现以下功能:

  • 前端优化:优化前端的渲染性能;
  • 后端优化:优化后端的响应性能;
  • 数据库优化:优化数据库的查询性能。

3.2 🔧 前端优化实现

1. 前端优化工具类

⌨️ entry/src/main/ets/utils/FrontendOptimizationUtil.ets

import optimization from'@ohos.optimization';// 前端优化工具类exportclassFrontendOptimizationUtil{privatestatic instance: FrontendOptimizationUtil |null=null;private optimizationHelper: optimization.OptimizationHelper |null=null;// 单例模式staticgetInstance(): FrontendOptimizationUtil {if(!FrontendOptimizationUtil.instance){ FrontendOptimizationUtil.instance =newFrontendOptimizationUtil();}return FrontendOptimizationUtil.instance;}// 初始化前端优化工具asyncinit():Promise<void>{if(!this.optimizationHelper){this.optimizationHelper = optimization.createOptimizationHelper();}}// 优化前端渲染性能asyncoptimizeFrontendRendering():Promise<optimization.FrontendRenderingOptimizationResult>{if(!this.optimizationHelper){returnnull;}const result =awaitthis.optimizationHelper.optimizeFrontendRendering();return result;}// 优化前端网络请求asyncoptimizeFrontendNetworkRequests():Promise<optimization.FrontendNetworkRequestsOptimizationResult>{if(!this.optimizationHelper){returnnull;}const result =awaitthis.optimizationHelper.optimizeFrontendNetworkRequests();return result;}}

3.3 🔧 后端优化实现

1. 后端优化工具类

⌨️ entry/src/main/ets/utils/BackendOptimizationUtil.ets

import optimization from'@ohos.optimization';// 后端优化工具类exportclassBackendOptimizationUtil{privatestatic instance: BackendOptimizationUtil |null=null;private optimizationHelper: optimization.OptimizationHelper |null=null;// 单例模式staticgetInstance(): BackendOptimizationUtil {if(!BackendOptimizationUtil.instance){ BackendOptimizationUtil.instance =newBackendOptimizationUtil();}return BackendOptimizationUtil.instance;}// 初始化后端优化工具asyncinit():Promise<void>{if(!this.optimizationHelper){this.optimizationHelper = optimization.createOptimizationHelper();}}// 优化后端响应性能asyncoptimizeBackendResponse():Promise<optimization.BackendResponseOptimizationResult>{if(!this.optimizationHelper){returnnull;}const result =awaitthis.optimizationHelper.optimizeBackendResponse();return result;}// 优化后端网络请求asyncoptimizeBackendNetworkRequests():Promise<optimization.BackendNetworkRequestsOptimizationResult>{if(!this.optimizationHelper){returnnull;}const result =awaitthis.optimizationHelper.optimizeBackendNetworkRequests();return result;}}

3.4 🔧 数据库优化实现

1. 数据库优化工具类

⌨️ entry/src/main/ets/utils/DatabaseOptimizationUtil.ets

import optimization from'@ohos.optimization';// 数据库优化工具类exportclassDatabaseOptimizationUtil{privatestatic instance: DatabaseOptimizationUtil |null=null;private optimizationHelper: optimization.OptimizationHelper |null=null;// 单例模式staticgetInstance(): DatabaseOptimizationUtil {if(!DatabaseOptimizationUtil.instance){ DatabaseOptimizationUtil.instance =newDatabaseOptimizationUtil();}return DatabaseOptimizationUtil.instance;}// 初始化数据库优化工具asyncinit():Promise<void>{if(!this.optimizationHelper){this.optimizationHelper = optimization.createOptimizationHelper();}}// 优化数据库查询性能asyncoptimizeDatabaseQueries():Promise<optimization.DatabaseQueriesOptimizationResult>{if(!this.optimizationHelper){returnnull;}const result =awaitthis.optimizationHelper.optimizeDatabaseQueries();return result;}// 优化数据库索引asyncoptimizeDatabaseIndexes():Promise<optimization.DatabaseIndexesOptimizationResult>{if(!this.optimizationHelper){returnnull;}const result =awaitthis.optimizationHelper.optimizeDatabaseIndexes();return result;}}

四、 安全加固实战 🛠️

4.1 实战目标

基于金融场景的安全加固要求,实现以下功能:

  • 代码加固:加固应用的代码;
  • 数据加密:加密用户的敏感数据;
  • 安全审计:记录用户的操作日志。

4.2 🔧 代码加固实现

1. 代码加固工具类

⌨️ entry/src/main/ets/utils/CodeHardeningUtil.ets

import hardening from'@ohos.hardening';// 代码加固工具类exportclassCodeHardeningUtil{privatestatic instance: CodeHardeningUtil |null=null;private hardeningHelper: hardening.HardeningHelper |null=null;// 单例模式staticgetInstance(): CodeHardeningUtil {if(!CodeHardeningUtil.instance){ CodeHardeningUtil.instance =newCodeHardeningUtil();}return CodeHardeningUtil.instance;}// 初始化代码加固工具asyncinit():Promise<void>{if(!this.hardeningHelper){this.hardeningHelper = hardening.createHardeningHelper();}}// 加固应用的代码asynchardenApplicationCode():Promise<hardening.ApplicationCodeHardeningResult>{if(!this.hardeningHelper){returnnull;}const result =awaitthis.hardeningHelper.hardenApplicationCode();return result;}}

4.3 🔧 数据加密实现

1. 数据加密工具类

⌨️ entry/src/main/ets/utils/DataEncryptionUtil.ets

import encryption from'@ohos.encryption';// 数据加密工具类exportclassDataEncryptionUtil{privatestatic instance: DataEncryptionUtil |null=null;private encryptionHelper: encryption.EncryptionHelper |null=null;// 单例模式staticgetInstance(): DataEncryptionUtil {if(!DataEncryptionUtil.instance){ DataEncryptionUtil.instance =newDataEncryptionUtil();}return DataEncryptionUtil.instance;}// 初始化数据加密工具asyncinit():Promise<void>{if(!this.encryptionHelper){this.encryptionHelper = encryption.createEncryptionHelper();}}// 加密用户的敏感数据asyncencryptUserSensitiveData(data:string):Promise<encryption.DataEncryptionResult>{if(!this.encryptionHelper){returnnull;}const result =awaitthis.encryptionHelper.encryptData(data);return result;}}

4.4 🔧 安全审计实现

1. 安全审计工具类

⌨️ entry/src/main/ets/utils/SecurityAuditUtil.ets

import audit from'@ohos.audit';// 安全审计工具类exportclassSecurityAuditUtil{privatestatic instance: SecurityAuditUtil |null=null;private auditHelper: audit.AuditHelper |null=null;// 单例模式staticgetInstance(): SecurityAuditUtil {if(!SecurityAuditUtil.instance){ SecurityAuditUtil.instance =newSecurityAuditUtil();}return SecurityAuditUtil.instance;}// 初始化安全审计工具asyncinit():Promise<void>{if(!this.auditHelper){this.auditHelper = audit.createAuditHelper();}}// 记录用户的操作日志asyncrecordUserOperationLogs(logData: audit.OperationLogData):Promise<audit.UserOperationLogsResult>{if(!this.auditHelper){returnnull;}const result =awaitthis.auditHelper.recordUserOperationLogs(logData);return result;}}

五、 项目配置与部署 🚀

5.1 配置文件修改

1. module.json5修改

在「entry/src/main/module.json5」中添加运维监控、性能优化、安全加固配置:

{"module":{"requestPermissions":[// ...],"abilities":[// ...],"widgets":[// ...],"pages":[// ...]}}

5.2 🔧 项目部署

1. 编译项目

在DevEco Studio中点击「Build」→「Build HAP」,编译项目。

2. 部署到设备

将编译后的HAP文件部署到鸿蒙设备上。

3. 测试金融理财项目
  • 在应用中查看应用监控的效果;
  • 在应用中查看服务器监控的效果;
  • 在应用中查看数据库监控的效果;
  • 在应用中查看前端优化的效果;
  • 在应用中查看后端优化的效果;
  • 在应用中查看数据库优化的效果;
  • 在应用中查看代码加固的效果;
  • 在应用中查看数据加密的效果;
  • 在应用中查看安全审计的效果。

六、 项目运行与效果验证 📱

6.1 效果验证

应用监控:监控应用的运行状态;
服务器监控:监控服务器的资源使用情况;
数据库监控:监控数据库的性能;
前端优化:优化前端的渲染性能;
后端优化:优化后端的响应性能;
数据库优化:优化数据库的查询性能;
代码加固:加固应用的代码;
数据加密:加密用户的敏感数据;
安全审计:记录用户的操作日志。


七、 总结与未来学习路径 🚀

7.1 总结

本文作为《鸿蒙APP开发从入门到精通》的第20篇,完成了:

  • 鸿蒙金融理财项目的运维监控设计与实现;
  • 应用监控、服务器监控、数据库监控的实现;
  • 性能优化在金融场景的核心设计与实现;
  • 前端优化、后端优化、数据库优化的实现;
  • 安全加固在金融场景的设计与实现;
  • 代码加固、数据加密、安全审计的实现。

7.2 未来学习路径

  • 第21篇:鸿蒙金融理财全栈项目——合规审计、风险控制、产品创新优化;
  • 第22篇:鸿蒙金融理财全栈项目——上线与运维、用户反馈、持续迭代。

八、 结语 ✅

恭喜你!你已经完成了《鸿蒙APP开发从入门到精通》的第20篇,掌握了金融理财项目的运维监控、性能优化、安全加固核心技术。

从现在开始,你已具备了开发运维监控完善、性能优化高效、安全加固可靠的金融级应用的能力。未来的2篇文章将逐步优化项目的合规审计、风险控制、产品创新,并最终实现应用的上线与变现。

让我们一起期待鸿蒙生态在金融领域的爆发! 🎉🎉🎉

Read more

GitHubDesktop2Chinese:3分钟让GitHub客户端变中文的终极解决方案

GitHubDesktop2Chinese:3分钟让GitHub客户端变中文的终极解决方案 【免费下载链接】GitHubDesktop2ChineseGithubDesktop语言本地化(汉化)工具 项目地址: https://gitcode.com/gh_mirrors/gi/GitHubDesktop2Chinese 还在为GitHub Desktop的英文界面而烦恼吗?每次操作都要在脑海中翻译一遍,严重影响开发效率。GitHubDesktop2Chinese项目为你提供零配置、一键式的中文界面转换方案,彻底告别语言障碍。这个GitHub汉化工具专为中文开发者设计,让版本控制变得简单直观。 🚀 快速上手:三步完成中文界面转换 第一步:获取项目源码 打开终端,执行以下命令克隆仓库: git clone https://gitcode.com/gh_mirrors/gi/GitHubDesktop2Chinese 第二步:构建可执行文件 项目支持多种构建方式,选择最适合你的方法: * 使用Visual Studio 2022直接打开项目编译 * 通过CMak

By Ne0inhk

Git凭据管理终极指南:Windows平台一键配置安全认证方案

Git凭据管理终极指南:Windows平台一键配置安全认证方案 【免费下载链接】Git-Credential-Manager-for-WindowsSecure Git credential storage for Windows with support for Visual Studio Team Services, GitHub, and Bitbucket multi-factor authentication. 项目地址: https://gitcode.com/gh_mirrors/gi/Git-Credential-Manager-for-Windows 在Windows平台上进行Git操作时,重复输入用户名密码的烦恼终于有了完美的解决方案!Git Credential Manager for Windows(简称GCM)作为微软开发的Git凭据管理工具,通过安全存储机制为企业级认证需求提供了完整的Windows认证工具支持。 🔐 为什么需要专业的Git凭据管理工具 传统Git认证方式存在诸多安全隐患: * 明文存储风险:凭据可能以未加密形式存储在.git

By Ne0inhk

【GitHub项目推荐--ORB-SLAM3:开源视觉、视觉惯性及多地图SLAM库】

简介 ORB-SLAM3 是由UZ-SLAMLab开发的开源实时SLAM(Simultaneous Localization And Mapping,同时定位与建图)库,于2021年12月22日发布V1.0版本。作为ORB-SLAM系列的最新演进,它是首个能够使用单目、双目和RGB-D相机,结合针孔与鱼眼镜头模型,执行视觉、视觉惯性及多地图SLAM的实时库。在各类传感器配置下,ORB-SLAM3均展现出与文献中最佳系统相当的鲁棒性,并在精度上显著超越。该项目不仅为学术界提供了强大的研究基准,也为工业界提供了可直接部署的高精度定位与建图解决方案。 核心价值: * 多模态融合:首次统一支持纯视觉、视觉惯性及多地图SLAM * 传感器全面:兼容单目、双目、RGB-D相机,支持针孔与鱼眼模型 * 精度领先:在多个标准数据集上实现当前最高的定位精度 * 实时性能:在普通计算机上即可实现实时处理 技术定位:ORB-SLAM3代表了视觉SLAM技术的前沿水平,通过引入惯性测量单元(IMU)融合和多地图系统,解决了长期运行中的尺度漂移、累积误差和场景变化适应等关键挑战。其开源特性促进了

By Ne0inhk

Obsidian资源下载终极提速指南:告别GitHub龟速的3个快速解决方案

还在为Obsidian主题和插件下载速度慢到怀疑人生而烦恼吗?每次从GitHub获取awesome-obsidian项目资源时,那个转圈圈的加载动画是不是让你想砸键盘?本文将分享亲测有效的Obsidian加速下载方法,通过国内镜像站点让你体验飞一般的下载速度! 【免费下载链接】awesome-obsidian🕶️ Awesome stuff for Obsidian 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-obsidian 痛点分析:为什么你的Obsidian资源下载这么慢? 网络瓶颈识别: * GitHub国际带宽限制导致国内访问缓慢 * 网络波动造成频繁中断 * 大文件传输时缺乏稳定的CDN支持 速度对比实测: * 原GitHub地址:平均50KB/s,经常断连 * 国内镜像站点:稳定2-5MB/s,一次成功 三大提速方案深度解析 方案一:GitCode全量镜像(推荐新手) 作为国内最稳定的代码托管平台,GitCode提供了完整的awesome-obsidian项目镜像: # 一键克隆完整项

By Ne0inhk