Skip to content

ThingsBoard 移动应用详细讲解 ​

正文与配图整理自《ThingsBoard 移动应用详细讲解》原稿,面向官方 Flutter App(flutter_thingsboard_app)的本地编译与常见问题。

1、安装 Android Studio ​

打开 Android Studio 下载页,下载安装包后按默认配置安装即可。

2、下载 Flutter SDK ​

先看 flutter_thingsboard_app 工程里 pubspec.yaml 对 Flutter / Dart 的版本约束,再到 Flutter Archive 下载对应 SDK,并把 bin 加入 PATH。

Flutter 版本对照

3、下载 flutter_thingsboard_app ​

ThingsBoard 服务端版本与 Mobile App 分支要对齐,矩阵见官方文档:Mobile getting started。

版本对应关系

例如本机 ThingsBoard 为 3.8.1 时,可拉取 App 1.4.0:

bash
git clone -b release/1.4.0 https://github.com/thingsboard/flutter_thingsboard_app.git

克隆结果

4、用 Android Studio 打开工程 ​

在 Settings → Plugins 安装 Flutter、Dart,并把 Flutter SDK 路径指到本机目录;再配置好模拟器。

安装 Flutter / Dart 插件

配置模拟器

若 flutter pub get 报 Dart SDK 过低,例如:

text
The current Dart SDK version is 2.18.0.
Because thingsboard_app requires SDK version >=3.2.0 <4.0.0, version solving failed.

说明当前 Flutter 太旧,需要按 pubspec.yaml 升级 Flutter(从而带上匹配的 Dart)。

Dart SDK 不匹配

5、Gradle 与 JDK 版本不匹配 ​

常见失败日志:

text
Unsupported class file major version 65
Gradle version is incompatible with the Java version that Flutter is using for Gradle

本质是:工程 Gradle 版本 与 Flutter / Android Studio 实际在用的 JDK 不一致。例如 ThingsBoard 3.6.x 对应的较旧 Flutter App,往往需要固定到 JDK 11,而不能直接用 JDK 21。

对照 Flutter ↔ Dart 归档 与工程 pubspec.yaml:

Flutter / Dart 版本表

pubspec 约束

6、关键:在 gradle.properties 指定 JDK ​

在 android/gradle.properties 里显式指定本机 JDK(路径按实际修改):

properties
org.gradle.java.home=D:\\path\\to\\jdk-11.0.12

指定 org.gradle.java.home

App 里配置 ThingsBoard 地址时不要用 localhost,模拟器 / 真机访问不到宿主机环回地址,应使用局域网 IP 或可解析域名:

服务地址配置

开启代理后编译运行,进入登录页:

运行成功

7、登录后提示 version unknown ​

登录接口可以成功,但随后调用 /api/system/info 时返回:

json
{"version":"unknown","type":"CE"}

version unknown

服务端里该接口由 SystemInfoController 提供,依赖注入 BuildProperties 读取构建版本;部分打包 / Spring Boot 环境下 BuildProperties 无法注入,会落入 else 分支写成 unknown:

system/info 定位

BuildProperties 注入

临时处理:把源码中类似

java
infoObject.put("version", "unknown");

改成真实版本(例如 "3.5.1",与当前 ThingsBoard 一致),重启服务端后再用 App 登录。
(生产环境更推荐修好构建信息注入,而不是长期硬编码。)

8、Flutter 工程国际化(中文) ​

8.1 补充中文词条 ​

在 lib/l10n 下覆盖 / 补全 intl_zh.arb、intl_zh_CN.arb(原稿含完整中文词条,可按需合并到工程)。

8.2 调整 l10n.yaml ​

示例:

yaml
arb-dir: lib/l10n
template-arb-file: intl_zh.arb

(或按工程现有模板 intl_en.arb 配置,保持生成链路一致即可。)

8.3 修改 main.dart ​

启用生成的本地化委托,并引入:

dart
import 'package:flutter_gen/gen_l10n/messages.dart';

l10n 配置示意

8.4 新增键与页面使用 ​

  • 在 intl_zh.arb / intl_zh_CN.arb 增加键,例如 "device": "设备"
  • 在 intl_en.arb 同步增加英文键
  • 页面通过 S.of(context).xxx(或工程生成的同类 API)读取

然后执行 flutter clean 再运行:

中文界面效果

9、release/1.6.0 注意点 ​

9.1 版本关系 ​

1.6.0 对 Flutter / Dart / JDK 要求更高,先对照官方矩阵与 Flutter Archive:

1.6.0 版本关系

Flutter 归档

9.2 修改 pubspec 依赖 URL ​

plugin_wifi_connect 若写成 SSH 地址,本机无 GitHub SSH 密钥时会拉取失败:

yaml
plugin_wifi_connect:
  git:
    url: git@github.com:ybeshkarov/plugin_wifi_connect.git

SSH 依赖失败

改为 HTTPS:

yaml
plugin_wifi_connect:
  git:
    url: https://github.com/ybeshkarov/plugin_wifi_connect.git

改为 HTTPS

9.3 Android Studio 指向对应 Flutter ​

Flutter SDK 路径

9.4 使用 JDK 17 并同步 gradle.properties ​

1.6.0 线路通常需要 JDK 17,在 Android Studio 与 org.gradle.java.home 中保持一致:

JDK 17 配置 1

JDK 17 配置 2

gradle.properties 中的 java.home

10、小结 ​

落地官方 Mobile App 时,优先对齐这条链:

ThingsBoard 版本 ↔ App release 分支 ↔ Flutter / Dart ↔ Gradle / JDK

再处理:服务地址(禁用 localhost)、/api/system/info 的 version、l10n 国际化,以及 1.6.0 上的 git 依赖与 JDK 17。