来源:AI开发日志公众号专辑「Build Your Own X With AI」
原文链接:https://mp.weixin.qq.com/s?__biz=MzUxMjg3MjE2OA==&mid=2247486347&idx=1&sn=1cafff3cf42c3c5c9fda5631a45bbde2&chksm=f95c900cce2b191abf3d80e41a6a25b0d9a65ed05eed9d07083c5b7a7456c069ec5f0bc9c055#rd

NetAssistKMP 是一款基于 Kotlin Multiplatform 和 Compose Multiplatform 构建的全面跨平台网络调试工具。它为开发者提供了统一的界面,用于在 macOS、Windows、Linux、Android 和 iOS 平台上测试 UDP、TCP Server 和 TCP Client 协议。

架构概览

项目结构

项目采用模块化架构,具有清晰的关注点分离:

NetAssistKMP/

├── composeApp/              │   ├── src/

│   │   ├── commonMain/      # 共享 UI 组件

│   │   ├── androidMain/     # Android 特定 UI

│   │   ├── iosMain/         # iOS 特定 UI

│   │   └── jvmMain/         # 桌面 UI

├── shared/                  # 业务逻辑层

│   ├── src/

│   │   ├── commonMain/      # 跨平台业务逻辑

│   │   ├── androidMain/     # Android socket 实现

│   │   ├── iosMain/         # iOS socket 实现

│   │   └── jvmMain/         # JVM socket 实现

├── iosApp/                  # iOS 应用包装器

└── server/                  # 可选的 Ktor 服务器

核心功能

网络协议支持

NetAssistKMP 全面支持三种基础网络协议:

协议

用例

关键特性

UDP

无连接通信

轻量级消息传递、广播支持

TCP Server

多客户端服务器架构

并发客户端处理、选择性消息传递

TCP Client

可靠的客户端-服务器通信

基于流的数据传输、连接监控

数据处理能力

功能

描述

实现

数据模式

ASCII 和 HEX 编码/解码

DataEncoder

实时日志

实时数据流可视化

DataLogView

统计跟踪

发送/接收指标

StatisticsManager

文件操作

数据导出和导入

FileLogger

用户体验功能

直观界面

:Material 3 设计,响应式布局

实时状态

:连接状态监控,可视化指示器

选择性消息传递

:TCP Server 可定向发送消息给特定客户端或广播给所有客户端

键盘管理

:点击关闭功能,改善移动端体验

跨平台一致性

:所有支持平台上的统一行为

技术栈

核心技术

Kotlin Multiplatform

:跨平台代码共享和编译

Compose Multiplatform

:声明式 UI 框架,原生性能

Kotlin Coroutines

:异步编程和并发管理

Material 3

:现代设计系统,具有可访问性功能

平台集成

Android

:原生 socket 实现,Android 特定优化

iOS

:Foundation 框架集成,用于网络操作

JVM 桌面

:标准 Java socket API,Swing 协程集成

开发工作流

构建系统

项目使用带有 Kotlin DSL 的 Gradle 进行构建配置,支持:

多平台编译目标

通过版本目录进行依赖管理

桌面平台的原生分发包

模块依赖

快速开始

对于初学者,推荐的学习路径是:

快速开始

  • 设置开发环境并运行应用程序

项目结构

  • 理解代码库组织

构建说明

  • 学习平台特定的构建流程

掌握基础知识后,探索架构深入分析章节:

Kotlin Multiplatform 架构

  • 平台抽象细节

网络服务架构

  • 核心网络实现

UI 状态管理

  • 响应式状态处理

关键架构模式

服务层模式

网络功能通过服务接口抽象:

NetworkService - 所有协议的通用接口

特定协议实现:UdpService、TcpClientService、TcpServerService

MVVM 架构

Model

:model/ 目录中的数据类和枚举

View

:ui/ 目录中的 Compose UI 组件

ViewModel

:NetworkAssistantViewModel 管理状态和业务逻辑

平台抽象

Socket 实现按平台分离,同时保持通用接口:

socket/ 目录中的通用契约

相应源集中的平台特定实现

NetAssist 是一款强大的跨平台网络调试工具,可帮助开发者测试和排查网络连接问题。它基于 Kotlin Multiplatform 和 Compose Multiplatform 构建,在桌面和移动平台上提供统一的体验。

前置条件

在开始之前,请确保已安装以下组件:

Java 11 或更高版本

  • Gradle 和 Kotlin 编译所必需

Android Studio

(用于 Android 开发)

Xcode

(用于 iOS 开发,仅限 macOS)

Git

  • 用于克隆代码仓库

获取项目

git clone https://github.com/build-your-own-x-with-ai/NetAssistKMP.git

cd NetAssistKMP

