把一个旧 Android 足球社区 App,重建成可验证的 64 位客户端。

这个展示站记录寻球项目的技术整理过程:从旧版多模块 App、32 位 native、Volley 网络和视频链路债务出发, 到轻量 64 位客户端、旧接口复用、短视频上传播放修复、测试矩阵和阶段包交付。

夜场足球训练场景
Legacy to Android 64-bit 旧工程不直接硬升级,先抽出核心闭环,再把风险拆成可测试的阶段。
旧版工程
多模块

主 App 加视频、IM、推送、UI 组件和工具库,业务域跨度大。

关键约束
32 位

旧工程过滤 armeabi / armeabi-v7a,是 64 位重建的核心触发点。

新版策略
轻量重建

不搬全量旧代码,先复用旧服务端接口打通核心闭环。

交付方式
矩阵验收

按已验证、需回归、兜底可用、待接入标记能力边界。

旧版 App:不是一个页面项目,而是一个多年堆叠的业务系统。

旧版 `Xun/` 覆盖登录、动态、球队、日程、赛事、球场、队费、短视频、商城、IM、推送和支付。迁移前先做技术债拆解,而不是盲目升级。

构建和 ABI 债务

旧版使用老 Android 构建栈、旧 Support 库、MultiDex 和 32 位 ABI。直接升级会同时触发构建、native、三方 SDK 和全量回归风险。

AGP 3.xtargetSdk 2732-bit ABI

网络请求分散

旧版以 Volley 请求队列为主,同时存在多套历史网络写法。迁移重点是把接口收敛到统一 API 层,减少页面直接拼 URL。

VolleyRequestQueueURL 归一化

视频链路复杂

旧版涉及 MediaRecorder、FFmpeg、IjkVideoView、短视频发布和集锦编辑。问题定位必须跨文件、上传、静态资源和播放器。

MediaRecorderFFmpegIjk

64 位重建:先打核心闭环,再逐步恢复复杂能力。

新版 `xunqiu-android64/` 是单模块轻量客户端,重点不是炫技重构,而是控制依赖面、复用旧接口、建立可验收路径。

登录和会话

复用旧服务端账号接口,拿到 userId/token,并用本地登录态承接后续接口调用。

动态和社区

接入动态列表、精选动态、详情、点赞、评论、文字和图片动态发布,形成内容闭环。

日程和球队

补齐创建活动、报名/请假、球队主页、成员、邀请码、临时队员和队费入口。

短视频和验证

完成短视频上传、播放、评论、点赞、横竖屏适配,并用测试矩阵记录阶段边界。

短视频上传成功,却播放失败。

这个问题最终不是 UI,也不是 HTTP 访问,而是服务端保存了空壳 MP4。HTTP 200 和 MIME 正常,并不代表视频文件有效。

足球短视频封面 球队训练短视频封面

链路化排查

客户端输入 检查用户选择的视频文件大小、时长、可读性和封面生成结果。
上传和服务端 确认 multipart 字段、服务端保存路径、静态访问状态码、MIME 和文件大小。
客户端兜底 选择、提交、API 层三道校验,拦截小于 32 KB 或无法读取时长的视频。
播放体验 按真实视频宽高适配竖屏和横屏,评论抽屉化,点赞局部刷新,减少整页重建。

技术文档:把迁移过程、关键设计和验证证据沉淀下来。

文档聚焦工程事实:旧版技术债、64 位重建策略、视频链路修复、测试矩阵和 Cloudflare Pages 静态部署。

可下载的 64 位阶段包

这个 APK 用于展示客户端阶段成果,不包含完整后端演示。真实服务端仍是旧 Java WAR + MySQL/Redis 架构,本展示站只托管静态材料和阶段包。

包名com.playlab.xunqiu64
构建方向Android 64 位兼容客户端
最新包xunqiu64-stage6-video-immersive
部署方式Cloudflare Pages 静态托管