{"id":19119282,"url":"https://github.com/netless-io/flat-android","last_synced_at":"2026-03-03T17:02:03.949Z","repository":{"id":48327255,"uuid":"358147122","full_name":"netless-io/flat-android","owner":"netless-io","description":"Project Flat Android is the Android client of Agora Flat open source classroom.","archived":false,"fork":false,"pushed_at":"2025-12-18T07:08:09.000Z","size":19891,"stargazers_count":118,"open_issues_count":1,"forks_count":71,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-12-21T15:24:48.773Z","etag":null,"topics":["agora-flat","android","e-class","kotlin","online-classroom","virtual-classroom","whiteboard"],"latest_commit_sha":null,"homepage":"https://flat.whiteboard.agora.io/","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/netless-io.png","metadata":{"files":{"readme":"README-zh.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-04-15T06:10:55.000Z","updated_at":"2025-12-18T07:08:12.000Z","dependencies_parsed_at":"2025-12-18T15:05:00.917Z","dependency_job_id":null,"html_url":"https://github.com/netless-io/flat-android","commit_stats":null,"previous_names":[],"tags_count":37,"template":false,"template_full_name":null,"purl":"pkg:github/netless-io/flat-android","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netless-io%2Fflat-android","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netless-io%2Fflat-android/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netless-io%2Fflat-android/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netless-io%2Fflat-android/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/netless-io","download_url":"https://codeload.github.com/netless-io/flat-android/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/netless-io%2Fflat-android/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30052269,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-03T15:26:47.567Z","status":"ssl_error","status_checked_at":"2026-03-03T15:26:17.132Z","response_time":61,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agora-flat","android","e-class","kotlin","online-classroom","virtual-classroom","whiteboard"],"created_at":"2024-11-09T05:09:05.834Z","updated_at":"2026-03-03T17:02:03.931Z","avatar_url":"https://github.com/netless-io.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n    \u003cimg width=\"200\" height=\"200\" style=\"display: block;\" src=\"art/flat-logo.png\"\u003e\n\u003c/div\u003e\n\n\u003c!-- \n\u003cdiv align=\"center\"\u003e\n    \u003cimg alt=\"GitHub\" src=\"https://img.shields.io/github/license/netless-io/flat-android?color=9cf\u0026style=flat-square\"\u003e\n\u003c/div\u003e \n--\u003e\n\n\u003cdiv align=\"center\"\u003e\n    \u003ch1\u003eAgora Flat Android\u003c/h1\u003e\n    \u003cp\u003eFlat Android 是 \u003ca href=\"https://www.flat.apprtc.cn/\"\u003eAgora Flat\u003c/a\u003e 开源教室的 Android 客户端\u003c/p\u003e\n    \u003cimg src=\"art/flat-showcase-zh.jpg\"\u003e\n\u003c/div\u003e\n\n# 产品体验\n\n- [APP 下载地址][flat-homepage]\n- [快速体验 Flat Web][flat-web]\n\n# 特性\n\n- 前后端完全开源\n    -   [x] [Flat Web][flat-web]\n    -   [x] Flat 桌面端 ([Windows][flat-homepage] and [macOS][flat-homepage])\n    -   [x] [Flat Android][flat-android]\n    -   [x] [Flat Server 服务器][flat-server]\n- 多场景课堂\n    -   [x] 大班课\n    -   [x] 小班课\n    -   [x] 一对一\n- 实时交互\n    -   [x] 多功能互动白板\n    -   [x] 实时音视频（RTC）通讯\n    -   [x] 即时消息（RTM）聊天\n    -   [x] 举手上麦发言\n- 帐户系统\n    -   [x] 微信登陆\n    -   [x] GitHub 登陆\n    -   [ ] 谷歌登陆\n- 房间管理\n    -   [x] 加入、创建\n    -   [ ] 预定房间\n    -   [x] 支持周期性房间\n    -   [x] 查看历史房间\n- 课堂录制回放\n    -   [x] 白板信令回放\n    -   [x] 音视频云录制回放\n    -   [x] 群聊信令回放\n-   [x] 多媒体课件云盘\n-   [ ] 设备检测\n-   [ ] 自动检查更新\n\n# 开发环境\n\n## 开发结构\n\nFlat 试图使用最新 Android 开发库和工具开发应用程序。主要使用一下技术项\n\n* 完全用 Kotlin 编写。\n* UI 大部分是用 Jetpack Compose 编写的。\n* 始终使用 Kotlin Coroutines 及 Kotlin Flow。\n* 使用了许多 Jetpack 架构组件。包括：Room, Lifecycle, ViewModel\n* 使用Hilt进行依赖性注入\n\n## 开发工具\n\n本项目使用 Jetpack Compose，你需要最新的 Android Studio Arctic Fox 版本，以便能够构建该应用程序。\n\n## 环境配置\n\n| 变量名                               | 描述                                               | 备注                                                             |\n| ------------------------------------ | -------------------------------------------------- | ---------------------------------------------------------------- |\n| NETLESS_APP_IDENTIFIER               | 互动白板 Access Key                                | 见: [在 app 服务端生成 Token][netless-auth]                      |\n| AGORA_APP_ID                         | Agora 声网 App ID                                  | 用于 RTC 与 RTM。见: [校验用户权限][agora-app-id-auth]           |\n| WECHAT_APP_ID                        | [微信开放平台][open-wechat] App ID                 | 见 `网站应用` 里 `AppID`                                         |\n| FLAT_SERVER_DOMAIN                   | Flat Server 部署的域名地址                         | 如: `flat-api.whiteboard.agora.io`                               |\n|                                                                  |\n\n## 免责声明\n\n你可以将 Flat\n用于商业用途但请注意我们不接受商业化需求定制与部署支持以及其它客户服务。如有相关需求请前往[灵动课堂](https://www.agora.io/cn/agora-flexible-classroom)。\n\n[flat-homepage]: https://www.flat.apprtc.cn/\n\n[flat-web]: https://web.flat.apprtc.cn/\n\n[flat-server]: https://github.com/netless-io/flat-server\n\n[flat-android]: https://github.com/netless-io/flat-android\n\n[open-wechat]: https://open.weixin.qq.com/\n\n[netless-auth]: https://docs.agora.io/cn/whiteboard/generate_whiteboard_token_at_app_server?platform=RESTful\n\n[agora-app-id-auth]: https://docs.agora.io/cn/Agora%20Platform/token#a-name--appidause-an-app-id-for-authentication\n\n[cloud-recording]: https://docs.agora.io/cn/cloud-recording/cloud_recording_api_rest?platform=RESTful#storageConfig\n\n[cloud-recording-background]: https://docs.agora.io/cn/cloud-recording/cloud_recording_layout?platform=RESTful#background","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetless-io%2Fflat-android","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnetless-io%2Fflat-android","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnetless-io%2Fflat-android/lists"}