项目架构概览

NetAssist 采用清晰的多平台架构,具有共享业务逻辑和平台特定实现:

快速构建选项

桌面应用程序

平台

命令

输出格式

输出位置

macOS ./build-desktop.sh

DMG

composeApp/build/compose/binaries/main/dmg/

Windows build-desktop.bat

MSI

composeApp/build/compose/binaries/main/msi/

Linux ./build-desktop.sh

DEB

composeApp/build/compose/binaries/main/deb/

移动应用程序

平台

命令

输出格式

输出位置

Android ./build-android.sh

APK

composeApp/build/outputs/apk/debug/

iOS

在 Xcode 中打开

IPA

通过 Xcode 构建

运行应用程序

桌面开发模式

用于快速测试和开发,直接运行桌面应用程序:

./gradlew :composeApp:run

这将启动开发模式下的应用程序,支持 UI 更改的热重载。

Android 开发模式

在 Android Studio 中打开项目

连接 Android 设备或启动模拟器

选择 composeApp配置

点击运行按钮或使用:

./gradlew :composeApp:installDebug

iOS 开发模式

在 Xcode 中打开 iosApp/iosApp.xcodeproj

选择目标设备或模拟器

点击运行按钮

核心功能概览

NetAssist 提供全面的网络调试功能:

功能类别

功能特性

协议

UDP、TCP 客户端、TCP 服务器(多客户端)

数据模式

ASCII、HEX 编码/解码

实时监控

连接状态、数据日志、统计信息

高级选项

自动换行、AT 命令处理、文件解析

项目结构

NetAssistKMP/

├── composeApp/              │   ├── src/

│   │   ├── commonMain/      # 共享 UI 代码

│   │   ├── androidMain/     # Android 特定 UI

│   │   ├── iosMain/         # iOS 特定 UI

│   │   └── jvmMain/         # 桌面 UI

├── shared/                  # 共享业务逻辑

│   ├── src/

│   │   ├── commonMain/      # 跨平台逻辑

│   │   ├── androidMain/     # Android 网络实现

│   │   ├── iosMain/         # iOS 网络实现

│   │   └── jvmMain/         # 桌面网络实现

├── iosApp/                  # iOS 应用包装器

└── server/                  # 可选的 Ktor 服务器

常用构建命令

开发命令

清理构建缓存

./gradlew clean

运行桌面应用

./gradlew :composeApp:run

构建 Android 调试 APK

./gradlew :composeApp:assembleDebug

为当前操作系统打包桌面应用

./gradlew :composeApp:packageDistributionForCurrentOS

平台特定打包

macOS DMG

./gradlew :composeApp:packageDmg

Windows MSI

./gradlew :composeApp:packageMsi

Linux DEB

./gradlew :composeApp:packageDeb

Android Release APK

./gradlew :composeApp:assembleRelease

Android App Bundle (Play Store)

./gradlew :composeApp:bundleRelease

故障排除

常见问题

Java 版本

:确保安装了 Java 11+ 并设置为 JAVA_HOME

Android SDK

:创建包含 sdk.dir=/path/to/android/sdk的 local.properties文件

构建失败

:重新构建前尝试 ./gradlew clean

macOS 签名

:对于未签名应用,使用 xattr -cr /Applications/NetAssist.app

对于 Windows MSI 构建,确保已安装 WiX Toolset。构建过程需要默认未包含的特定 Windows 打包工具。

iOS 开发需要配备 Xcode 的 macOS 机器。iOS 项目使用无法在其他平台上构建的 Xcode 项目文件。

后续步骤

应用程序运行后,请探索这些资源:

项目结构

  • 深入了解代码库组织结构

构建说明

  • 详细的构建配置

功能特性

  • 完整的功能文档

如需了解架构和实现细节,请继续阅读

Kotlin Multiplatform 架构

指南。

NetAssistKMP 是一款 Kotlin Multiplatform网络助手应用程序,展示了现代跨平台开发模式。该项目采用模块化架构,在 UI、业务逻辑和平台特定实现之间实现了清晰的关注点分离。

整体架构

项目由三个主要模块组成,在 settings.gradle.kts 中定义:

composeApp

:使用 Compose Multiplatform 的多平台 UI 应用程序

shared

:通用业务逻辑和网络服务

server

:基于 JVM 的后端服务器应用程序

模块结构

composeApp - UI 模块

composeApp模块包含使用 Compose Multiplatform 构建的跨平台用户界面 composeApp/build.gradle.kts。它面向 Android、iOS(ARM64 和模拟器)和 JVM 平台:

composeApp/src/

├── androidMain/          ├── commonMain/           # 共享 UI 组件

├── commonTest/           # 共享 UI 测试

