Skip to main content

Android架构

介绍

Home Assistant的Android项目始于2019年。从那时起,Android生态系统发生了显著变化,许多贡献者塑造了这个项目。因此,您可能会遇到不符合当前最佳实践的遗留代码。本文档作为应用架构和开发实践的真实来源。

Home Assistant在PWA开发方面一直处于领先地位,这一理念在原生应用中得到了体现。应用的核心是一个WebView,它与Home Assistant的前端集成。随着时间的推移,增加了本地功能,例如后台传感器数据收集。

核心原则

Kotlin优先

整个代码库使用Kotlin编写,确保现代、简洁和类型安全的开发。

Android版本支持

  • 目标SDK:我们旨在跟上最新的Android SDK发布,并在新版本发布时进行测试。
  • 最小SDK:为了确保广泛兼容性,应用支持Android Lollipop(API 21)。

应用架构

我们遵循谷歌推荐的Android架构,并从NowInAndroid仓库中汲取灵感。

构建逻辑

该项目使用多个Gradle模块。共享逻辑集中在一个名为build-logic的单独Gradle项目中,通过includeBuild包含在主项目中。

共享Gradle模块

为了在不同应用之间共享代码,我们使用一个名为:common的共享Gradle模块。

用户界面开发

原生用户界面

所有新的UI组件都是使用Jetpack Compose构建的,确保以现代和声明性的方法进行UI开发。

遗留用户界面

应用中仍然存在一些遗留的XML布局、databindingviewbinding。这些应该在持续的现代化工作中替换为Compose。

主题

该应用使用多个主题,以支持遗留的XML和基于Compose的用户界面。所有新的组件应该使用HomeAssistantAppTheme,该主题基于Material Design

关键特性

依赖注入(DI)

我们广泛使用Hilt进行依赖注入,确保代码模块化和可测试。

并发

所有并发都使用Kotlin协程进行处理,提供了一种结构化和高效的方式来管理异步任务。

服务

我们使用前台服务来检索传感器值并异步上传到Home Assistant Core。

WebSocket

应用维持与Home Assistant Core的WebSocket的直接连接,使用OkHttp。这对于助手和实时讨论等功能至关重要。

REST API

与Home Assistant的REST API的通信使用Retrofit处理,便于与后端的无缝交互。

本地存储

  • Room:用户数据使用Room在本地存储,提供了强大的数据库解决方案。
  • SharedPreferences:对于应用特定的设置,我们使用带有抽象层的SharedPreferences,该抽象层名为LocalStorage

深度链接

该应用支持使用homeassistant:// URLs进行深度链接,以导航到应用的特定部分。有关更多详细信息,请参阅用户文档

特定平台的功能

汽车

汽车应用重用了:app模块的源代码,简化了开发。

Wear OS

Wear OS应用与移动应用通信,以获取Home Assistant服务器的凭证和其他配置,使用消息API。它仅适用于full风味,因为它需要Google Play服务。一旦初始设置完成,所有后续通信都将通过WebSocket和为应用创建的webhook直接与Home Assistant进行处理。