permissionlesstech/bitchat-android
GitHub: permissionlesstech/bitchat-android
基于蓝牙 mesh 的去中心化加密通讯应用,无需互联网即可在 Android 设备间进行端到端加密的多跳消息中继。
Stars: 6284 | Forks: 1512
](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, 即时通讯, 去中心化, 后台面板检测, 移动开发, 端到端加密, 蓝牙网格