├── iosMain/              # iOS 特定的 UI 代码

└── jvmMain/              # 桌面特定的 UI 代码

composeApp/src/commonMain/kotlin/com/iosdevlog/netassist/ 中的通用 UI 层包含:

App.kt

:应用程序入口点

ui/

:屏幕和组件实现

NetworkAssistantScreen.kt:主应用程序屏幕

ConfigurationPanel.kt:网络配置界面

DataLogView.kt:数据可视化组件

StatisticsBar.kt:实时统计显示

shared - 业务逻辑模块

shared模块包含核心业务逻辑、网络服务和数据模型 shared/build.gradle.kts。这是应用程序的核心:

shared/src/

├── androidMain/          # Android 平台实现

├── commonMain/           # 共享业务逻辑

├── commonTest/           # 共享测试

├── iosMain/              # iOS 平台实现

└── jvmMain/              # JVM 平台实现

shared/src/commonMain/kotlin/com/iosdevlog/netassist/ 中的通用业务逻辑按层次组织:

数据模型(model/):

NetworkConfig.kt、ProtocolType.kt:网络配置

ConnectionState.kt、NetworkStatistics.kt:状态管理

LogEntry.kt、ReceivedData.kt:数据结构

服务(service/):

NetworkService.kt:抽象网络服务接口

TcpClientService.kt、TcpServerService.kt:TCP 实现

UdpService.kt:UDP 实现

平台抽象(socket/):

TcpClientSocket.kt、TcpServerSocket.kt:TCP 套接字抽象

UdpSocket.kt:UDP 套接字抽象

工具类(util/):

DataEncoder.kt:ASCII/HEX 编码工具

FileReader.kt:文件操作

ValidationUtils.kt:输入验证

状态管理(viewmodel/):

NetworkAssistantViewModel.kt:中央状态管理

server - 后端模块

server模块提供使用 Ktor 的基于 JVM 的后端服务 server/build.gradle.kts:

server/src/

├── main/

│   ├── kotlin/com/iosdevlog/netassist/

│   │   └── Application.kt    # 服务器入口点

│   └── resources/

│       └── logback.xml        # 日志配置

└── test/                     # 服务器测试

平台特定配置

Android 平台

最低 SDK

:24 gradle/libs.versions.toml

目标 SDK

:36 gradle/libs.versions.toml

编译 SDK

:36 gradle/libs.versions.toml

清单文件

:composeApp/src/androidMain/AndroidManifest.xml

资源

:composeApp/src/androidMain/res/ 中的启动图标和字符串资源

iOS 平台

目标

:ARM64 设备和 ARM64 模拟器 composeApp/build.gradle.kts

框架

:名为 “ComposeApp” 的静态框架

配置

:iosApp/Configuration/Config.xcconfig

应用结构

:iosApp/iosApp/ 中的 Swift 集成

JVM 桌面平台

目标

:JVM 11 composeApp/build.gradle.kts

资源

:composeApp/src/jvmMain/resources/ 中的桌面图标

依赖管理

项目使用 Gradle Version Catalogs进行集中依赖管理 gradle/libs.versions.toml:

技术

版本

用途

Kotlin

2.2.21

核心语言

Compose Multiplatform

1.9.3

UI 框架

Ktor

3.3.3

网络服务器

KotlinX Coroutines

1.10.2

异步编程

AndroidX Lifecycle

2.9.6

生命周期管理

构建配置

项目使用 Kotlin DSL作为构建脚本,启用了类型安全项目访问器 settings.gradle.kts。关键构建文件:

根目录

:build.gradle.kts - 插件管理

Compose App

:composeApp/build.gradle.kts - 多平台 UI 配置

Shared

:shared/build.gradle.kts - 业务逻辑配置

Server

:server/build.gradle.kts - 后端服务配置

支持文件

仓库包含全面的文档和构建自动化:

文档:涵盖 README.md、构建说明、故障排除指南和功能文档的多个 markdown 文件

构建脚本:用于自动编译的平台特定构建脚本(build-android.sh、build-desktop.sh)

图标生成:用于跨所有平台生成应用程序图标的 Python 脚本(generate-icons.py)

测试:测试 TCP 服务器实现(test-tcp-server.py)

这种模块化结构实现了跨平台的 代码复用,同时在需要时保持 平台特定优化。UI、业务逻辑和后端服务之间的分离提供了清晰的架构,为未来的开发提供了良好的扩展性。

下一步

要了解这些模块如何协同工作,请继续阅读

构建说明

以了解如何编译和运行应用程序,然后探索

Kotlin Multiplatform 架构

以获得更深入的架构洞察。

本指南提供了 NetAssist 的完整构建说明,NetAssist 是一款支持桌面端(macOS、Windows、Linux)、Android 和 iOS 平台的 Kotlin Multiplatform 网络助手应用程序。

