# kunkunyangApp1 — 项目代码分析文档 ## 1. 项目概述 **kunkunyangApp1** 是一个基于 **HarmonyOS(鸿蒙)** 原生开发的应用,使用 **ArkTS** 语言和 **ArkUI** 声明式 UI 框架构建。它是一个 AI 聊天客户端,主题风格围绕游戏角色"花火"(Sparkle / Hanabi),通过 TCP 套接字与 Python 后端进行实时通信,并提供聊天历史记录查看功能。 | 属性 | 值 | |------|------| | **包名** | `com.example.kunkunyangapp` | | **版本** | 1.0.0(versionCode: 1000000) | | **目标 SDK** | HarmonyOS API 6.0.2(级别 22) | | **编译 SDK** | HarmonyOS 6.0.2.130 | | **设备类型** | 手机(phone) | | **应用标签** | "kunkunyangApp" | | **API 模式** | Stage 模式(Stage Model) | --- ## 2. 技术栈 | 层级 | 技术 | |------|------| | **语言** | ArkTS(鸿蒙扩展 TypeScript) | | **UI 框架** | ArkUI(声明式 UI) | | **构建系统** | Hvigor | | **包管理** | ohpm | | **虚拟机** | Ark Engine 13.0.1.0 | | **网络 — TCP** | `@ohos.net.socket` | | **网络 — HTTP** | `@ohos.net.http` | | **路由** | `@ohos:router` | | **日志** | `@ohos:hilog` | | **测试框架** | `@ohos/hypium` 1.0.25 | --- ## 3. 目录结构 ``` kunkunyangApp1/ ├── AppScope/ # 应用级配置 │ ├── app.json5 # 应用清单(bundleName、版本号、图标) │ └── resources/base/ │ ├── element/string.json # 字符串资源 │ └── media/ # 应用图标(前景、背景、分层图标) │ ├── entry/ # 主入口模块(HAP) │ ├── build-profile.json5 # 模块构建配置(混淆、编译选项) │ ├── hvigorfile.ts # Hvigor 模块任务入口 │ ├── oh-package.json5 # 模块依赖声明 │ ├── obfuscation-rules.txt # 代码混淆规则 │ └── src/main/ets/ │ ├── entryability/ │ │ └── EntryAbility.ets # 应用入口 UIAbility │ ├── entrybackupability/ │ │ └── EntryBackupAbility.ets # 备份扩展能力 │ └── pages/ │ ├── Index.ets # 开屏欢迎页 │ ├── souYe.ets # 主聊天页面 │ └── jiYi.ets # 聊天记录页面 │ ├── hvigor/ # 构建系统配置 │ └── hvigor-config.json5 ├── hvigorfile.ts # 根构建任务入口 ├── build-profile.json5 # 根构建配置(产品、签名、模块) ├── oh-package.json5 # 根依赖配置 ├── code-linter.json5 # 代码检查规则 └── local.properties # 本地开发配置 ``` --- ## 4. 页面路由 路由在 `main_pages.json` 中声明式配置: ```json { "src": [ "pages/Index", "pages/souYe", "pages/jiYi" ] } ``` **路由流转:** ``` 应用启动 → EntryAbility.onCreate → loadContent('pages/Index') │ ▼ Index(开屏动画页)──"进入应用"按钮──→ souYe(聊天主页) │ 右上角头像图标──→ jiYi(聊天记录页) ``` --- ## 5. 页面详解 ### 5.1 Index.ets — 开屏欢迎页 **文件路径:** `entry/src/main/ets/pages/Index.ets` **功能:** 带序列动画的欢迎闪屏,分四段依次展示: | 阶段 | 内容 | 延迟 | 字体样式 | |------|------|------|----------| | 第一段 | "欢迎欢迎" | 500ms | 36sp,粗体,粉色(#FF4081) | | 第二段 | "来到花火大人的世界" | 1500ms | 28sp,蓝色(#3F51B5) | | 第三段 | "那我们开始新的剧本吧" | 2500ms | 24sp,橙色(#FF9800) | | 按钮 | "进入应用" | 3500ms | 蓝色按钮(#007DFF),白色文字 | **动画实现:** - 每次显示一段文字并执行 `animateTo` 弹跳动画 - 动画从 `translateY=50` 跳到 `Y=0`(主动画,800ms,EaseOut 曲线) - 主动画完成后追加微弹跳效果(Y → -5 → 0) - 点击"进入应用"按钮通过 `router.pushUrl` 导航到 `pages/souYe` **响应式状态:** `showText1/2/3`、`showBat`、`offsetY1/2/3/4` --- ### 5.2 souYe.ets — 主聊天页面 **文件路径:** `entry/src/main/ets/pages/souYe.ets` **功能:** 核心 AI 聊天界面,通过 TCP 套接字与 Python 后端通信。 #### 界面布局(自上而下) ``` ┌─────────────────────────────────┐ │ "花火(─‿‿─)" 标题 [头像] │ ← 标题栏,头像可点击跳转历史页 │ ● 连接状态 │ ← 绿/红色圆点 + 文字 │ │ │ ┌─────────────────────────┐ │ │ │ 用户消息(右对齐绿气泡) │ │ │ │ AI消息(左对齐蓝气泡) │ │ ← 聊天列表(Scroll) │ │ AI 打字中...(实时显示) │ │ │ └─────────────────────────┘ │ │ [_________输入框_________] [发送]│ ← 输入区域 │ [呼叫火花花] [清空内容] │ ← 操作按钮 │ 确保Python后端已启动并监听8889端口│ └─────────────────────────────────┘ ``` #### 核心功能 **TCP 连接管理:** - 连接到 `10.0.2.2:8889`(Android 模拟器中映射到宿主机 localhost) - 按钮标签在"呼叫火花花"和"挂掉"之间切换 - 连接成功时清空聊天记录并重置状态 - 页面销毁(`aboutToDisappear`)时自动断开连接并清理定时器 **消息发送:** - 用户输入通过 `socket.send()` 发送原始文本到服务器 - 发送锁(`isAiReplying`):AI 回复期间禁止发送新消息 - 输入框和发送按钮在 AI 回复期间均禁用(灰色 `#CCCCCC`) **AI 回复 — 打字机效果:** - 服务端流式返回数据(`message` 事件),逐块追加到 `pendingText` - 收到首个数据块后启动定时器,按 `typingSpeed`(默认 50ms/字)逐字显示 - 显示完所有字符后,将完整回复写入 `messages[]`,释放发送锁 - 打字过程中自动滚动到底部 **消息气泡样式:** | 角色 | 对齐 | 气泡颜色 | 圆角 | 头像位置 | |------|------|----------|------|----------| | 用户 | 右对齐 | #E8F5E9(浅绿) | 左上8、右上8、左下8、右下0 | 右侧 | | AI | 左对齐 | #F0F8FF(浅蓝) | 左上0、右上8、左下8、右下8 | 左侧 | **响应式状态:** `messages[]`、`currentAiReply`、`pendingText`、`connectionStatus`、`isConnected`、`userInput`、`serverIP`、`serverPort`、`typingSpeed`、`isAiReplying` --- ### 5.3 jiYi.ets — 聊天记录页面 **文件路径:** `entry/src/main/ets/pages/jiYi.ets` **功能:** 通过 HTTP 请求获取历史聊天记录并展示。 **HTTP 请求详情:** | 属性 | 值 | |------|------| | **URL** | `http://10.0.2.2:8080/api/get_data` | | **方法** | GET | | **Content-Type** | application/json | | **连接超时** | 5000ms | | **读取超时** | 5000ms | **后端响应格式:** ```typescript interface BackendResponse { code: number; // 200 表示成功 msg: string; // 状态信息 data: ChatRecord[]; // 聊天记录数组 } interface ChatRecord { id: number; user_input: string; // 用户输入 ai_reply: string; // AI 回复 chat_time: string; // 聊天时间 } ``` **状态处理:** | 状态 | UI 展示 | |------|---------| | 加载中 | `LoadingProgress` 旋转指示器 | | 错误 | 红色错误信息 + "重新加载"按钮 | | 无数据 | "暂无聊天记录"文字提示 | | 有数据 | `List` 组件展示每条记录(用户输入 / 花火回复 / 时间) | 每条记录使用白色卡片布局,带有用户输入行、AI 回复行(标注"花火:")和时间行,卡片之间有分割线。 --- ## 6. 网络通信架构 ``` ┌─────────────────────┐ ┌──────────────────────┐ │ HarmonyOS 应用 │ │ Python 后端 │ │ │ │ │ │ souYe.ets ──TCP──→ │ 8889 │ AI 聊天服务(流式) │ │ (实时聊天) │ │ │ │ │ │ │ │ jiYi.ets ──HTTP─→ │ 8080 │ REST API 服务 │ │ (聊天记录) │ │ GET /api/get_data │ └─────────────────────┘ └──────────────────────┘ ``` --- ## 7. 权限配置 | 权限 | 用途 | |------|------| | `ohos.permission.INTERNET` | 网络访问(TCP + HTTP) | | `ohos.permission.GET_NETWORK_INFO` | 获取网络状态信息 | --- ## 8. 应用入口 — EntryAbility **文件路径:** `entry/src/main/ets/entryability/EntryAbility.ets` 继承自 `UIAbility`,是应用的生命周期入口: | 生命周期方法 | 行为 | |-------------|------| | `onCreate` | 设置颜色模式为跟随系统(`COLOR_MODE_NOT_SET`) | | `onWindowStageCreate` | 加载首页 `pages/Index` | | `onForeground` / `onBackground` | 前后台切换日志 | | `onDestroy` | 销毁日志 | --- ## 9. 状态管理 应用使用 **ArkUI 内置响应式状态管理**,无外部状态管理库: - 每个页面是一个继承自 `ViewPU` 的类 - 使用 `@State` 装饰器标记响应式属性 - `ObservedPropertySimplePU` — 简单类型(string、number、boolean) - `ObservedPropertyObjectPU` — 对象/数组类型 - 生命周期钩子:`aboutToAppear`、`aboutToDisappear`、`aboutToBeDeleted` - 条件渲染通过 `If.create()` / `If.pop()` 和 `ForEach` 实现 --- ## 10. 构建配置 ### 构建模式 | 模式 | 混淆 | 说明 | |------|------|------| | debug | 关闭 | 开发调试用 | | release | 开启 | 生产发布用,启用属性/文件名/导出混淆 | ### 代码检查 `code-linter.json5` 配置了安全规则: - `@performance/recommended` — 性能规则 - `@typescript-eslint/recommended` — TypeScript 最佳实践 - 自定义安全规则:禁止弱加密算法(AES、哈希、MAC、DH、DSA、ECDSA、RSA、3DES) ### Hvigor 构建参数 - 严格模式:区分大小写检查 + 标准化 OHM URL - Node 选项:`maxOldSpaceSize = 8192 MB` - 编译模式:ES Module --- ## 11. 关键文件索引 | 文件 | 说明 | |------|------| | `AppScope/app.json5` | 应用清单 | | `build-profile.json5` | 根构建配置 | | `entry/build-profile.json5` | 模块构建配置 | | `entry/src/main/ets/entryability/EntryAbility.ets` | 应用入口 | | `entry/src/main/ets/pages/Index.ets` | 开屏引导页 | | `entry/src/main/ets/pages/souYe.ets` | 主聊天页(TCP 通信) | | `entry/src/main/ets/pages/jiYi.ets` | 聊天记录页(HTTP 请求) | | `entry/src/main/resources/base/profile/main_pages.json` | 页面路由配置 | | `code-linter.json5` | 代码检查规则 | | `hvigor/hvigor-config.json5` | 构建系统配置 |