如何基于 ots15-companion 二次开发属于自己的会议伴侣 App:开发者指南
如何基于 ots15-companion 二次开发属于自己的会议伴侣 App:开发者指南
ots15-companion 是一款为 OpenTech Summit / FOSSASIA 大会打造的开源 Android 会议伴侣 App,集日程浏览、Track 筛选、演讲者信息、场馆地图、书签提醒于一体。它基于 FOSSASIA companion-android 体系构建,大量使用 Loader 与 Fragment,代码结构清晰、注释直白,非常适合作为模板二次开发,快速打造属于你自己的会议日程 App 或活动伴侣应用。
📖 项目速览:这套会议伴侣 App 能做什么
打开这个仓库,你得到的不是一个空壳,而是一台"装好轮子"的完整应用。核心功能模块如下:
| 功能 | 说明 | 入口 |
|---|---|---|
| 日程 Schedule | 按天浏览全部 Talk | ScheduleFragment.java |
| Track 专题 | 按技术方向筛选场次 | TrackActivity.java |
| 演讲者 Speakers | 嘉宾列表与详情 | SpeakerFragment.java |
| 场馆地图 Map | Google Maps + 本地图层 | MapFragment.java |
| 书签与提醒 | 收藏 Talk 并设置闹钟 | FosdemAlarmManager.java |
| 赞助商标牌 | Sponsor 展示墙 | SponsorFragment.java |
| NFC 分享 | 触碰传递 Talk 名片 | NfcReceiverUtils.java |
App 内置了会场平面图资源,点击某场 Talk 即可查看对应房间布局,这是会议伴侣类应用很实用的一个设计:
🛠️ 环境准备与一键构建步骤
依赖条件(见 app/build.gradle):
compileSdkVersion 21、minSdkVersion 9、targetSdkVersion 21- Gradle 2.2.1(由 gradle-wrapper.properties 锁定)
- 依赖 AppCompat、CardView、Play Services、Snackbar 等库
导入与构建:
- 克隆仓库到本地:
git clone https://gitcode.com/gh_mirrors/ot/ots15-companion
- 用 Android Studio 打开项目根目录(
settings.gradle中只有一个:app模块),或直接用命令行构建:
./gradlew assembleRelease
- 构建完成后,APK 输出在
app/build/outputs/apk/目录(构建方式详见 README.md)。
💡 注意:该项目年代较久,Gradle 2.2.1 + AGP 1.1.0 无法被新版 Android Studio 直接解析。建议安装旧版 Android Studio(如 Koala 前后)并配置 Android SDK 21 工具链,或用兼容的命令行 JDK 1.7 环境执行
gradlew。
🗺️ 代码地图:二次开发必看的五大模块
整个 App 的源码位于 app/src/main/java/org/opentech/,按职责分层,找代码非常直观:
| 目录 | 职责 | 二次开发关注点 |
|---|---|---|
activities/ |
页面入口(主界面、详情、搜索、设置) | 改页面结构 |
fragments/ |
功能区块(日程、Track、地图、Live) | 改 UI 与交互 |
db/ |
SQLite 建表、数据拉取、增删改查 | ⭐ 数据模型核心 |
adapters/ |
列表适配器 | 改列表样式 |
api/ |
远端数据源地址 | ⭐ 换数据源第一步 |
页面骨架定义在 AndroidManifest.xml:入口是 SplashActivity,主界面是 MainActivity(带抽屉导航),搜索走 SearchResultActivity,提醒依赖 AlarmReceiver + AlarmIntentService。
🔄 数据流解析:从远端表格到本地数据库
理解数据流,是二次开发成败的关键。整条链路只有 3 步:
① 定义数据源 —— FossasiaUrls.java 中集中了所有 URL,数据以 Google 表格的 gviz 接口形式提供,按 gid 区分 tracks、版本、赞助商等不同数据表。
② 拉取并入库 —— JsonToDatabase.java 用 Volley 异步下载 JSON,比对本地版本号后,把数据批量写入 SQLite;字段映射规则在 Constants.java。
③ 本地查询 —— DatabaseHelper.java 建了 events、tracks_new、persons(FTS3 全文索引)、bookmarks、venue 等十余张表;DatabaseManager.java 封装了查询逻辑,界面层通过 Loader 读取,天然支持数据刷新。
也就是说:只要把第 ① 步换成你自己会议的数据接口(或沿用同样的表格方案),再按第 ② 步调整字段映射,整套 App 就能为你的会议服务,无需碰 UI 层。
🚀 二次开发实战:换成你自己会议的 4 步
第 1 步:换数据源 修改 FossasiaUrls.java 中的 URL 常量;若字段顺序变化,同步更新 Constants.java 的列索引。
第 2 步:换应用身份
- 包名
org.opentech与applicationId在 app/build.gradle 和 AndroidManifest.xml 中定义,建议改为你的命名空间; - 应用名在 strings.xml 的
app_name;图标@drawable/opentech_app_logo替换为你的素材; - 地图 Key 在
app/src/debug/res/values/google_maps_api.xml与app/src/release/res/values/google_maps_api.xml中配置。
第 3 步:换场馆资源
房间平面图按 room_ + 房间号的命名规则存放(加载逻辑见 StringUtils.java 中的 ROOM_DRAWABLE_PREFIX)。把你的会场图按同样规则放进 res/drawable-hdpi/ 等目录即可生效,例如 Floor 2 楼层图:
第 4 步:调整签名发布
调试签名(密码均为 open-event)已内置在 app/build.gradle;release 构建开启了混淆,规则在 proguard-rules.pro。发布前替换为你自己的 keystore。
🎁 附赠工具:Event to iCalendar 转换器
仓库根目录还藏着一个独立 Java 工具 Event to iCalendar convertor:Main.java 借助 ical4j 把活动 JSON 转换成标准 .ics 文件(示例输出 mycalendar.ics),可直接导入手机日历。做会议伴侣 App 时,"一键导入日程"是高频需求,这段代码拿来就能改。
✅ 快速上手清单与常见坑
- 构建失败:几乎都是 Gradle/AGP 版本与新版 IDE 不匹配,按上文降级工具链即可;
- 数据不刷新:版本比对逻辑在
JsonToDatabase,本地SharedPreferences里的版本号没变就会跳过下载,调试时先清数据; - 搜索无结果:
events_titles与persons是 FTS3 虚拟表,写入时必须走对应的 INSERT 流程(见 DatabaseManager.java); - 混淆误伤:JSON 模型类若被混淆会导致解析静默失败,记得在 proguard-rules.pro 中 keep
model包。
照着这条路径走——读懂数据流 → 换数据源 → 换品牌资源 → 换签名打包,一个属于你大会的会议伴侣 App 就能在几天内上线。

