XuqmGroup-AndroidSDK/docs/IMPLEMENTATION_HANDOFF.md

3.3 KiB

Android SDK 重构实施接管文档

更新时间2026-07-18 分支:main
发布约束Maven 制品只允许通过 https://jenkins.xuqinmin.com/ 发布。

当前目标

  • sdk-core 是配置、会话、网络、文件、时间等公共能力的唯一实现。
  • sdk-update 只提供更新领域 API;宿主与 RN 桥接不复制下载、校验和安装代码。
  • APK 更新必须支持 SHA-256、原子临时文件、进度、取消、有限重试、FileProvider、未知来源安装权限及确定错误码。
  • 废弃的离线激活 sdk-license 已彻底删除,不得恢复反射初始化或兼容入口。

2026-07-17 已完成

  • FileSDK 新增详细下载进度、SHA-256 与哈希匹配公共 API。
  • 下载改为 .part 临时文件完成后替换目标文件;HTTP 非 2xx 失败,协程取消会中断连接并清理临时文件。
  • sdk-core 自动合并 FileProvider,扩展 SDK 不再要求宿主重复声明 provider。
  • sdk-update 删除无版本 APK 兼容路径和弃用下载入口。
  • sdk-update 2.0.0-SNAPSHOT 强制要求合法 SHA-256,并提供下载重试、取消、缓存文件复验和确定错误码。
  • 增加 Java/RN 可直接使用的 startDownloadAndInstallUpdateInstallTask、进度/结果回调和安装权限设置 Intent。
  • sdk-coresdk-updatesample-app 编译通过。
  • sdk-license 模块、源码、初始化反射、Gradle/Jenkins 参数和架构文档引用已全部删除。
  • 本轮同时删除本地遗留的 sdk-license 构建目录及其空源码包,并收敛 update/push/im/sample 的空 package/resource 目录;源码树禁止保留空目录或 .gitkeep 占位。
  • 清理后 :sdk-core:testDebugUnitTest :sdk-update:testDebugUnitTest 重新执行并通过。
  • sdk-core 1 个单元测试、sdk-update 2 个单元测试通过。
  • 修复通知权限检查、MediaStore API 等级和 java.time minSdk 24 反向移植,core/update Release Lint 均通过。

2026-07-18 RN 宿主网络兼容修复

  • App4 真机链路发现 sdk-core:1.1.6-SNAPSHOT 将 OkHttp 提升到 5.3.2, 与 React Native 0.86 的 okhttp-urlconnection:4.9.2 混装后会在首次请求时 因 okhttp3.internal.Util 缺失导致原生进程崩溃。
  • sdk-core 统一使用 OkHttp BOM 4.12.0;这是 RN 0.86 当前可用的最新 4.x 稳定兼容线,不允许下游单独提升某个 OkHttp 组件到 5.x。
  • check 增加 verifyNetworkDependencyAlignment,发布前强制确认所有 com.squareup.okhttp3 组件版本一致。
  • sdk-update 的 Gson 改为复用版本目录定义,删除模块内的重复版本事实来源。

下一步

  1. 补充 Android 仪器测试。
  2. 审计 Java 8 对外制品与内部 Java 21 集成边界,完成对应构建门禁。
  3. 通过 Jenkins 先发布 sdk-core Snapshot,再发布 sdk-update:2.0.0-SNAPSHOT
  4. 在 RN SDK Android 宿主中编译并验证下载取消、错误码、权限跳转和安装器唤起。

已验证命令

./gradlew :sdk-core:compileReleaseKotlin :sdk-update:compileReleaseKotlin :sample-app:compileDebugKotlin
./gradlew :sdk-core:testDebugUnitTest :sdk-update:testDebugUnitTest :sample-app:compileDebugKotlin
./gradlew :sdk-core:lintRelease :sdk-update:lintRelease :sdk-update:assembleRelease

不得在开发机执行 Maven 发布。