permissionlesstech/bitchat-android

GitHub: permissionlesstech/bitchat-android

基于蓝牙 mesh 的去中心化加密通讯应用,无需互联网即可在 Android 设备间进行端到端加密的多跳消息中继。

Stars: 6284 | Forks: 1512

Bitchat Android Logo

# bitchat for Android 一款安全、去中心化的点对点通讯应用,基于 Bluetooth mesh 网络运行。mesh 聊天无需互联网,无需服务器,无需手机号码——只有纯粹的加密通信。bitchat 还支持 geohash 频道,该频道使用互联网连接让您与同一地理区域的其他人建立联系。 这是原始 [bitchat iOS 应用](https://github.com/jackjackbits/bitchat) 的 **Android 移植版**,保持 100% 的协议兼容性,以实现跨平台通信。 ## 安装 bitchat 您可以从 [GitHub Releases 页面](https://github.com/permissionlesstech/bitchat-android/releases) 下载最新版本的 bitchat for Android。 或者您可以: [Get it on Google Play](https://play.google.com/store/apps/details?id=com.bitchat.droid) **说明:** 1. **下载 APK:** 在您的 Android 设备上,导航至上述链接并下载最新的 `.apk` 文件。打开它。 2. **允许未知来源:** 在某些设备上,在安装 APK 之前,您可能需要在设备的设置中启用“安装未知来源应用”。这通常可以在 **设置 > 安全** 或 **设置 > 应用和通知 > 特殊应用访问** 下找到。 3. **安装:** 打开下载的 `.apk` 文件开始安装。 ## 许可证 本项目已发布至公共领域。有关详细信息,请参阅 [LICENSE](LICENSE.md) 文件。 ## 功能 - **✅ 跨平台兼容**:与 iOS bitchat 保持完全的协议兼容性 - **✅ 去中心化 Mesh 网络**:通过 Bluetooth LE 进行自动节点发现和多跳消息中继 - **✅ 端到端加密**:私聊使用 X25519 密钥交换 + AES-256-GCM - **✅ 基于频道的聊天**:基于主题的群组消息传递,支持可选的密码保护 - **✅ 存储与转发**:为离线节点缓存消息,并在其重新连接时送达 - **✅ 隐私优先**:无需账户,无需手机号码,没有永久性标识符 - **✅ IRC 风格命令**:熟悉的 `/join`、`/msg`、`/who` 风格界面 - **✅ 消息保留**:由频道所有者控制的可选的频道范围消息保存 - **✅ 紧急擦除**:三击 Logo 即可立即清除所有数据 - **✅ 现代 Android UI**:采用 Jetpack Compose 和 Material Design 3 - **✅ 深色/浅色主题**:与 iOS 版本相匹配的受终端启发的美学设计 - **✅ 电池优化**:自适应扫描和电源管理 ## Android 设置 ### 前置条件 - **Android Studio**:Arctic Fox (2020.3.1) 或更高版本 - **Android SDK**:API level 26 (Android 8.0) 或更高版本 - **Kotlin**:1.8.0 或更高版本 - **Gradle**:7.0 或更高版本 ### 构建说明 1. **克隆仓库:** git clone https://github.com/permissionlesstech/bitchat-android.git cd bitchat-android 2. **在 Android Studio 中打开:** # 打开 Android Studio 并选择 "Open an Existing Project" # 导航到 bitchat-android 目录 3. **构建项目:** ./gradlew build 4. **安装到设备:** ./gradlew installDebug ### 开发构建 带有调试功能的开发构建: ``` ./gradlew assembleDebug adb install -r app/build/outputs/apk/debug/app-debug.apk ``` ### 发布构建 用于生产环境的发布: ``` ./gradlew assembleRelease ``` ## Android 特定要求 ### 权限 应用需要以下权限(将自动请求): - **Bluetooth**:核心 BLE 功能 - **位置**:Android 上进行 BLE 扫描所必需 - **网络**:通过公共互联网中继扩展您的 mesh 网络 - **通知**:消息提醒和后台更新 ### 硬件要求 - **Bluetooth LE (BLE)**:mesh 网络所必需 - **Android 8.0+**:最低 API level 26 - **RAM**:建议 2GB 以获得最佳性能 ## 用法 ### 基本命令 - `/j #channel` - 加入或创建频道 - `/m @name message` - 发送私聊消息 - `/w` - 列出在线用户 - `/channels` - 显示所有已发现的频道 - `/block @name` - 拉黑某节点,不让其给您发消息 - `/block` - 列出所有被拉黑的节点 - `/unblock @name` - 取消拉黑某节点 - `/clear` - 清除聊天消息 - `/pass [password]` - 设置/更改频道密码(仅限所有者) - `/transfer @name` - 转移频道所有权 - `/save` - 切换频道的消息保留功能(仅限所有者) ### 快速入门 1. 在您的 Android 设备上**安装应用**(需要 Android 8.0+) 2. 出现提示时,**授予权限**以使用 Bluetooth 和位置 3. **启动 bitchat** - 它将自动开启 mesh 网络 4. **设置您的昵称**或使用自动生成的昵称 5. **自动连接**到附近的 iOS 和 Android bitchat 用户 6. 使用 `/j #general` **加入频道**或在公共聊天室开始聊天 7. **消息中继**通过 mesh 网络到达较远的节点 ### Android UI 功能 - **Jetpack Compose UI**:现代 Material Design 3 界面 - **深色/浅色主题**:与 iOS 相匹配的受终端启发的美学设计 - **触觉反馈**:针对交互和通知的震动 - **自适应布局**:针对各种 Android 屏幕尺寸进行了优化 - **消息状态**:实时的送达和已读回执 - **RSSI 指示器**:每个节点的信号强度颜色 ### 频道功能 - **密码保护**:频道所有者可以使用 `/pass` 设置密码 - **消息保留**:所有者可以使用 `/save` 启用强制消息保存 - **@ 提及**:使用 `@nickname` 提及用户(支持自动补全) - **所有权转移**:使用 `/transfer` 将控制权交给受信任的用户 ## 安全与隐私 ### 加密 - **私聊消息**:X25519 密钥交换 + AES-256-GCM 加密 - **频道消息**:Argon2id 密码派生 + AES-256-GCM - **数字签名**:Ed25519 用于保证消息真实性 - **前向保密**:每次会话都会生成新的密钥对 ### 隐私功能 - **无需注册**:无需账户、电子邮件或电话号码 - **默认阅后即焚**:消息仅存在于设备内存中 - **掩护流量**:随机延迟和虚假消息防止流量分析 - **紧急擦除**:三击 Logo 即可立即清除所有数据 - **内置 Tor 支持**:在互联网连接可用时,集成内置的 Tor 网络以增强隐私 ## 性能与效率 ### 消息压缩 - **LZ4 压缩**:自动压缩大于 100 字节的消息 - 在典型的文本消息上**节省 30-70% 的带宽** - **智能压缩**:跳过已压缩的数据 ### 电池优化 - **自适应电源模式**:根据电池电量自动调整 - 性能模式:充电或电量大于 60% 时启用全部功能 - 均衡模式:默认运行方式(电量在 30-60% 之间) - 省电模式:电量低于 30% 时减少扫描 - 超低电量模式:电量低于 10% 时的紧急模式 - **后台效率**:应用处于后台时自动省电 - **可配置的扫描**:占空比根据电池状态进行调整 ### 网络效率 - **优化的 Bloom filters**:以更少的内存更快地检测重复项 - **消息聚合**:将小消息批量处理以减少传输次数 - **自适应连接限制**:根据电源模式调整节点连接数 ## 技术架构 ### 二进制协议 bitchat 使用针对 Bluetooth LE 优化过的高效二进制协议: - 具有 1 字节类型字段的紧凑数据包格式 - 基于 TTL 的消息路由(最多 7 跳) - 对大型消息进行自动分片 - 通过唯一 ID 进行消息去重 ### Mesh 网络 - 每台设备同时充当客户端和外围设备 - 自动节点发现和连接管理 - 为离线消息传递提供存储和转发 - 自适应占空比以优化电池消耗 ### Android 特定优化 - **Coroutine 架构**:用于 mesh 网络的异步操作 - **Kotlin Coroutines**:线程安全的并发 mesh 操作 - **EncryptedSharedPreferences**:用于用户设置的安全存储 - **生命周期感知**:正确处理 Android 应用生命周期 - **电池优化**:前台服务和自适应扫描 ## Android 技术架构 ### 核心组件 1. **BitchatApplication.kt**:应用层初始化和依赖注入 2. **MainActivity.kt**:处理权限和 UI 托管的主 Activity 3. **ChatViewModel.kt**:管理应用状态和业务逻辑的 MVVM 模式 4. **BluetoothMeshService.kt**:核心 BLE mesh 网络(central + peripheral 角色) 5. **EncryptionService.kt**:使用 BouncyCastle 进行加密操作 6. **BinaryProtocol.kt**:与 iOS 格式相匹配的二进制数据包编解码 7. **ChatScreen.kt**:带有 Material Design 3 的 Jetpack Compose UI ### 依赖项 - **Jetpack Compose**:现代声明式 UI - **BouncyCastle**:加密操作 (X25519, Ed25519, AES-GCM) - **Nordic BLE Library**:可靠的 Bluetooth LE 操作 - **Kotlin Coroutines**:异步编程 - **LZ4**:消息压缩(启用时) - **EncryptedSharedPreferences**:安全的本地存储 ### 二进制协议兼容性 Android 实现与 iOS 保持了 100% 的二进制协议兼容性: - **Header 格式**:相同的 13 字节 Header 结构 - **数据包类型**:相同的消息类型和路由逻辑 - **加密**:相同的加密算法和密钥交换 - **UUID**:相同的 Bluetooth 服务和特征标识符 - **分片**:针对大型内容的兼容性消息分片 ## 发布到 Google Play ### 准备工作 1. **更新版本信息:** // In app/build.gradle.kts defaultConfig { versionCode = 2 // Increment for each release versionName = "1.1.0" // User-visible version } 2. **创建已签名的发布版本:** ./gradlew assembleRelease 3. **生成 App bundle(推荐用于 Play Store):** ./gradlew bundleRelease ### Play Store 要求 - **目标 API**:最新的 Android API(目前为 34) - **隐私政策**:请求敏感权限的应用必须提供 - **应用权限**:说明使用 Bluetooth 和位置的正当理由 - **内容分级**:完成问卷调查以获得适合年龄的内容分级 ### 分发 - **Google Play Store**:主要分发渠道 - **F-Droid**:用于开源分发 - **直接提供 APK**:用于测试和开发 ## 跨平台通信 这款 Android 移植版支持与原始 iOS bitchat 应用进行无缝通信: - **iPhone ↔ Android**:完整的双向消息传递 - **混合群组**:iOS 和 Android 用户可以在同一个频道中 - **功能对等**:所有命令和加密均可在不同平台上运行 - **协议同步**:相同的消息格式和路由行为 **iOS 版本**:对于 iPhone/iPad 用户,请在 [github.com/jackjackbits/bitchat](https://github.com/jackjackbits/bitchat) 获取原始的 bitchat ## 支持与问题 - **Bug 报告**:[创建一个 issue](../../issues) 并附上设备信息和日志 - **功能请求**:[发起一个讨论](https://github.com/orgs/permissionlesstech/discussions) - **安全问题**:请私下发送电子邮件报告安全疑虑 - **iOS 兼容性**:与[原始 iOS 仓库](https://github.com/jackjackbits/bitchat)进行交叉参考 对于 iOS 特定的问题,请参阅[原始 iOS bitchat 仓库](https://github.com/jackjackbits/bitchat)。
标签:Android, DSL, 即时通讯, 去中心化, 后台面板检测, 移动开发, 端到端加密, 蓝牙网格