如何基于 ots15-companion 二次开发属于自己的会议伴侣 App:开发者指南

原创2026-10-18 18:13:31569 阅读

如何基于 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 即可查看对应房间布局,这是会议伴侣类应用很实用的一个设计:

K.1.105 主会场平面图:ots15-companion 会议伴侣 App 的场馆地图功能展示

🛠️ 环境准备与一键构建步骤

依赖条件(见 app/build.gradle):

  • compileSdkVersion 21、minSdkVersion 9、targetSdkVersion 21
  • Gradle 2.2.1(由 gradle-wrapper.properties 锁定)
  • 依赖 AppCompat、CardView、Play Services、Snackbar 等库

导入与构建:

  1. 克隆仓库到本地:
git clone https://gitcode.com/gh_mirrors/ot/ots15-companion
  1. 用 Android Studio 打开项目根目录(settings.gradle 中只有一个 :app 模块),或直接用命令行构建:
./gradlew assembleRelease
  1. 构建完成后,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 楼层图:

Floor 2 楼层平面图:二次开发会议伴侣 App 时可替换为自己的场地示意图

第 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 就能在几天内上线。

登录后查看全文
ots15-companion