这个项目主要功能提供图形化的界面来查看当前系统端口占用情况,目前支持 Windows、Macos、Debian Linux Desktop、Centos Linux Desktop 平台。你可以通过 Github Release 获取最新版本进行体验,主要是以学习 compose-multiplatform 为目的进行开发的,但是也努力把它给做好。
-
✓ 查看与搜索当前占用端口的程序
-
✓ 关闭指定程序
-
✓ 查看监听的 IP 地址和 PID
-
✓ 打开程序所在目录
-
✓ 复制程序运行命令
-
✓ 夜间模式支持、中英文支持
-
✓ 配置文件支持
-
✓ 运行日志
-
✓ Windows 提权操作
-
✓ 核心代码单元测试用例
-
❏ 安装文件增加数字签名
-
❏ 自动更新应用
工具主要使用技术栈为 compose-multiplatform,基于此完成多桌面端的分发。因此写法与 Jetpack compose 具有一点差异,同时增加了部分独属于 Desktop 的特有组件(Desktop、Tray、Scrollbar、Notification 等)。其中包含了自定义的部分组件,例如可隐藏标题持久在最上层的窗口等。
获取进程的核心代码一开始是通过 JNA 调用系统 api 完成,但是由于对于不同平台主要通过调用底层 api,在 mac 上调试的时候发现这点比较难,又不太想通过命令解析的方式获取数据。最后选择使用 oshi 来获取系统进程和网络信息,存在的问题就是获取的速度相比于底层 api 慢了很多,但是数据完整性和跨平台性确是支持最好的。原生 Windows api 获取进程信息在 commit cd3c7f77 进行重构。
系统 |
配置文件路径 |
Macos |
/Users/{username}/Library/Preferences/PortView/zyue |
Windows |
C:\Users\{username}\AppData\Local\zyue\PortView |
Linux |
/home/{username}/.config/PortView |
值得注意的是,目前 compose-multiplatform
通过 gradle
的配置将其复制到对应平台的 app/resources
目录下,参考 官方文档 配置如下
appResourcesRootDir.set(project.layout.projectDirectory.dir("resources"))
目前存放的只是对 windows
有效的提权文件。
compose-multiplatform
使用了 ProGuard 进行代码缩小和混淆,混淆目前是关闭的,但是对于某些第三方库使用会造成类似无法找到类的异常情况,因此需要在 compose-desktop.pro
文件中定义某些不进行处理的包或者类,
使用 Gradle
进行构建,Graalvm-ce-17 JDK
与 Kotlin
进行开发,主要提供如下命令运行与打包
命令 |
用途 |
其他 |
|
运行程序 |
- |
|
运行发版后的程序 |
不会进行重新构建 |
|
运行发版后的程序 |
需要重新构建 |
|
根据当前操作系统打包 |
支持 |
构建后的文件存放在 composeApp/build
目录,打包后的文件存放在 composeApp/build/packages
目录
使用 Github Action 进行打包和分发,检测到有 v
字母开头的标签时,自动进行发布到 Github Release。值得注意的是,CHANGELOG.adoc
文件是需要人工去维护的,因此每次增加功能或者修复,需要补充文档,这也是较为推荐的一种实践。
在 Mac
和 Windows
上都存在签名问题,软件安装时会提示来自不受信任的开发者,参考 打开来自身份不明开发者的 Mac App 与 将排除项添加到 Windows 安全中心。你可以完全放心,应用不进行任何网络请求与恶意修改系统文件,如果你介意,还可以下载源码进行编译运行。