Android Dev Summit, October 23-24: two days of technical content, directly from the Android team. Sign-up for livestream updates.

Wear アプリをパッケージ化して配信する

Wear OS by Google 搭載のスマートウォッチでは、ユーザーが Play ストアにアクセスして、Wear アプリをスマートウォッチに直接ダウンロードできます。また、ウェブ版の Play ストアからスマートウォッチにアプリを直接インストールすることもできます。

Wear 2.0 を搭載しているデバイスはすべて、Android 7.1.1(API レベル 25)を使用しています。アプリのサポート対象が Wear 2.0 以上を搭載しているデバイスのみの場合、ターゲット API レベルを 25 以上とする必要があります。アプリが Wear 1.x と 2.0 の両方をサポートしている場合は、ターゲット API レベルを 23 以上とすることができます。すべての Wear アプリは API レベル 23 以上をターゲットとする必要があるため、実行時権限が必要になります。

スタンドアロン アプリについてもご確認ください。

Wear 2.0 アプリにコンパニオン アプリが含まれている場合は、その 2 つの各アプリの署名に同じ鍵を使用する必要があります。この要件は、Wear 1.x アプリ(コンパニオン アプリが必ず含まれている)にも適用されます。

Play ストアに関する計画を立てる

スマートウォッチ版の Play ストアにアプリを表示するには、スマートウォッチ APK を他の APK と同じように Play Console でアップロードします。スマートウォッチ APK のみ(スマートフォン APK なし)の場合、他の手順は必要ありません。

スマートウォッチ APK に加えてスマートフォン APK も作成する場合は、複数 APK の配信方法を使用する必要があります。

Wear 2.0 スマートウォッチへの配信

Wear 2.0 を搭載しているデバイスで、関連するスマートウォッチ アプリ(埋め込み APK、または Play Console を介してアップロードされる APK)があるスマートフォン アプリをインストールすると、使用可能なスマートウォッチ アプリに関する通知がスマートウォッチに表示されます。通知をタップすると、スマートウォッチ版の Play ストアが開き、スマートウォッチ アプリをインストールできます。

次の点にもご注意ください。

  • スマートウォッチの新しい埋め込み APK を通じてスマートフォン APK を更新すると、ユーザーのスマートウォッチ APK が自動的に更新されます。
  • Play Console からスマートウォッチ APK をアップロードする場合、Wear APK をスマートフォン APK とは別に更新することができます。また、スマートウォッチ版の Play ストアに最新情報が表示されます。
  • 埋め込み型のスマートウォッチ APK の場合、スマートフォンで APK が更新されると、ユーザーのスマートウォッチ APK が自動的に更新されます。複数 APK の場合の更新の動作は、Play ストアの設定(アプリの自動更新)によって異なります。アプリの埋め込み APK と複数 APK のバージョンが異なる場合は、両者を併用しないことを強くおすすめします。たとえば、埋め込み APK v1 と複数 APK v2 があるとします。埋め込み APK が先にインストールされた場合、複数 APK の方が新しいバージョンのため、複数 APK のバージョンで埋め込み APK が置き換えられます。その後、デベロッパーがスマートフォン APK を v3 に更新すると、埋め込み APK が自動的にインストールされ、複数 APK で提供される新しいバージョンをオーバーライドします。

Wear 1.x および 2.0 のスマートウォッチへの配信

Wear 1.x の標準配信モデルでは、スマートフォン アプリ内にスマートウォッチ アプリを埋め込んでいました。現在は、Wear 1.0 と 2.0 の両方で、同じ方法で Wear アプリを配信できます。スマートフォン アプリのインストール時に、Play ストアに互換性のある Wear アプリがある場合、そのアプリが Wear 1.0 のスマートウォッチに自動的にインストールされます。この機能を使用すると、スマートフォン アプリの APK 内に Wear アプリが埋め込まれないようにすることができます。Play ストアにあるスマートウォッチ APK のスタンドアロン バージョンは、Wear 1.0 と Wear 2.0 のどちらのスマートウォッチにも提供することができます。

バージョン コードを指定する

スタンドアロン APK によってスマートウォッチ上の既存の埋め込み Wear APK がアップグレードされるようにするには、通常、スタンドアロンの Wear APK のバージョン コードを埋め込み Wear APK のバージョン コードより大きい値にする必要があります(スマートフォン APK のバージョン コード スキームはスマートウォッチ APK のバージョン コード スキームから切り離すことができますが、どちらも一意である必要があります)。ただし、スタンドアロン APK と埋め込み Wear APK が同等の場合、これらのバージョン コードを同じにすることができます。

これらの APK が同等でないにもかかわらず、バージョン コードが同一の場合、スマートウォッチが Wear 1.x から 2.0 に更新されると、新しい APK を取得できるようになるまでに予想以上に時間がかかることがあります。

