快速精简软件,如何让软件缩小到原来的5%大小,从删除文件入手,到修改C++引用库,合规解决存储问题

news2025/1/19 8:10:01

Hi~大家好,今天制作一个简单的精简软件的教学~
事先说明下,精简软件并不违反任何规定,尤其是开源软件,这里也仅讨论开源软件的修改,根据几乎所有开源软件的开源规则,精简软件,本质也就是修改软件,这种行为是被允许的,但是不能公开,也就是不能发到网上

严谨一点的说,开源软件的软件范围定义就是,你下载的文件即软件,也就是一个文件夹,或者一个压缩包,或者一个安装包文件,或者一个普通文件,而这些文件在运行时产生的所有其他文件也可被称为此软件的一部分,例如缓存文件、配置文件等

其中,绝大部分软件的用户配置文件是可被修改且公开的,因为这需要我们自己设置,而这通常也是对个人用户来说最重要的部分,比如Steam最重要的不是本体,而是我们本身,如果我们不登录账户,也就没有用户配置文件,我们即使拥有Steam也什么都做不了,所以对个人用户来说,用户配置文件就是最重要的,这只是个例子

而修改用户配置文件并不能精简软件,精简软件中的"精简"意味这做减法,也就是去掉软件中多余的功能,保留自己认为需要的功能,同时减少软件体积占用,这也就是精简的意义

下面,我们将通过一个很好的例子进行演示,来了解如何精简软件,ShareX是一个开源软件,开源协议为GPL-3.0 license,也就代表,我可以修改软件中的部分,并且公开,但是必须带有"修改版"字样

如果你要修改的软件是其他开源协议,如果不知道开源协议的具体内容,建议不要公开,仅个人使用,因为这一般是被允许的,如果要精简的软件是不开源的软件,就一定不要公开,这是一定不被允许的,个人使用即可

下面,让我们制作一个ShareX修改版,首先,这是ShareX的下载地址,这是下载好后的目录:在这里插入图片描述
我们来了解哪些能删除,哪些不能删除,首先,ShareX是个截图软件,ffmpeg.exe是用来处理视频的,这个只需要记住即可,很多软件都有ffmpeg.exe,大部分在剪辑软件内,而ShareX是个很好的例子,这个软件几乎带有所有不必要的组件

第一步,启动软件,然后删除ffmpeg.exe,如果没有提示文件已被占用,说明是可以的,然后重启软件,如果还能重启,这说明精简成功了
那么问题来了,既然启动时能删除,重启也可以,那么这个文件存在的意义是什么呢?
A:大部分软件中即使带有功能,需要用到其他文件,删除其他文件也不会提示文件已被占用,因为没有被使用,ShareX就是:

这里的屏幕录制功能就用到了ffmpeg.exe,所以删除之后,理论上,我们是用不了这个功能的,但是软件既然能正常启动,所以没有硬编码+检测,我们可以这样做,不会有问题,只要不使用这个功能即可

同样的道理,我们还可以删除Recorder-devices-setup.exe,这个看名称就能猜出来是用来设置录音设备的,一个截图软件,我认为大部分人应该用不到录音设备,你们觉得应不应该删除呢?
同样的,正常重启了,说明这是可以的

语言文件上,我们可以查看这篇文章参考:
https://blog.csdn.net/alice_tl/article/details/78918853

删除除了zh_CN以外的语言文件即可,语言文件夹默认叫做Languages,一些软件可能叫做Lang,里面会有语言文件,我们不用管后缀,像是ShareX的Languages里面是一堆语言文件夹,我们只需要保留zh_CN文件夹即可,里面的不用动,这个删了会导致软件变成英语,如果非要动的话,保留ShareX.resources.dll,删除其他的也不是不行,因为删除其他的看不出来,99%还是中文

接下来是ShareX文件夹,这里存放了这些文件:
在这里插入图片描述
你们的可能不一样,如果多出了,只需要保留这些文件即可,删除History字样的文件,而Backup里面,如果有类似"时间"作为后缀或结尾的文件,不要删除。因为那是之前的用户配置备份,我们要删除的是不带时间后缀的文件,因为那是默认的用户配置

如果不需要备份的配置文件,也可以把Backup文件夹删除,因为修改的其实是ShareX文件内的那三个配置文件,Backup就是字面意义上的备份文件

