安卓架构
介绍
Home Assistant 的 Android 项目于 2019 年启动。从那时起,Android 生态系统发生了显着的发展,许多贡献者塑造了该项目。因此,您可能会遇到不符合当前最佳实践的传承代码。该文档是应用程序架构和开发实践的真实来源。
Home Assistant一直是PWA开发的领跑者,这个理念也体现在本机应用程序中。该应用程序的核心是WebView,它与Home Assistant的集成。随着时间的推移,添加了本机功能,例如后台传感器数据收集。
核心原则
首先是科特林
整个代码库都是用现代Kotlin编写的,确保了、简洁和类型安全的开发。
安卓版本支持
- 目标SDK:我们的目标是跟上最新的Android SDK版本并在新版本发布时进行测试。
- 最小化SDK:为了保证广泛的兼容性,该应用程序支持Android Lollipop (API 21)。
应用架构
我们遵循Google推荐的Android architecture并从NowInAndroid repository中汲取灵感。
构建逻辑
该项目使用多个 Gradle 模块。共享逻辑集中在一个名为 build-logic 的单独 Gradle 项目中,通过 includeBuild 包含在主项目中。
通用Gradle模块
为了在不同的应用程序之间共享代码,我们使用名为 :common 的通用 Gradle 模块。
用户界面开发
刚刚用户界面
所有新的 UI 组件均使用 Jetpack Compose 构建,确保采用声明现代式的 UI 开发方法。
旧版用户界面
一些旧版本的XML布局databinding和viewbinding仍然存在于应用程序中。作为推测的现代化工作的一部分,这些应该被替换。
主题化
该应用程序使用多个主题来支持旧版本的 XML 并基于 Compose 的 UI。所有新组件都应使用HomeAssistantAppTheme,它基于Material Design。
主要特点
依赖注入(DI)
我们广泛使用Hilt进行依赖注入,确保代码定制和可测试。
随机性
所有的并发均使用Kotlin Coroutines处理,提供结构化有效的方式来管理任务异步。
服务
我们使用Foreground Services传感器搜索值将其异步上传到Home Assistant Core。
WebSocket
该应用程序使用 OkHttp 保持与 Home Assistant Core 的 WebSocket 的直接连接。这对于帮助和实时讨论等功能关键。
休息API
使用 Retrofit 处理与 Home Assistant 的 REST API 的通信,从而实现与拓扑的无缝交互。
本地存储
- 房间:用户数据使用Room本地存储,这提供了强大的数据库解决方案。
- 共享首选项:对于特定于应用程序的设置,我们使用SharedPreferences和名为
LocalStorage的抽象层。
核心链接
该应用程序支持使用homeassistant:// URL进行深度链接以导航到应用程序的特定部分。有关详细信息,请参阅user documentation。
针对特定平台的功能
汽车
汽车应用重复使用:app模块的源代码,简化了开发。
合格
Wear OS 应用程序与移动应用程序通信,以使用 Messaging API 搜索 Home Assistant 服务和其他配置的凭据。它仅适用于 full 风格,因为最终的 Google Play 服务。设置完成后,所有后续的通信都将通过 WebSocket 并为应用程序创建的 webhook 直接与 Home Assistant 处理。