現時点では、スマートフォンとスマートウォッチで動作する単一の APK を作成することはできません。

Wear APK とコンパニオン APK がコードを共有しており、リリースの調整が必要な場合は、バージョン コードの下 2 桁を APK バリアント用に予約する必要があります。APK バリアントの例として CPU アーキテクチャがあります。たとえば、複数の CPU アーキテクチャのサポートをご覧ください。

以下に、推奨されるバージョン コード スキームを示します。

  • バージョン コードの上 2 桁を targetSdkVersion に設定します(例: 25)。
  • 次の 3 桁をプロダクト バージョンに設定します(例: プロダクト バージョンが 1.5.2 の場合は 152)。
  • 次の 2 桁をビルド番号またはリリース番号に設定します(例: 01)。
  • 最後の 2 桁は複数 APK バリアント用に予約します(例: 00)。

このバージョン コード スキームの例の値(25、152、01、00)を使用した場合、APK バリアントのバージョン コードは 251520100 となります。

アプリのバージョン情報の設定もご覧ください。

Gradle ファイルでのサポート

Wear 1.x と Wear 2.0 の両方をターゲットとした Wear アプリがある場合は、プロダクト フレーバーの使用をご検討ください。たとえば、SDK バージョン 23 とバージョン 25 の両方をターゲットとする場合、Wear モジュールの build.gradle ファイルに以下を追加します(既存の Wear 1.x アプリの最小 SDK バージョンが 23 の場合)。

    android {
        // Allows you to reference product flavors in your
        // phone module's build.gradle file
        publishNonDefault true
        ...
        defaultConfig
        {
           // This is the minSdkVersion of the Wear 1.x app
           minSdkVersion 23
           ...
        }
        buildTypes {...}
        productFlavors {
            wear1 {
              // Use the defaultConfig value
            }
            wear2 {
                minSdkVersion 25
            }
        }
    }
    

ビルド バリアントは、プロダクト フレーバーとビルドタイプを組み合わせたものです。アプリをデバッグまたは公開する際に、Android Studio で適切なビルド バリアントを選択します。たとえば、wear2 がプロダクト フレーバーの場合は、リリース ビルド バリアントとして wear2Release を選択します。

Wear 2.0 または Wear 1.x に固有のコードの場合は、ビルド バリアントのソースセットをご検討ください。

Wear 1.0 APK を埋め込み APK から複数 APK に移行する

注: Wear 1.x スマートウォッチでのアプリの使用可否に影響を及ぼす遅延の問題により、複数 APK の配信方法を使用する代わりに Wear APK を埋め込むことができます(Wear 1.x スマートウォッチの場合)。

従来、ウェアラブル アプリのユーザーへの配信では、Wear 1.0 APK がスマートフォン APK に埋め込まれていました。Wear OS では現在、Wear 1.0 APK を埋め込む代わりに、Play ストアに直接アップロードできます。これにより、スマートフォン APK のサイズを小さくできるうえ、APK のバージョニングとリリースの柔軟性を高めることもできます。既存の埋め込み型の Wear 1.0 APK がある場合は、以下の手順を行うことで、APK を設定および作成し、Play ストアにアップロードすることができます。

  1. wearAppUnbundled true の設定をスマートフォン モジュールの build.gradle ファイルに追加します。この操作は、以前に埋め込み Wear アプリを Play ストアで公開した場合にのみ行う必要があります。
  2.     android {
          ...
          defaultConfig {
            ...
            wearAppUnbundled true
          }
        }
        
  3. 以下の wearApp 依存関係ルールをスマートフォン アプリの build.gradle ファイルから削除します。
  4.     dependencies {
            ...
            wearApp project(path: ':wear', configuration: 'wear1Release')
        }
        
  5. 以下の機能制限が Wear アプリのマニフェスト ファイルで指定されていることを確認します。
  6.     <manifest package="com.example.standalone"
            xmlns:android="http://schemas.android.com/apk/res/android">
            <uses-feature
                android:name="android.hardware.type.watch"/>
            ...
        </manifest>
        
  7. Wear モジュールの build.gradle ファイルで最小 SDK バージョンを 23 に設定します。
  8. 必要に応じて、スタンドアロン アプリのページを確認してから、Wear アプリをスタンドアロンとして指定します。
  9. Wear APK をビルドし、Google Play Console を使用してデプロイします。

Wear アプリの最小 SDK バージョンに関して、以下の点をご検討ください。

  • Wear 1.0 と Wear 2.0 の APK が異なる場合は、Wear 2.0 モジュールの build.gradle ファイルで最小 SDK バージョンをより大きい値の 25 に設定します。これにより、Play ストアでの Wear 2.0 APK の配信先が Wear 2.0 デバイスのみになり、Wear 1.0 デバイスには配信されなくなります。
  • 既存の Wear 2.0 アプリを Wear 1.0 デバイスに配信する場合、最小 SDK バージョンを 23 に設定する前に、Wear 1.0 デバイスで正常に動作することを確認する必要があります。

