Wear OS 6 推出全新的 Watch Face Push API,為更進階的錶面發布用途創造機會。
判斷使用 Watch Face Push 的時機
錶面推送是 Wear OS 的 API,可讓開發人員直接新增、更新或移除錶面。開發標準錶面時不需要這項功能。
透過 Watch Face Push 使用的錶面必須以錶面格式編寫。這包括使用 Watch Face Studio 設計的錶面,或是使用任何其他工具製作的錶面,只要這些錶面採用錶面格式即可。
雖然 Watch Face Push API 可能有多種用途,但下表應做為主要用途的指南:
用途 | 建議解決方法 | 複雜度 |
---|---|---|
我想建立並發布個別錶面。 | 直接使用錶面格式,或透過 Watch Face Studio 等工具,在 Google Play 發布錶面。 | 低 |
我想建立手機應用程式,讓使用者從精選系列中選取錶面,或設計及自訂錶面,然後直接安裝到 Wear OS 手錶。 | 使用手錶上的 Watch Face Push API,為手錶和手機建立應用程式。 | 高 |
目的
Watch Face Push API 的標準用途是建立市集應用程式。使用者可以在手機上透過這類應用程式,從精選系列中選取錶面,並直接控制這些錶面在連線手錶上的安裝作業。
注意事項
如要瞭解如何建構錶面,請參閱錶面格式指南:使用錶面推送功能部署的錶面是標準的錶面格式錶面。
製作錶面時,請注意下列事項。
套件名稱
使用 Watch Face Push 安裝的錶面必須符合下列慣例:
<app name>.watchfacepush.<watchface name>
... 其中 <app name>
是呼叫 Watch Face Push API 的應用程式套件名稱。
舉例來說,如果應用程式的套件名稱為 com.example.mymarketplace
,則下列都是有效的錶面套件名稱:
com.example.mymarketplace.watchfacepush.watchface1
com.example.mymarketplace.watchfacepush.watchface2
com.example.mymarketplace.watchfacepush.another_watchface
如果錶面不符合這項慣例,API 會拒絕。
套件內容
系統會嚴格執行 APK 內容規定。請務必注意,錶面格式必須符合下列限制:從技術上來說,錶面格式 APK 可能包含無害的中繼資料檔案和其他構件,這些檔案和構件或許能通過 Google Play 審查,但無法通過錶面推送驗證 (請參閱下文)。
每個錶面 APK 僅接受下列檔案/路徑:
/AndroidManifest.xml
/resources.arsc
/res/**
/META-INF/**
此外,AndroidManifest.xml
檔案中只能使用下列標記:
<manifest>
<uses-feature>
<uses-sdk>
<application>
<property>
<meta-data>
最後,套件應指定至少 33
的 minSdk
,且 <application>
標記應指定 android:hasCode="false"
屬性。
驗證
與透過 Google Play 發布的一般錶面不同,錶面推送功能會檢查每個錶面是否格式正確且效能良好,這項責任由 Marketplace 應用程式承擔。
Google Play 會使用下列驗證檢查,確認每個使用錶面推送功能的錶面品質:
- 透過 Watch Face Push API 安裝或更新的所有錶面,都必須通過 Watch Face Push 驗證工具。
- 只有官方驗證工具可產生用於 API 的驗證權杖。
- 執行驗證時,使用的驗證工具必須是最新版本。
如果 APK 沒有變更,則不一定要重新驗證。即使使用的驗證工具版本已過時,權杖也不會過期。
同時,我們建議您不時重新執行驗證,因為驗證器會定期更新。
執行驗證工具
驗證工具提供三種形式:
- CLI 工具
- 適用於 JVM 的程式庫
- 適用於 Android 的程式庫
指令列驗證工具用法
- 從 Google 的 Maven 存放區取得驗證器。
請按照下列步驟執行工具:
java -jar validator-push-cli-1.0.0-alpha06.jar \ --apk_path=<your watch face>.apk \ --package_name=<your marketplace package name>
如果成功,輸出內容會包含驗證權杖,新增或更新錶面時,您必須將這個權杖提供給 Watch Face Push API。
如果發生錯誤,輸出內容會詳細說明哪個特定檢查失敗。
使用程式庫驗證工具
加入驗證器依附元件所需的 Jitpack 存放區:
repositories { ... google() maven { url = uri("https://jitpack.io") content { includeGroup("com.github.xgouchet") } } }
在專案中加入驗證器依附元件:
// For use on JVM implementation("com.google.android.wearable.watchface.validator:1.0.0-alpha06") // For use on Android implementation("com.google.android.wearable.watchface.validator-android:1.0.0-alpha06")
執行驗證工具:
val validator = DwfValidatorFactory.create() val result = validator.validate(watchFaceFile, appPackageName) if (result.failures().isEmpty()) { val token = result.validationToken() println("Validation token: $token") // Validation success - continue with the token // ... } else { // There were failures, handle them accordingly - validation has failed. result.failures().forEach { failure -> println("FAILURE: ${failure.name()}: ${failure.failureMessage()}") // ... } }
如需使用這個程式庫的範例,請參閱 GitHub 範例。另請參閱可攜式資產編譯器套件 (Pack) 程式庫,這有助於在裝置上建構 APK,以搭配 Android 型驗證器使用。
APK 尺寸
使用 Watch Face Push 錶面時,請特別注意 APK 大小,盡量縮小 APK。手錶錶面 APK 可能會透過藍牙從手機應用程式傳輸到手錶應用程式,這可能需要較長時間。
如果 APK 過大,傳輸時間可能會相當長,這不僅會導致使用者體驗不佳,也會耗用大量電量。
- 使用適當的程式庫 (例如
pngquant
),盡可能縮減圖片檔案大小- 在錶面集合建構程序中加入這項設定
- 檢查圖片尺寸是否適合使用比例。
- 請務必適當裁剪圖片,移除周圍的背景。
- 縮減字型檔案大小
- 舉例來說,如果只使用特定字型顯示時間 (格式為
HH:MM
),可以使用pyftsubset
等工具,將字型檔案限制為只包含必要的字元。這可以大幅縮減產生的字型檔案和 APK 大小。如要瞭解如何盡量縮減字型檔案大小,請參閱這篇網誌文章。
- 舉例來說,如果只使用特定字型顯示時間 (格式為
如需進一步瞭解如何盡量縮小 APK 大小,請參閱記憶體用量最佳化指南。
APK 簽署
與一般 APK 相同,所有錶面都需要簽署。請建立與主要應用程式所用金鑰不同的金鑰,並將該金鑰用於所有錶面。
建築
請考量系統的三個主要元件:
- 雲端儲存空間:在標準的 Marketplace 應用程式中,錶面會在雲端建構及儲存,供使用者使用。錶面包括:
- 預先建構為一般錶面格式 APK
- 每個檔案都只包含一個以錶面格式為基礎的錶面
- 已透過錶面推送驗證程序驗證,並與相關聯的驗證權杖一併儲存。
- 手機應用程式可隨時擷取這些資訊。
- 電話應用程式:使用者與系統互動的主要方式是透過電話應用程式。這樣他們就可以:
- 瀏覽及搜尋錶面目錄
- 在手錶上安裝或更換錶面
- 手錶應用程式:手錶應用程式通常不會有重要的使用者介面。這項服務主要是在手機應用程式和 Watch Face Push API 之間建立橋樑,並提供下列功能:
- 使用 Watch Face Push API 安裝/更新或更換錶面
- 要求必要權限並提示使用者
- 提供預設錶面
- 提供最少的錶面快取
- 手機與手錶之間的通訊:手機和手錶應用程式之間的通訊是整體體驗能否成功的關鍵。使用 Wear OS Data Layer API,可執行下列操作:
- 偵測安裝狀態:手機應用程式可以使用 Capabilities 和
CapabilityClient
偵測手錶應用程式是否不存在,反之亦然。接著,您可以啟動前往 Play 商店的意圖,安裝缺少的窗體。 - 狀態管理:使用
DataClient
或MessageClient
,手機就能與手錶的狀態保持同步,例如確保手機知道目前設定的錶面。 - APK 傳輸:使用
ChannelClient
或MessageClient
,即可將 APK 從手機傳送至手錶 - 遠端呼叫:使用
Messageclient
,手機可以指示手錶呼叫 Watch Face Push API,例如安裝錶面。
- 偵測安裝狀態:手機應用程式可以使用 Capabilities 和
詳情請參閱資料層 API 指南。