設定錶面格式

本指南除了介紹以錶面格式設定錶面所需的工具,以及這些工具的使用步驟外,也針對專案架構提供了一些建議,包括逐步講解如何將工具應用於建立這個架構。

必要條件

為了讓開發環境做好使用錶面格式的準備,請完成下列設定步驟:

  1. 安裝適用於 Android 14 (API 級別 34) 以上版本的 SDK。如果您的錶面 不依賴第 2 版的功能或行為時,您可以 請安裝適用於 Android 13 (API 級別 33) 的 SDK。

    這個 SDK 包含其他必要工具,包括 aapt2android.jar

  2. 或者,請安裝 Android Studio,但也可以提供 工具。

專案架構

當您使用錶面格式建立自訂錶面時,必須將包含自訂錶面檔案的 Android App Bundle 與包含 Wear OS 應用程式邏輯的 Android App Bundle 完全區隔開來。部分應用程式商店 (包括 Google Play) 會禁止上傳同時包含 Wear OS 邏輯和自訂錶面的 Android App Bundle。

建立錶面套件

如要建立含有錶面檔案的 Android App Bundle,請完成以下各節所列步驟。

宣告使用錶面格式

在新應用程式的資訊清單檔案 (AndroidManifest.xml) 中新增應用程式 屬性說明您使用錶面格式。除非您選擇 針對搭載 Wear OS 5 以上版本的裝置,限制錶面存取權。 建立 2 個不同的錶面 APK,一個支援第 2 版,另一個則支援 第 1 版。進一步瞭解如何設定應用程式版本

<?xml version="1.0" encoding="utf-8" standalone="no"?>
<manifest ...>
    <!--
        Use SDK version 34 for version 2 of WFF, and SDK version 33 for version
        1 of WFF
    -->
    <uses-sdk
        android:minSdkVersion="34"
        android:targetSdkVersion="34" />

    <!--
        WFF is a resource-only format, so the hasCode attribute should be set to
        false to reflect this.
    -->
    <application
        android:label="@string/watch_face_name"
        android:hasCode="false"
        ...>
        <property
            android:name="com.google.wear.watchface.format.version"
            android:value="2" />
    </application>
</manifest>

宣告錶面中繼資料

在應用程式的 res/xml 資源目錄中,建立名為 watch_face_info.xml 的新檔案。您可以在這個檔案中定義錶面中繼資料:

<?xml version="1.0" encoding="utf-8"?>
<WatchFaceInfo>
    <!-- Only "Preview" is required. -->
    <Preview value="@drawable/watch_face_preview" />
    <Category value="CATEGORY_EMPTY" />
    <AvailableInRetail value="true" />
    <MultipleInstancesAllowed value="true" />
    <Editable value="true" />
</WatchFaceInfo>

這個檔案中的欄位代表下列詳細資料:

Preview
用於參考內含錶面預覽圖片的可繪項目。
Category

用於定義錶面類別。必須是字串或字串的參照,例如 @string/ref_name。每個裝置製造商都可以定義自己的錶面類別組合。

預設值為 empty_category_meta,可將這個錶面與錶面挑選器檢視畫面底部的其他「empty category」錶面分為同一組。

AvailableInRetail

用於指出可否在裝置處於零售商展示模式時使用錶面。這必須是布林值,或是布林值的參照,例如 @bool/watch_face_available_in_retail

預設值為 false

MultipleInstancesAllowed

用於指出錶面是否可有多項常用工具。這必須是布林值,或是布林值的參照,例如 @bool/watch_face_multiple_instances_allowed

預設值為 false

Editable

用於指出錶面是否「可編輯」,可編輯的意思是錶面具有一項設定,或至少一個未固定的小工具。此屬性可用於在常用工具清單中顯示或隱藏錶面的「Edit」按鈕。

預設值為 false。

宣告錶面名稱

在應用程式的資訊清單檔案 (AndroidManifest.xml) 中,將 android:label 屬性設為錶面名稱:

<application android:label="@string/watch_face_name" >

宣告支援的錶面形狀 (選用)

只有在您要支援不同行為模式時,才需要執行這個步驟 不同大小的錶面如果您符合以下描述,可以跳過此步驟: 錶面很開心。

在應用程式的 res/xml 資源目錄中,宣告錶面組合 您在 watch_face_shapes.xml 支援的形狀:

<WatchFaces>
    <!-- The default shape is "CIRCLE". -->
    <WatchFace shape="CIRCLE" width="300" height="300"
               file="@raw/watchface"/>
    <WatchFace shape="CIRCLE" width="450" height="450"
               file="@raw/watchface_large_circle"/>
    <WatchFace shape="RECTANGLE" width="380" height="400"
               file="@raw/watchface_rectangle"/>
</WatchFaces>

宣告錶面詳細資料

在應用程式的 res/raw 資源目錄中,建立與 宣告支援錶面時使用的 file 屬性值 形狀

您可以在這個檔案中, 每個錶面形狀如果您沒有定義形狀檔案,則只需要 即可建立一個檔案「watchface.xml」。

以本頁的範例來說,原始 XML 檔案會像這樣:

  • res/raw/watchface.xml
  • res/raw/watchface_large_circle.xml
  • res/raw/watchface_rectangle.xml

根元素一律為 WatchFace

<WatchFace width="450" height="450" shape="CIRCLE">
    <!-- Remainder of your Watch Face Format definition here. -->
    <!-- If this file defines a watch face for a circular device shape, place
         resources used in this file in the "/res/drawable-nodpi" directory. -->
    <!-- If this file defines a watch face for a rectangular or other
         non-circular shape, place resources ued in this file in the
         "/res/drawable-notround-nodpi" directory. -->
</WatchFace>

識別錶面發布商 (選用)

您可以選擇在應用程式的資訊清單檔案中宣告任意字串,此字串可用於識別錶面的發布商,或您目前所用的工具名稱和版本:

<application ...>
    ...
    <property
        android:name="com.google.wear.watchface.format.publisher"
        android:value="{toolName}-{toolVersion}" />
</application>

檢查錶面的正確性和效能

在開發期間以及上傳到 Google Play 前,請使用驗證工具 工具檢查錶面是否正確無誤 會遵循記憶體使用建議

建構錶面應用程式套件

如要建構包含錶面的 Android App Bundle,請使用 Gradle 建構系統。進一步瞭解如何使用以下應用程式建構應用程式: Gradle

這項說明在 GitHub 範例中說明。