ShareX没有登录和注册的概念,因为这是个截图软件,那么用户配置默认就是这样的,几乎所有不需要登录的软件都有一个默认用户配置文件保存在类似的文件夹,如果我们修改软件中的设置,这个也会跟着改变,所以这个是一定要谨慎删除的,以Config结尾的文件一般代表某个配置文件,建议不要动


下面我们来看Stickers文件夹,里面还有一个文件夹,叫BlobEmoji,里面全是图片,这个就是重点,图片在任何软件中,甚至在任何文件中,都是最占体积的,可能有人会说,这个文件夹没有最开始的ffpmeg.exe大,但是如果你细心点,你会发现,ffmpeg.exe是可以被压缩软件解压的,而图片不可以,图片本质就是文件,而exe程序本质是一个包、夹,是一堆文件的集合,不是一个文件

单独的一个文件中,图片是最大的,虽然有很多个例,但大体上,图片是最占用空间的

我们要删除BlobEmoji,因为截图软件不需要一大堆表情包图片,果然,删除后没有影响,可正常启动

由于一一列举太麻烦,建议把计算机相关的一些简写都了解,这样非常有助于精简软件

这是一个很好的例子:FluentFTP.dll

这个动态链接库复杂实现把截图上传到FTP服务器,而大部分人应该是用不到的,我们直接删除即可,果然可以正常启动

其他的就不演示了,直接说明:
zxing和zxing相关dll:识别二维码功能实现,不要可删除
Renci.SshNet.dll:SSH功能实现,不要可删除
ImageListView.dll:图片列表预览,实际不使用,不要可删除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/427960.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何通过python实现一个web自动化测试框架?

要实现一个web自动化测试框架,可以使用Python中的Selenium库,它是最流行的Web应用程序测试框架之一。以下是一个基本的PythonSelenium测试框架的示例: 如果你想学习更详细的web自动化测试教程,我这边给你推荐一个详细的视频教程 …

第二章 webpack基础用法

