Skip to content

lizhongyue248/PortView

Repository files navigation

logo

PortView

Package release svg Package release svg
中文 | English

💡简介

这个项目主要功能提供图形化的界面来查看当前系统端口占用情况,目前支持 Windows、Macos、Debian Linux Desktop、Centos Linux Desktop 平台。你可以通过 Github Release 获取最新版本进行体验,主要是以学习 compose-multiplatform 为目的进行开发的,但是也努力把它给做好。

Demo

✨ 特性

  • ✓ 查看与搜索当前占用端口的程序

  • ✓ 关闭指定程序

  • ✓ 查看监听的 IP 地址和 PID

  • ✓ 打开程序所在目录

  • ✓ 复制程序运行命令

  • ✓ 夜间模式支持、中英文支持

  • ✓ 配置文件支持

  • ✓ 运行日志

  • ✓ Windows 提权操作

  • ✓ 核心代码单元测试用例

  • ❏ 安装文件增加数字签名

  • ❏ 自动更新应用

🧑‍💻 开发

工具主要使用技术栈为 compose-multiplatform,基于此完成多桌面端的分发。因此写法与 Jetpack compose 具有一点差异,同时增加了部分独属于 Desktop 的特有组件(Desktop、Tray、Scrollbar、Notification 等)。其中包含了自定义的部分组件,例如可隐藏标题持久在最上层的窗口等。

核心代码

获取进程的核心代码一开始是通过 JNA 调用系统 api 完成,但是由于对于不同平台主要通过调用底层 api,在 mac 上调试的时候发现这点比较难,又不太想通过命令解析的方式获取数据。最后选择使用 oshi 来获取系统进程和网络信息,存在的问题就是获取的速度相比于底层 api 慢了很多,但是数据完整性和跨平台性确是支持最好的。原生 Windows api 获取进程信息在 commit cd3c7f77 进行重构。

配置信息

Table 1. 配置文件存储路径

系统

配置文件路径

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 JDKKotlin 进行开发,主要提供如下命令运行与打包

Table 2. 命令与用途

命令

用途

其他

./gradlew run

运行程序

-

./gradlew runRelease

运行发版后的程序

不会进行重新构建

./gradlew runReleaseDistributable

运行发版后的程序

需要重新构建

./gradlew packageReleaseDistributionForCurrentOS

根据当前操作系统打包

支持 msi, dmg, deb, rpm

构建后的文件存放在 composeApp/build 目录,打包后的文件存放在 composeApp/build/packages 目录

发布

使用 Github Action 进行打包和分发,检测到有 v 字母开头的标签时,自动进行发布到 Github Release。值得注意的是,CHANGELOG.adoc 文件是需要人工去维护的,因此每次增加功能或者修复,需要补充文档,这也是较为推荐的一种实践。

签名问题

MacWindows 上都存在签名问题,软件安装时会提示来自不受信任的开发者,参考 打开来自身份不明开发者的 Mac App将排除项添加到 Windows 安全中心。你可以完全放心,应用不进行任何网络请求与恶意修改系统文件,如果你介意,还可以下载源码进行编译运行。

✅ 测试

目前在以下平台功能性测试通过

  • Windows 11 23H2 (22631)

  • Macos Sonoma 14.2.1

  • Ubuntu 22.04.3 Gnome Desktop

单元测试一方面是 compose-multiplatform 支持还不特别完善,另一方面是需求在变动没有完全确定下来,所以一直没有写。待完善…​