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