スマートウォッチのターゲットを設定する

Android マニフェスト ファイルで uses-feature 要素を android.hardware.type.watch に設定する必要があります。また、required 属性は false に設定しないでください。Wear デバイスと非 Wear デバイス用の単一の APK は、今のところサポートされていません。

そのため、APK に以下の設定が含まれている場合、Google Play は APK をスマートウォッチのみに提供します。

    <manifest package="com.example.standalone"
        xmlns:android="http://schemas.android.com/apk/res/android">
        <uses-feature
            android:name="android.hardware.type.watch"/>
        ...
    </manifest>
    

上の android.hardware.type.watch の設定は、他の条件(SDK バージョン、画面の解像度、CPU アーキテクチャなど)と組み合わせることができます。そのため、Wear APK ごとに異なるハードウェア設定をターゲットにすることができます。

アプリをスタンドアロンとして指定する

Wear 2.0 では、スマートウォッチ アプリの Android マニフェスト ファイルで、 meta-data 要素を <application> 要素の子として記述する必要があります。meta-data 要素の名前には com.google.android.wearable.standalone を指定し、値には true または false を指定する必要があります。この要素は、スマートウォッチ アプリがスタンドアロン アプリかどうかを示します。この要素の設定が true の場合、iPhone とペア設定されているスマートウォッチで、Play ストアからアプリを入手できます。ただし、すべてのチャンネル(Beta チャンネルなど)のアクティブな APK でこの要素が true に設定されている必要があります。現在、ユーザーに配信されている APK(アルファ版、ベータ版、製品版)の中に前述の設定になっていないものがある場合、iPhone とペア設定されているスマートウォッチでユーザーが検索を行ってもアプリは見つかりません。

スマートウォッチ アプリはスタンドアロンとみなされる場合とみなされない場合があります。スマートウォッチ アプリは次のように分類できます。

  • スマートフォン アプリから完全に独立
  • 半独立(スマートフォン アプリは必須ではなく、オプションの機能のみを提供)
  • スマートフォン アプリに依存

スマートウォッチ アプリがスマートフォン アプリから完全に独立または半独立している場合は、新しい meta-data 要素の値を true に設定します。

    <application>
    ...
      <meta-data
        android:name="com.google.android.wearable.standalone"
        android:value="true" />
    ...
    </application>
    

スタンドアロン アプリ(スマートフォン アプリから完全に独立または半独立しているアプリ)は、iPhone ユーザーや、Play ストアがインストールされていない Android スマートフォンのユーザーがインストールする可能性があるため、スマートウォッチ アプリは Android スマートフォン アプリなしでも使用できる必要があります。

スマートウォッチ アプリがスマートフォン アプリに依存している場合は、前述の meta-data 要素の値を false に設定します。この要素を false に設定するということは、Play ストアを使用可能なスマートフォンとペア設定されているスマートウォッチにのみスマートウォッチ アプリをインストールできることを示します。

注: 値が false に設定されていても、スマートフォン アプリをインストールする前にスマートウォッチ アプリをインストールすることは可能です。

Wear 2.0 アプリに付属のスマートフォン アプリがある場合は、Wear アプリとそのスマートフォン アプリに同じパッケージ名を使用します。

Play Console を使用する

Play Console を使用して、スタンドアロンの Wear APK をアプリの掲載情報にアップロードすることができます。

また、複数 APK のサポートアプリの管理もご覧ください。以下の説明に沿って APK をアップロードする前に、APK に署名する必要があります。

APK をアップロードして公開する

Play Console を使用して APK をアップロードおよび公開する手順は次のとおりです。

  1. Play Console に移動します。
  2. 左側のメニューで [リリース管理] > [アプリのリリース] を選択します。

    注: APK が未公開モードの場合は、左側のメニューから [アプリのリリース] を直接選択します。

  3. 作成するリリースタイプ(製品版、アルファ版、ベータ版のいずれか)の横にある [管理] を選択します。
  4. 新しいリリースを作成するには、[リリースを作成] を選択します。
  5. [ライブラリから APK を追加] を選択し、スタンドアロンの Wear APK を追加します。また、APK ファイルをドラッグ&ドロップするか、[ファイルを選択] を選択します。
  6. リリースの準備が完了したら、[確認] を選択します。表示される [確認して公開] 画面で情報アイコンを使用して、APK の詳細(サポートされている Android デバイスの番号など)を確認できます。また、ハードウェア機能が次の値に設定されていることを確認します。android.hardware.type.Watch.
  7. [公開の確認] を選択してアプリを公開します。

