Android Demo 运行指南与下载
下载 Android SDK + Demo(2.0.0) · SHA256 校验文件
解压进入 deeprespond-im-android-sdk-demo-2.0.0 后先运行 sha256sum -c SHA256SUMS;再按下文进入 sdk/android。Windows 用 Get-FileHash 核对 ZIP 的外部 SHA256。
Kotlin / Java 原生示例,使用本工程的 SDK 模块,提供登录注册、会话、全类型消息、好友、群聊、资料及音视频入口。 源码已有这些功能,但现有双模拟器 E2E 最后一轮为 42/51 步通过;不能作为全部能力已验收的证明。
获取与环境
- 源码包包含 SDK、Demo、Gradle Wrapper、设计文档和共用 JSON 测试数据,不包含 APK、预编译 Maven 制品、IM 服务端及本机配置。
- 完整仓库和源码 ZIP 均保留
sdk/android工程目录,下文先在此目录操作。 - JDK 17、Android SDK Platform 36 和对应构建工具;运行设备 Android 7.0 / API 24 以上。
- 工程使用 Kotlin 2.4 / AGP 9.1,Java 和 Kotlin 编译目标为 11。消费端最低 compileSdk 35 不等于本工程的编译要求。
- 一个可访问的 IM 服务、AppKey 和同一应用下的两个用户;密码登录和注册须符合应用策略。
Android Studio 打开 sdk/android,设置 Gradle JDK 17 和本机 SDK 路径。命令行设置 JAVA_HOME、ANDROID_HOME;需要时创建自己的 local.properties(sdk.dir=本机SDK绝对路径)。Windows 使用 gradlew.bat,PowerShell 将多行命令合并成一行。
构建与安装
cd sdk/android
./gradlew --console=plain :example:assembleDebug
adb devices -l
adb -s <设备序列号> install -r example/build/outputs/apk/debug/example-debug.apk
adb -s <设备序列号> shell am start -n com.deeprespond.im.example/.MainActivity也可在 Android Studio 选择 example 模块和设备运行;只有一台设备时可用 ./gradlew :example:installDebug。 应用 ID 为 com.deeprespond.im.example。Release 开启 R8,但示例仍用调试签名,只供本地验证;正式 App 需配置自己的签名。
服务连接与双账号
- 首页填写服务地址、AppKey、用户名和密码,同意后登录或注册,不填写 Client Secret。
- 另一台设备登录同应用的另一用户,互加好友后验证消息、已读和群聊。
- 地址、AppKey 和会话在重启时恢复;换账号先退出,换应用应先清理示例数据。
默认 http://127.0.0.1:18480 指设备自身。连接开发机 harness 时,对每台 USB/adb 设备分别转发:
adb -s <设备序列号> reverse tcp:18480 tcp:18480
adb -s <设备序列号> reverse tcp:7885 tcp:7885
adb -s <设备序列号> reverse tcp:7886 tcp:7886
adb -s <设备序列号> reverse tcp:9010 tcp:901018480 是 API,7885 / 7886 是本机 LiveKit,9010 是附件对象存储;按实际部署调整。18490 仅在设备测试需访问控制接口时转发。 多设备必须显式指定 -s。真机也可用可访问的 HTTPS;API 可达不代表附件和 RTC 地址可达。示例允许本机调试 HTTP,生产应用使用自己的 TLS 和网络策略。
本机 IM 服务
以下需要完整 IM 仓库;下载包不包含 harness 后端或基础设施。在仓库根目录执行:
make infra-up
go build -o /tmp/android-demo-harness ./sdk/conformance/harness
/tmp/android-demo-harness -env .env -addr 127.0.0.1:18480 -control 127.0.0.1:18490 \
-db im_android_demo -redis-prefix android-demo:先确认端口空闲;改用其他端口时同步修改首页和转发规则。控制接口 GET /env 提供 AppKey;GET /credentials 的服务端凭据保留在后端。 多个 SDK 不要并行修改同一测试应用的注册、好友或 RTC 策略。
功能与结构
文件位于 example/src/main/java/com/deeprespond/im/example/:
| 文件 | 职责 |
|---|---|
MainActivity.kt | 登录、三页签、会话、联系人、资料和状态订阅 |
ChatActivity.kt | 消息、录音、回复、回应、转发、撤回、已读和草稿 |
RequestsActivity.kt、FriendProfileActivity.kt | 好友申请和资料 |
GroupSettingsActivity.kt、ChatSettingsActivity.kt | 群和会话设置 |
CallActivity.kt、IncomingCallActivity.kt | 通话和来电入口 |
JavaFacadeActivity.java | Java 门面接入 |
Demo.kt、Ui.kt 等 | 共享状态与 UI 辅助 |
这是示例应用,不是聊天 UIKit。App 负责隐私同意、媒体运行权限、Firebase/厂商账号、通知和来电配置。 vendor-stubs 仅供编译,不能作为生产推送 SDK。应用需开启 RTC 策略,两端均可访问 LiveKit;headless 模拟器不能验证真实音频质量。 通话与独立 RTC 频道分别验收,本示例不代表所有频道场景已通过真机测试。
验证边界
| 现有记录 | 结论 |
|---|---|
| SDK 2026-10-08 | 273 项单元、66 项真实接口、26 项设备测试通过;Lint、ABI、R8、本地 Maven 和消费工程通过 |
| Demo 2026-10-19~20 | 双模拟器最后一轮 42/51,9 步未通过,保留逐步断言和截图 |
| 待复验步骤 | 回应同步、语音及其依赖步骤、通话入口/来电、清空断言、Java 门面页面;部分涉及模拟器 UI 时序,须重跑确认 |
| 待平台验收 | 真实厂商推送、各品牌真机、省电策略、通话质量与正式分发 |
完整仓库报告:Agent测试/AndroidSDK与Demo完善/测试报告.md。不能把早期 SDK 测试通过当成新版 Demo 全部 E2E 通过。 仓库根目录可执行 make sdk-android-test、make sdk-android-integration、make sdk-android-device-test;后两项需真实服务/设备,互不替代。 下载包可在 sdk/android 运行 Gradle 构建,依赖服务端的测试仍需另备完整仓库的 harness。
排查
| 现象 | 检查 |
|---|---|
| 找不到 SDK / JDK | Gradle JDK 17、Platform 36、JAVA_HOME / ANDROID_HOME 或本机 local.properties |
| 依赖解析失败 | Google、Maven Central、JitPack 可达及 settings.gradle.kts 仓库配置 |
| 多设备安装失败 | adb devices -l 后显式指定序列号 |
| API 正常但图片/通话失败 | 附件域名、对象存储/LiveKit 端口、策略及权限 |
| 登录/注册被拒绝 | AppKey、账号密码、应用策略及账号归属 |
| 没有真实推送 | Firebase/厂商通道、控制台凭据编号、通知权限和系统限制 |
| 测试读到旧数据 | 先退出;仅对测试 Demo 执行 adb -s <设备序列号> shell pm clear com.deeprespond.im.example,会清除示例全部本地数据 |
SDK、Java、推送、通话和频道见Android SDK 文档。