先决条件

系统要求

要求

最低版本

用途

Java JDK

11 或更高版本

构建环境

Android SDK

API 24+

Android 开发

Xcode

最新版本

iOS 开发

Gradle

8.5+

构建系统

环境设置

在构建之前,请验证您的 Java 安装:

java -version

确保 JAVA_HOME 环境变量已正确设置为 JDK 11 或更高版本的路径,以便成功构建。

快速构建选项

一键构建脚本

项目提供了自动化构建脚本以实现快速部署:

./build-desktop.sh    # macOS/Linux

build-desktop.bat     # Windows

Android 应用程序

./build-android.sh    # macOS/Linux

build-android.bat     # Windows

这些脚本会自动检测您的平台并执行相应的构建命令 build-desktop.sh。

桌面应用程序构建

开发模式

直接运行桌面应用程序进行测试:

./gradlew :composeApp:run

生产构建

平台特定包

平台

命令

输出格式

输出位置

macOS

./gradlew :composeApp:packageDmg

DMG

composeApp/build/compose/binaries/main/dmg/NetAssist-1.0.0.dmg

Windows

./gradlew :composeApp:packageMsi

MSI

composeApp/build/compose/binaries/main/msi/NetAssist-1.0.0.msi

Linux

./gradlew :composeApp:packageDeb

DEB

composeApp/build/compose/binaries/main/deb/netassist_1.0.0-1_amd64.deb

通用构建命令

为您当前的平台生成相应的包:

./gradlew :composeApp:packageDistributionForCurrentOS

应用程序配置

桌面应用程序的配置在 composeApp/build.gradle.kts 中完成,包括:

包名:NetAssist

版本:1.0.0

供应商:iOSDevLog

描述:Network Assistant - UDP/TCP Client/Server Tool

Android 应用程序构建

开发构建

将调试版本安装到已连接的设备:

./gradlew :composeApp:installDebug

生产构建

APK 构建

构建类型

命令

输出

使用场景

Debug

./gradlew :composeApp:assembleDebug composeApp-debug.apk

测试和开发

Release

./gradlew :composeApp:assembleRelease composeApp-release.apk

分发(需要签名)

Google Play 分发

为 Google Play 商店生成 App Bundle:

./gradlew :composeApp:bundleRelease

输出:composeApp/build/outputs/bundle/release/composeApp-release.aab

Android 配置

应用程序详细信息来自 composeApp/build.gradle.kts:

应用 ID:com.iosdevlog.netassist

最低 SDK:24 (Android 7.0)

目标 SDK:36 (Android 14)

版本代码:1

版本名称:1.0

iOS 应用程序构建

框架生成

生成 iOS 框架用于 Xcode 集成:

./gradlew :composeApp:linkDebugFrameworkIosArm64

Xcode 构建过程

在 Xcode 中打开 iosApp/iosApp.xcodeproj

选择目标设备或模拟器

使用 Xcode 的 Run 或 Archive 命令构建

iOS 应用程序通过 iosApp/目录中的 Xcode 项目设置进行配置。

构建架构

Multiplatform 模块结构

依赖管理

项目使用在 gradle/libs.versions.toml 中定义的 Gradle 版本目录进行集中依赖管理,包括:

Kotlin Multiplatform 2.2.21

Compose Multiplatform 1.9.3

Android Gradle Plugin 8.13.2

Ktor 3.3.3

故障排除

常见构建问题

Java 版本错误

验证 Java 版本

java -version

如有需要,设置 JAVA_HOME

export JAVA_HOME=/path/to/java11

构建缓存问题

清理并重新构建

./gradlew clean

./gradlew build

Windows 需要 WiX Toolset

对于 Windows 上的 MSI 构建,请从 https://wixtoolset.org/ 安装 WiX Toolset

macOS 代码签名

如需分发,请配置 Apple Developer 证书。测试时:

允许未签名的应用程序

xattr -cr /Applications/NetAssist.app

Android SDK 配置

创建 local.properties文件:

sdk.dir=/path/to/android/sdk

构建输出验证

通过检查输出目录来验证构建是否成功:

桌面端:composeApp/build/compose/binaries/main/

Android:composeApp/build/outputs/

iOS:通过 Xcode 生成

后续步骤

构建完成后,探索应用程序架构:

Kotlin Multiplatform 架构

  • 了解多平台项目结构

网络服务架构

  • 了解核心网络组件

项目结构

  • 熟悉代码组织

有关更多构建细节和平台特定要求,请参阅完整的 BUILD_INSTRUCTIONS.md 文件。

image-1

image-2

image-3

image-4

image-5

image-6