Wear 1.x APK を埋め込む

このセクションのプロセスは参照用に保持されます。Wear 1.x APK がスマートフォン アプリの APK にパッケージ化されている場合、ユーザーがスマートフォン アプリをダウンロードすると、システムによって Wear アプリがペア設定されているスマートウォッチにプッシュされます。

注: アプリの署名にデバッグキーを使用している場合、この機能は動作しません。開発中は、adb install または Android Studio を使用してスマートウォッチにアプリを直接インストールする必要があります。

Android Studio で Wear 1.x アプリをパッケージ化する

注: Wear 1.x スマートウォッチでのアプリの使用可否に影響を及ぼす遅延の問題により、複数 APK の配信方法を使用する代わりに Wear APK を埋め込むことができます(Wear 1.x スマートウォッチの場合)。

Android Studio で Wear 1.x アプリをパッケージ化する手順は次のとおりです。

  1. スマートウォッチとスマートフォンのアプリ モジュールのパッケージ名が同じであることを確認します。
  2. スマートウォッチのアプリ モジュールを指す Gradle 依存関係をスマートフォン アプリの build.gradle ファイルで宣言します。宣言は次のように行います。最新バージョンについては、Google Play 開発者サービスのセットアップv4 compat ライブラリをご覧ください。
        dependencies {
           compile 'com.google.android.gms:play-services-wearable:10.0.1'
           compile 'com.android.support:support-compat:25.1.0'
           wearApp project(':wearable')
        }
        
  3. リリースビルドに署名するに記載されている手順に沿って、リリース キーストアを指定し、アプリに署名します。Android Studio は、埋め込み型のスマートウォッチ アプリを含む署名済みのスマートフォン アプリを(プロジェクトのルートフォルダに)エクスポートします。

    また、Gradle ラッパーを使用して、コマンドラインから両方のアプリに署名します。スマートウォッチ アプリの自動プッシュを有効にするには、両方のアプリに署名する必要があります。詳しくは、アプリの署名をご覧ください。

Wear 1.x アプリとスマートフォン アプリに個別に署名する

ビルドプロセスでスマートウォッチ アプリへの署名をスマートフォン アプリとは別に行う必要がある場合、スマートフォン モジュールの build.gradle ファイルで次の Gradle ルールを宣言し、署名済みのスマートウォッチ アプリを埋め込むことができます。

    dependencies {
      ...
      wearApp files('/path/to/wearable_app.apk')
    }
    

その後、必要に応じてスマートフォン アプリに署名します(Android Studio の [Build] > [Generate Signed APK...] メニュー項目、または、Gradle の signingConfig ルールを使用します)。

Wear 1.x アプリを手動でパッケージ化する

別の IDE や別のビルド方法を使用している場合は、スマートウォッチ アプリをスマートフォン アプリに手動でパッケージ化できます。

  1. スマートウォッチ APK とモバイル APK のパッケージ名とバージョン番号が同じであることを確認します。
  2. 署名済みのスマートウォッチ アプリをスマートフォン プロジェクトの res/raw ディレクトリにコピーします。この APK を wearable_app.apk と呼びます。
  3. スマートウォッチ アプリのバージョンとパスの情報を格納する res/xml/wearable_app_desc.xml ファイルを作成します。以下に例を示します。
        <wearableApp package="wearable.app.package.name">
          <versionCode>1</versionCode>
          <versionName>1.0</versionName>
          <rawPathResId>wearable_app</rawPathResId>
        
        </wearableApp>
        

    packageversionCodeversionName の値は、スマートウォッチ アプリのマニフェスト ファイル内の値と同じです。rawPathResId は APK リソースの静的変数名です。たとえば、wearable_app.apk の静的変数名は wearable_app です。

  4. meta-data タグをスマートフォン アプリの <application> タグに追加して、wearable_app_desc.xml ファイルを参照します。
          <meta-data android:name="com.google.android.wearable.beta.app"
                         android:resource="@xml/wearable_app_desc"/>
        

    注: 上の meta-data タグは変更しないでください。com.google.android.wearable.beta.app は必須です。

  5. スマートフォン アプリをビルドして署名します。

アセットの圧縮を無効にする

Android Studio はデフォルトでは APK を圧縮しませんが、別のビルドプロセスを使用する場合は、スマートウォッチ アプリが二重に圧縮されないようにしてください。ビルドツールの多くは、Android アプリの res/raw ディレクトリに追加されたファイルを自動的に圧縮します。スマートウォッチ APK はすでに圧縮されているため、二重に圧縮されることになります。その結果、スマートウォッチ アプリのインストーラがスマートウォッチ アプリを読み取ることができず、インストールが失敗します。また、PackageUpdateService によってエラー「This file cannot be opened as a file descriptor; it is probably compressed」が記録されます。