You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
1 week ago | |
|---|---|---|
| .. | ||
| app | 1 week ago | |
| gradle/wrapper | 2 weeks ago | |
| .gitignore | 2 weeks ago | |
| Audio_usage_license.txt | 1 week ago | |
| README.md | 1 week ago | |
| build.gradle.kts | 2 weeks ago | |
| gradle.properties | 2 weeks ago | |
| gradlew | 2 weeks ago | |
| gradlew.bat | 2 weeks ago | |
| settings.gradle.kts | 2 weeks ago | |
README.md
OnlineMsg Android Client (Kotlin + Compose)
本目录是针对当前 OnlineMsgServer 协议实现的 Android 客户端。
主要能力
- Kotlin + Jetpack Compose + Material3
- 与当前服务端协议兼容:
- 首包
publickey握手(明文) publickeychallenge-response 鉴权(签名)broadcast/forward消息发送(签名 + 防重放字段)- 消息体 RSA-OAEP-SHA256 分块加解密(190/256)
- 首包
- Android Keystore 生成并持久化客户端 RSA 密钥
- 状态管理:
ViewModel + StateFlow - 本地偏好:
DataStore(用户名、服务器地址、模式、系统消息开关) - 易用性:
- 广播/私聊一键切换
- 消息复制
- 我的公钥查看与复制
- 服务器地址保存/删除
- 状态提示与诊断信息
工程结构
app/src/main/java/com/onlinemsg/client/ui:UI、ViewModel、状态模型app/src/main/java/com/onlinemsg/client/data/crypto:RSA 加密、签名、nonceapp/src/main/java/com/onlinemsg/client/data/network:WebSocket 封装app/src/main/java/com/onlinemsg/client/data/preferences:DataStore 与地址格式化app/src/main/java/com/onlinemsg/client/data/protocol:协议 DTO
运行方式
- 使用 Android Studio 打开
android-client目录。 - 等待 Gradle Sync 完成。
- 运行
app。
命令行构建示例:
cd android-client
./gradlew assembleDebug
联调地址建议
- 模拟器建议地址:
ws://10.0.2.2:13173/ - 真机建议地址:
ws://<你的局域网IP>:13173/ - 若服务端启用 WSS,需要 Android 设备信任对应证书。
Debug 本地 CA 信任
如果你使用 deploy 目录生成的局域网自签名证书做 wss:// 联调,debug 构建可以额外信任一张本地 CA:
- 把 CA 证书放到仓库根目录的
deploy/certs/android-local/local_ca.crt deploy/certs/已在.gitignore中,这张证书只用于本地调试,不应提交到 Git- 执行
./gradlew assembleDebug时,构建脚本会自动生成 debug-only 的networkSecurityConfig - 如果该文件不存在,debug 仍然可以编译,只是不会额外信任本地 CA
推荐把局域网部署生成的 local_ca.crt 放到这个位置,再连接 wss://<你的局域网IP>:13173/
协议注意事项
- 鉴权签名串:
publickey\n{userName}\n{publicKey}\n{challenge}\n{timestamp}\n{nonce}
- 业务签名串:
broadcast|forward\n{key}\n{payload}\n{timestamp}\n{nonce}
forward的key必须是目标公钥。broadcast的key为空字符串。
构建产物导出(可选)
assembleDebug结束后会触发exportDebugApk任务,把app-debug.apk复制到导出目录。- 默认导出目录:
android-client/app/build/exports/apk-debug - 可通过以下方式覆盖导出目录:
- Gradle 属性:
-PdebugApkExportDir=/your/path - 环境变量:
DEBUG_APK_EXPORT_DIR=/your/path
- Gradle 属性:
已知限制
- 当前未内置证书固定(pinning);如用于公网生产,建议额外启用证书固定策略。