錶面推播

Wear OS 6 推出了新的 API「錶面推送」,可用於更進階的錶面發布用途。

判斷使用 Watch Face Push 的時機

Watch Face Push 是 Wear OS 上的 API,可讓開發人員直接新增、更新或移除錶面。但標準錶面開發作業不需要這項資訊。

使用 Watch Face Push 的錶面必須使用錶面格式編寫。這可能包括使用 Watch Face Studio 設計的錶面,或是任何其他使用錶面格式產生錶面的工具。

雖然錶面推播 API 可用於多種用途,但您應參考下表,瞭解主要用途:

用途 建議解決方法 複雜度
我想建立個別錶面並發布。 直接使用錶面格式,或透過 Watch Face Studio 等工具,將錶面發布至 Google Play。
我想建立手機應用程式,讓使用者從精選集合中選取錶面,或設計及自訂錶面,直接安裝在 Wear OS 手錶上。 使用手錶上的 Watch Face Push API,為手錶和手機建立應用程式。

目的

錶面推播 API 的標準用途是建立市集應用程式。使用者可以透過這個應用程式,從手機上精選的錶面集合中選取錶面,並直接控制這些錶面在已連結手錶上的安裝作業。

注意事項

如要進一步瞭解如何建構錶面,請參閱錶面格式指南:使用 Watch Face Push 部署的錶面為一般錶面格式錶面。

製作錶面時,請考量下列事項。

套件名稱

使用 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,這些 APK 可能會獲得 Google Play 的核准,但無法通過錶面推送驗證 (請參閱下文)。

每個錶面 APK 中僅接受下列檔案/路徑:

  • /AndroidManifest.xml
  • /resources.arsc
  • /res/**
  • /META-INF/**

此外,AndroidManifest.xml 檔案中僅允許使用下列標記:

  • <manifest>
  • <uses-feature>
  • <uses-sdk>
  • <application>
  • <property>
  • <meta-data>

最後,套件應指定至少 33minSdk,而 <application> 標記應指定屬性 android:hasCode="false"

驗證

與透過 Google Play 發行的一般錶面不同,Marketplace 應用程式負責執行錶面推送檢查,確保每個錶面都具備良好的格式和效能。

Google Play 會使用下列驗證檢查,驗證每個使用錶面推送功能的錶面品質:

  1. 所有透過 Watch Face Push API 安裝或更新的錶面都必須通過 Watch Face Push 驗證工具。
  2. 只有官方驗證工具可用於產生驗證權杖,以便與 API 搭配使用。
  3. 執行驗證時,使用的驗證工具必須為最新版本。
  4. 您不需要重新驗證未變更的 APK。即使所用驗證工具的版本已淘汰,憑證也不會過期。

    同時,我們建議您定期重新執行驗證作業,因為驗證工具會定期更新。

執行驗證工具

驗證工具可做為 CLI 工具或程式庫使用。

指令列驗證工具的使用方式

  1. 從 Google 的 Maven 存放區取得驗證器。
  2. 請按照下列步驟執行工具:

    java -jar validator-push-cli-1.0.0-alpha03.jar \
        --apk_path=<your watch face>.apk \
        --package_name=<your marketplace package name>
    

    如果成功,輸出內容會包含驗證權杖,您必須在新增或更新錶面時,將這項資訊提供給錶面推送 API。

    如果發生錯誤,輸出內容會包含哪項特定檢查失敗的詳細資料。

使用程式庫驗證工具

  1. 納入 Jitpack 存放區,這是驗證器依附元件所需的項目:

    repositories {
        ...
        maven {
            url = uri("https://jitpack.io")
            content {
                includeGroup("com.github.xgouchet")
            }
        }
    }
    
  2. 在專案中加入驗證器依附元件:

    // Check for the latest version
    implementation("com.google.android.wearable.watchface.validator:1.0.0-alpha03")
    
  3. 執行驗證工具:

    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 範例

APK 尺寸

請特別留意錶面推送錶面,確保 APK 大小保持在最小值:錶面 APK 可能會透過藍牙從手機應用程式傳送至手錶應用程式,而這項作業可能會很慢。

過大的 APK 可能需要相當長的時間才能傳輸,不僅會導致使用者體驗不佳,也會耗用電池電量。

  • 使用適當的程式庫 (例如 pngquant),盡可能縮減圖片檔案大小
    • 將這項資訊納入錶面集合建構程序
    • 檢查圖片的尺寸是否適合用於指定的縮放比例。
    • 請務必適當裁剪圖片,移除周圍背景。
  • 縮減字型檔案大小
    • 舉例來說,如果您只使用特定字型來顯示時間,且格式為 HH:MM,您可以使用 pyftsubset 等工具,將字型檔案限制為只包含必要的字形。這樣一來,產生的字型檔案和 APK 大小會大幅縮減。如要瞭解其他情況下如何縮減字型檔案大小,請參閱這篇網誌文章

如需有關如何盡量縮小 APK 大小的建議,請參閱記憶體用量最佳化指南

APK 簽署

所有錶面都必須簽署,就像一般 APK 一樣。請建立與主要應用程式不同的金鑰,並為所有錶面使用該金鑰。

建築

請考慮系統的三個主要元件:

  1. 雲端儲存空間:在標準的市集應用程式中,您可以建立並儲存在雲端的錶面,供使用者使用。錶面如下:
    1. 預先建構為一般錶面格式 APK
    2. 每個錶面都只包含一個採用錶面格式的錶面
    3. 已使用錶面推送驗證程序驗證,並與相關聯的驗證權杖一併儲存。
    4. 隨時可供手機應用程式在需要時擷取。
  2. 電話應用程式:電話應用程式是使用者與系統互動的主要方式。這項功能可讓他們:
    1. 瀏覽及搜尋錶面目錄
    2. 在手錶上安裝或更換錶面
  3. 手錶應用程式:手錶應用程式通常沒有重要的使用者介面。它主要是手機應用程式和 Watch Face Push API 之間的橋樑,具有以下功能:
    1. 使用 Watch Face Push API 安裝/更新或取代錶面
    2. 要求必要權限並提示使用者
    3. 提供預設錶面
    4. 提供最少的錶面快取
  4. 手機與手錶的通訊功能:手機和手錶應用程式的通訊功能是整體體驗成功的關鍵。使用 Wear OS Data Layer API,可執行以下操作:
    1. 安裝偵測功能:使用「功能」和 CapabilityClient,手機應用程式可偵測是否缺少手錶應用程式,反之亦然。接著,您可以向 Play 商店發出意圖,安裝缺少的板型規格。
    2. 狀態管理:使用 DataClientMessageClient,可讓手機與手錶的狀態保持同步,例如確保手機知道設定了哪個錶面。
    3. APK 傳輸:使用 ChannelClientMessageClient,即可將 APK 從手機傳送至手錶
    4. 遠端叫用:使用 Messageclient,手機可指示手錶呼叫 Watch Face Push API,例如安裝錶面。

詳情請參閱資料層 API 指南