Releases: zero2005x/M365-Rokid-HUD
Release list
v1.5.2
v1.5.2 — Per-model scooter detection, Play Console fixes, full translations | 依型號辨識滑板車、Play Console 修正、翻譯補齊
Phone app com.m365bleapp versionCode 11, glasses app com.m365hud.glass
versionCode 8. Both report versionName 1.5.2.
手機端 com.m365bleapp versionCode 11,眼鏡端 com.m365hud.glass versionCode 8,
versionName 皆為 1.5.2。
This is the first GitHub Release since v1.4.0 and it includes everything from
1.5.0 and 1.5.1:
- 1.5.0 has no GitHub Release. Its notes are in
doc/RELEASE_NOTES_v1.5.0.md. - 1.5.1 (versionCode 10) went to Google Play only. The
v1.5.1tag exists,
but its release workflow failed before publishing, so there is no GitHub
Release for it. Its notes are indoc/RELEASE_NOTES_v1.5.1.md. - 1.5.2 adds per-model scooter detection on top of 1.5.1.
這是 v1.4.0 之後的第一個 GitHub Release,內容包含 1.5.0 與 1.5.1 的全部變更:
- 1.5.0 沒有 GitHub Release,說明見
doc/RELEASE_NOTES_v1.5.0.md。 - 1.5.1(versionCode 10)僅發佈於 Google Play。
v1.5.1tag 雖然存在,但其發布
流程在發布前失敗,所以沒有對應的 GitHub Release,說明見doc/RELEASE_NOTES_v1.5.1.md。 - 1.5.2 在 1.5.1 之上新增依型號辨識滑板車。
⚠️ Experimental — not verified on a scooter | 實驗性 — 未經實車驗證
The model detection added in this release is covered by unit tests only and has
not been verified on a scooter. Support for Ninebot-family scooters rests on
static reverse engineering, and the register layouts for those families are not
established (see doc/MODEL_SUPPORT.md). Controls are capability-gated per
model and demo data is marked DEMO. Do not rely on any reading or command as
correct until it is verified on your scooter.
本版新增的型號辨識僅有單元測試涵蓋,尚未在實車上驗證。對 Ninebot 系列滑板車的支援
建立在靜態逆向分析上,這些車系的暫存器配置尚未確立(見 doc/MODEL_SUPPORT.md)。
控制項依車型能力顯示,示範資料標記為 DEMO。在你的滑板車上驗證之前,切勿把任何讀數
或命令當成正確。
Downloads | 檔案下載
| File 檔案 | Format 格式 | Description | 說明 |
|---|---|---|---|
| M365-Rokid-HUD-phone-v1.5.2.apk | APK | Phone app — M365 BLE client + Rokid gateway (sideload) | 手機端 — M365 BLE 客戶端 + Rokid 閘道(側載安裝) |
| M365-Rokid-HUD-glasses-v1.5.2.apk | APK | Glasses app — Rokid AR HUD display (sideload) | 眼鏡端 — Rokid AR HUD 顯示(側載安裝) |
| M365-Rokid-HUD-phone-v1.5.2.aab | AAB | Phone app — Google Play publishing bundle | 手機端 — Google Play 發佈用 App Bundle |
| M365-Rokid-HUD-glasses-v1.5.2.aab | AAB | Glasses app — Google Play publishing bundle | 眼鏡端 — Google Play 發佈用 App Bundle |
| SHA256SUMS.txt | Checksums | SHA256 hashes for all release artifacts | 所有產物的 SHA256 校驗值 |
Verify downloads | 下載校驗:
sha256sum -c SHA256SUMS.txtSigned with the same release key as v1.4.0 (SHA256 7C:A3:A3:F7:…), so existing
installs update by sideload without uninstalling.
以與 v1.4.0 相同的 release key 簽章(SHA256 7C:A3:A3:F7:…),既有安裝可直接側載
升級,無需先解除安裝。
Highlights | 重點更新
1. New in 1.5.2: per-model scooter detection | 1.5.2 新增:依型號辨識滑板車
- Scooters are now recognised by the model code in their BLE advertisement
(manufacturer data, company id0x424E). The advertised name stays as a
fallback and is reported as unverified. Only codes this project can name are
mapped; an unknown code falls back instead of being forced onto the nearest
model. - The GATT characteristic lookup now scans every discovered service instead of
only the expected one, so a device that exposes the same characteristics under
a different service no longer fails silently. The expected service is tried
first, so existing devices behave as before. - Per-model board addressing in the Rust core, documented in
doc/MODEL_SUPPORT.md. The Xiaomi profiles keep the addresses the code
already used. - 現在會依 BLE 廣播中的型號代碼(廠商自訂資料,company id
0x424E)辨識滑板車;
廣播名稱僅作為備援,並標示為未驗證。只對應本專案能確認的代碼,未知代碼會走備援
流程,不會被硬套到最接近的車型。 - GATT 特徵查找現在會掃描所有已探索的服務,而非只找預期的服務,因此將相同特徵放在
其他服務下的裝置不再無聲失敗。預期的服務會優先嘗試,既有裝置行為不變。 - Rust 核心新增依車型的板子位址,記錄於
doc/MODEL_SUPPORT.md。小米車型沿用程式
原本使用的位址。
2. From 1.5.1: Play Console fixes | 來自 1.5.1:Play Console 修正
- Narrowed R8 keep rules: phone DEX 22.5 MB → 2.5 MB, with the large majority of
classes now renamed (96% phone, 99% glasses in this build). This clears the
Play "DEX optimization 13%" warning. - Edge-to-edge is set up by the app itself and no longer uses the deprecated
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES. - 收窄 R8 keep 規則:手機端 DEX 22.5 MB → 2.5 MB,絕大多數類別已混淆(本版手機端
96%、眼鏡端 99%),解決 Play「DEX 最佳化 13%」警告。 - 無邊框顯示改由 app 自行處理,不再使用已淘汰的
LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES。
3. From 1.5.1: translations and layout | 來自 1.5.1:翻譯與版面
- All 10 translations completed (58–72 missing strings each).
- Arabic now lays out right-to-left.
- Motor lock buttons no longer break in Russian / Ukrainian.
- Demo Ride switch in Settings reflects its state.
- Refreshed store screenshots for 11 languages and a promo video.
- 補齊 10 種語言翻譯(每種缺 58–72 條)。
- 阿拉伯文改為由右至左版面。
- 修正俄文/烏克蘭文的馬達鎖定按鈕版面。
- 設定中的模擬騎乘開關會正確顯示狀態。
- 更新 11 種語言商店截圖與宣傳影片。
4. Build and release pipeline | 建置與發布流程
- Release builds no longer compile Rokid CXR-M credentials into the app, and the
release workflow scans every artifact for them before publishing. - Fixed the release workflow aborting on the scan's "nothing configured" result,
which is the normal state in CI. - Both modules report versionName 1.5.2.
- 發布版不再把 Rokid CXR-M 憑證編進 app,發布流程會在上架前掃描每個產物。
- 修正發布流程在掃描回傳「未設定憑證」(CI 的正常狀態)時中止的問題。
- 兩個模組的 versionName 皆為 1.5.2。
Play "What's new" text | Play「最新異動」文字
en-US:
• Recognises scooters by their model code
• Fully translated into all 11 supported languages
• Arabic now displays right-to-left
• Smaller, faster app (optimized release build)
• Better display on Android 15 edge-to-edge screens
zh-TW:
• 依型號代碼辨識滑板車
• 11 種語言翻譯全數補齊
• 阿拉伯文改為由右至左顯示
• 安裝檔更小、執行更有效率
• 改善 Android 15 無邊框畫面的顯示
Build | 建置
Upload the matching mapping-*.txt to Play Console for readable crash reports.
libninebot_ffi.so must be present for all four ABIs with 16 KB PT_LOAD
alignment, and scripts/verify-bundle-secrets.sh should report no Rokid
credential in either bundle.
請一併上傳對應的 mapping-*.txt 至 Play Console,以取得可讀的當機報告。四種 ABI 都必須
含有 16 KB 對齊的 libninebot_ffi.so,且 scripts/verify-bundle-secrets.sh 應顯示兩個
bundle 內都沒有 Rokid 憑證。
v1.4.0
v1.4.0 — 2025/2026 Google Play Compliance, API Modernization & AAB Packaging | 應用商店合規性、API 現代化與 AAB 打包
This release updates the project to the latest Android 16 (API 36) specifications, fully satisfies Google Play Store 2025/2026 publishing policies, packages both APK and AAB (Android App Bundle) artifacts, resolves deprecated APIs, and integrates automated CI & SonarQube code quality pipelines.
本次發布全面更新至 Android 16 (API 36) 最新標準,全方位符合 Google Play Store 2025/2026 最新上架政策,同步打包 APK 與 AAB (Android App Bundle) 檔案,修復過時 API,並整合自動化 CI 測試與 SonarQube 代碼品質檢查流水線。
Downloads | 檔案下載
| File 檔案 | Format 格式 | Description | 說明 |
|---|---|---|---|
| M365-Rokid-HUD-phone-v1.4.0.apk | APK | Phone app — M365 BLE client + Rokid gateway (sideload) | 手機端 — M365 BLE 用戶端 + Rokid 閘道(直接安裝) |
| M365-Rokid-HUD-glasses-v1.4.0.apk | APK | Glasses app — Rokid AR HUD display (sideload) | 眼鏡端 — Rokid AR 抬頭顯示器(直接安裝) |
| M365-Rokid-HUD-phone-v1.4.0.aab | AAB | Phone app — Google Play publishing bundle | 手機端 — Google Play 商店上架專用 App Bundle |
| M365-Rokid-HUD-glasses-v1.4.0.aab | AAB | Glasses app — Google Play publishing bundle | 眼鏡端 — Google Play 商店上架專用 App Bundle |
| SHA256SUMS.txt | Checksums | SHA256 hashes for all release artifacts | 所有發布產物之 SHA256 雜湊驗證碼 |
Verify downloads | 下載驗證指令:
Get-FileHash .\M365-Rokid-HUD-phone-v1.4.0.apk -Algorithm SHA256sha256sum -c SHA256SUMS.txtHighlights & Changes | 重點更新與變更
1. Google Play Store 2025/2026 Policy Compliance | 符合應用商店最新政策
- 16 KB Memory Page Size Support (強制 16 KB 記憶體分頁對齊):
- Ensured all native shared libraries (
libninebot_ffi.so) across all 4 architectures (arm64-v8a,armeabi-v7a,x86,x86_64) strictly comply with 16 KB ELF segment alignment (p_align >= 0x4000), passing Google Play 2025/2026 mandatory verification. - 確保所有四種架構的 Rust 原生動態庫均符合 16 KB 分頁對齊標準,完全滿足 Google Play 強制要求。
- Ensured all native shared libraries (
- Battery Optimization Policy Compliance (移除高風險電池權限):
- Removed restricted
REQUEST_IGNORE_BATTERY_OPTIMIZATIONSpermission from manifests to eliminate Google Play companion app rejection risks. - Replaced direct exemption requests with safe system settings navigation (
Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS), allowing users to grant unrestricted battery usage voluntarily. - 徹底移除高被拒風險的受限權限,改由安全引導使用者至系統電池設定進行手動排除。
- Removed restricted
- Foreground Service & Data Safety (前台服務與資料安全):
- Both foreground services declare
connectedDevicetype andFOREGROUND_SERVICE_CONNECTED_DEVICEpermission, with runtime checks before activation. - Preserved
neverForLocationflags and capped location permissions to API 30, eliminating redundant location disclosures in modern Data Safety forms. - 確保前台服務型態與藍牙權限檢驗完全符合規範,且免除現代 Android 上的非必要位置追蹤申報。
- Both foreground services declare
2. API Modernization & Platform Features | API 現代化與系統特性
- Target SDK 36 (Android 16):
- Full compatibility with Android 15 & Android 16 runtime behaviors.
- 完全適配 Android 15 與 Android 16 平台最新行為規範。
- Edge-to-Edge Enforced Display (邊緣延伸全螢幕適配):
- Added explicit
enableEdgeToEdge()call inMainActivity, ensuring seamless full-screen layout across all Android versions. - 在
MainActivity啟用邊緣到邊緣繪製,配合Scaffold提供沉浸式版面。
- Added explicit
- Predictive Back Navigation (預測性返回支援):
- Enabled
android:enableOnBackInvokedCallback="true"in both phone and glasses manifests for modern gesture animations. - 雙模組清單皆啟用預測性返回回調,支援系統返回動畫。
- Enabled
- Deprecated API Fixes (修復過時 API):
BluetoothHelper: Replaced deprecatedSettings.Secure.LOCATION_MODEwithLocationManager.isLocationEnabledon API 28+.LocaleHelper: Replaced deprecatedLocale(String, String)constructors with modernLocale.Builder().LogViewerScreen: Upgraded deprecated Material 3TabRowtoPrimaryTabRow.WifiGatewayClient: Replaced deprecatedserviceInfo.hostwithserviceInfo.hostAddresseson API 34+.- Dependencies: Upgraded
androidx.core:core-ktxto1.17.0andandroidx.lifecycle:lifecycle-runtime-ktxto2.10.0.
3. Release & CI Automation | 發布與持續整合自動化
- AAB & APK Dual Packaging (支援 AAB 與 APK 雙發布):
- Release workflow now automatically produces, signs, and attaches both
.apkand.aabartifacts to GitHub Releases. - 自動化發布流水線全面支援同時建置、簽名並上傳 APK 與 Google Play 專用的 AAB 格式。
- Release workflow now automatically produces, signs, and attaches both
- CI Pipeline with SonarQube (CI 與程式碼品質檢查):
- Added
.github/workflows/ci.ymlrunning unit tests, debug builds, 16 KB page alignment verification, and SonarQube static code analysis on every push and pull request. - 建立正式的 CI 流水線,自動執行單元測試、16 KB 分頁對齊驗證以及 SonarQube 代碼品質掃描。
- Added
v1.3.1
v1.3.1 — Glasses APK & Release Automation | 眼鏡端 APK 與發布自動化
This is a packaging and build-correctness release. The phone app's application code is unchanged from v1.3; everything below concerns the glasses app, the native library, and how releases are produced.
這是一次打包與建置正確性的發布。手機端的應用程式碼與 v1.3 相同;以下變更集中在眼鏡端、原生函式庫,以及發布流程本身。
Downloads | 下載
| APK | Description | 說明 | Size |
|---|---|---|---|
| M365-Rokid-HUD-phone-v1.3.1.apk | Phone app — M365 BLE client + Rokid gateway | 手機端 — M365 BLE 用戶端 + Rokid 閘道 | 24.6 MB |
| M365-Rokid-HUD-glasses-v1.3.1.apk | Glasses app — Rokid AR HUD display | 眼鏡端 — Rokid AR 抬頭顯示器 | 11.4 MB |
| SHA256SUMS.txt | Checksums for both APKs | 兩顆 APK 的雜湊值 | — |
Known Limitations | 已知限制
- CXR-M channel discovery is not implemented.
UnifiedConnectionManagercannot obtain an ARTC channel id automatically, so the CXR-M path falls back to Wi-Fi or BLE unless a channel id is supplied explicitly. The R8 fix above makes the transport reachable; it does not complete the discovery mechanism. CXR-M 頻道探索尚未實作。UnifiedConnectionManager無法自動取得 ARTC channel id,因此除非明確指定,CXR-M 路徑會退回 Wi-Fi 或 BLE。上述 R8 修正讓該傳輸可被觸及, 但並未完成探索機制。 - The glasses release build now runs R8 for the first time. If you encounter behaviour that differs from a debug build, please open an issue. 眼鏡端 release 版本首次啟用 R8。若發現與 debug 版本行為不同,請回報 issue。
Upgrade Notes | 升級說明
Coming from v1.3: install both APKs. The phone app's behaviour is unchanged; the glasses app gains a working CXR-M code path and is signed and versioned alongside the phone app for the first time.
從 v1.3 升級:請安裝兩顆 APK。手機端行為不變;眼鏡端修復了 CXR-M 程式路徑, 並首次與手機端採用一致的簽章與版本編號。
Coming from v1.1 or earlier: see the v1.3 release notes for the Wi-Fi gateway and security hardening changes introduced there.
從 v1.1 或更早版本升級:Wi-Fi 閘道與安全性強化的內容請參閱 v1.3 的發布說明。
Full Changelog: https://github.com/zero2005x/M365-Rokid-HUD/compare/v1.3...v1.3.1
v1.1 - Connection Quality & Battery Optimization
New Features | 新功能
Connection Quality Indicator | 連線品質指標
- Real-time signal strength display on glasses HUD
- Stale data warning when telemetry delayed > 2 seconds
- Session statistics: packets, RSSI avg/min/max, reconnect count
Battery Optimization | 電池優化
- Phone app now prompts user to disable battery optimization
- Ensures stable BLE gateway service
- Translations in 11 languages
Bilingual Documentation | 中英並列文件
- BLE_PROTOCOL_GUIDE.md: Complete bilingual rewrite
- GLASSES_LOG_COLLECTION.md: Phone + glasses log collection guide
Bug Fixes
- Fixed native library JNI init crash
APK Downloads
| APK | Description |
|---|---|
| app-release.apk | Phone app (M365 BLE + Rokid Gateway) |
| glass-hud-release.apk | Glasses app (Rokid AR HUD) |
Full Changelog: v1.0...v1.1
v1.0.0 - Initial Release
M365 BLE App v1.0.0
🎉 Initial Release
Features
Phone App (M365-BLE-App)
- 🔍 BLE Scanner - Discover nearby M365 scooters automatically
- 🔐 Secure Registration - ECDH key exchange for first-time pairing
- 🔑 Token-based Login - Fast reconnection with saved credentials
- 📊 Real-time Telemetry - Monitor speed, battery, temperature, and more
- 🔒 Motor Lock/Unlock - Remote scooter control
- 💡 Tail Light Control - Toggle tail light on/off
- 🕶️ Rokid HUD Gateway - Broadcast telemetry to AR glasses
- 🌍 Multi-language Support - 11 languages supported
Glasses App (M365-Glass-HUD)
- 📺 AR HUD Display - Speed, scooter battery, phone battery, glasses battery, time
- 🔗 Auto-connect to phone Gateway via BLE
Downloads
| File | Description |
|---|---|
M365-BLE-App-v1.0.0.apk |
Phone app (Android 10+) |
M365-Glass-HUD-v1.0.0.apk |
Rokid glasses HUD app |
Installation
- Download the APK for your device
- Enable "Install from unknown sources" in Android settings
- Install the APK
Requirements
- Phone App: Android 10 (API 29) or higher
- Glasses App: Rokid AR glasses