webpack核心概念之entry Entry用来指定webpack打包的入口,下图中webpack找到入口文件后,会将该文件所有的代码和非代码依赖都梳理出来,最终遍历完依赖树后生成打包后的静态资源。 单入口:entry是一个字符串 module.exports{ entry…

HCIP之MPLS

目录 MPLS MPLS --- 多协议标签交换 包交换 标签交换 包交换的变更 MPLS主要应用于三大领域 ​编辑 MPLS和包交换一样,其过程也可以分为控制层面和数据层面 标签交换过程(数据层流量) 标签解读 静态搭建LSP 创建路由条件 配置MPL…

arduino自用简单图形化编程仿真

傻瓜式编程真的很适合初学者 这边就不提fritzing和proteus的pcb设计了 就推荐几个简单的 1、linkboy 官方网址:http://linkboy.com.cn/index.html 也有官方教程点我 使用方法:官网下载软件 优点:元器库特别丰富,还具备语音识别、…

新网站多久被google收录?谷歌当天收录网站靠谱吗?

新网站多久被google收录? 答案是:24小时内。 为什么你做的外贸网站在Google搜索引擎一直不收录或者收录很慢。 其实有一个很关键的原因,那就是谷歌爬虫到底有没有到你网站的页面上去抓取数据。 很大可能是没有,当然你可以通过…

ctfshow web入门 nodejs 334-341(更新中)

前言 说实在也没啥好说的,希望大家要有勇气,向难题挑战,别像我一样自始至终都是一个菜狗,哎。 这里在刚开始的,我就有一个问题就是我发现刚开始使用的是require来导入模块,但是到了后面发现大部分使用的都是…

5G网络优化工程师入职企业,都有什么不同呢?

通信行业内的网络优化工程师后期入职主要是在设备商、运营商,运营商的合作单位。 熟悉通信行业的同学肯定了解这个行业最基本的可以分为运营商和设备商,运营商在国内就是移动、联通、电信,广电四家,这四家目前不管是薪资、职业发展…

自动语音识别模型whisper安装和初探

whisper介绍 whisper是OpenAI 最近发布的语音识别模型。OpenAI 通过从网络上收集了 68 万小时的多语言(98 种语言)和多任务(multitask)监督数据对 Whisper 进行了训练,whisper可以执行多语言语音识别、语音翻译和语言…

swing-扩展徽章组件JEBadge

前言 因为工作原因,好久没有写swing组件了,最近准备优化一个功能,希望有类似徽章的功能。 徽章在平时的app和h5 页面上经常常见 ,那么在swing中如何实现一个徽章功能呢。 技术分析 为什么不选择绘制方式,却选择JLayeredPane &a…

《程序员面试金典(第6版)》面试题 08.14. 布尔运算(动态规划,分治,递归,难度hard++)

题目描述 给定一个布尔表达式和一个期望的布尔结果 result,布尔表达式由 0 (false)、1 (true)、& (AND)、 | (OR) 和 ^ (XOR) 符号组成。实现一个函数,算出有几种可使该表达式得出 result 值的括号方法。 示例 1: 输入: s “1^0|0|1”, result 0 …

STM32 LCD-ADC-DMA实验

目录 1.1 STM32 DMA简介 1.2 STM32 DMA的操作 1.DMA的初始化 2. 初始化代码 3. 主函数代码 本文将向大家介绍 STM32 的 DMA。(如有错误,欢迎批评指正) 在本章中,我们将利用 STM32 的 DMA 来实现ADC1通道1内数据传送,并在 TFTLCD 模块上显…

图像处理学习——基于霍夫变换(Matlab代码实现)

目录 💥1 概述 📚2 运行结果 🎉3 参考文献 👨‍💻4 Matlab代码 💥1 概述 霍夫变换是一种在图像中寻找直线、圆形以及其他简单形状的方法。 霍夫变换采用类似于投票的方式来获取当前图像内的形状集合&…

银河麒麟之语言设置和服务开机自启动设置

一、前言 银河麒麟操作系统作为国产操作系统,是目前国产化、信创等项目场景的主流操作系统之一,但它本质上还是基于现有的开源操作系统上的二次开发,银河麒麟服务器版是基于centos的,银河麒麟桌面版是基于debain的。既然是国产化系…

CAPL语言

1. CAPL简介 CAPL,Communication Access Programming Language,即通信访问编程语言类C语言2. CAPL主要用途 仿真节点或模块仿真时间报文、周期报文或者附加条件的重复报文使用PC键盘模拟操作按钮等人工操作事件仿真节点的定时或网络事件仿真多个时间事…

从编译器角度理解C++代码的编译和链接原理

在本文中,我们将探讨C代码的预处理、编译和链接过程。我们将详细介绍每个过程的作用和步骤,并通过代码演示来解释这个过程。 预处理 C代码预处理是将源代码转换为另一个源代码的过程,其中包括宏展开、条件编译、头文件包含等操作。预处理器…

Level3题目整理

文章目录L3-001 凑零钱L3-002 特殊堆栈L3-003 社交集群(并查集vector暴力⭐)L3-004 肿瘤诊断(三维bfs)L3-005 垃圾箱分布(多次dijkstra)L3-008 喊山(邻接表bfs🔺)L3-010 是否完全二叉搜索树&…

C++ STL学习之【list的模拟实现】

✨个人主页: 夜 默 🎉所属专栏: C修行之路 🎊每篇一句: 图片来源 A year from now you may wish you had started today. 明年今日,你会希望此时此刻的自己已经开始行动了。 文章目录🌇前言&am…

零售数据分析之操作篇12:子查询的应用

各位数据的朋友,大家好,我是老周道数据,和你一起,用常人思维数据分析,通过数据讲故事。 上期内容与作业 上一讲讲了占比相关内存计算的应用场景,包括占比、TOP占比、累计占比等,不同的占比&am…

sinGAN论文笔记

Background Knowledge 基于推理的视觉理论: 只根据图像数据本省不能对相对应的物体空间结构提供充分的约束,也就是说这是一个约束不充分的问题,因此为了理解图像的内容必须要有附加的约束条件(例如知道图中是哪一类物体的知识&am…

帮助中心能帮助企业解决什么问题?

帮助中心是企业在网站、应用程序或其他数字渠道上提供的一种资源,旨在帮助客户解决问题、回答常见问题并提供支持。一个完善的帮助中心可以为企业带来很多好处,包括提高客户忠诚度、提高满意度、降低客户支持成本等。 帮助中心能帮助企业解决的问题 提…