Slide 1

Slide 1 text

DroidKaigi 2022, Dialogs -> Backdrop - 2022/10/05 12:10-12:50 Ryo Yamazaki Introduction to Wear OS Application Development

Slide 2

Slide 2 text

🎉 Google Pixel Watchが発売

Slide 3

Slide 3 text

● Ryo Yamazaki ○ twitter: @ymnd ○ GitHub: @ymnder ● Application Engineer ○ Android 日経電子版アプリ ○ Android 紙面ビューアーアプリ ● DroidKaigi co-organizer whoami

Slide 4

Slide 4 text

● 日本経済新聞社ではAndroidエンジニアの募集をしています!!! ○ https://hack.nikkei.com/jobs/android/ We are Hiring :)

Slide 5

Slide 5 text

● オープンテストで公開されています ● 今すぐインストール https://play.google.com/store/apps/details?id=com.nikkei.newspaper 日経電子版がWear対応しました

Slide 6

Slide 6 text

● Wearアプリのリリースを目指す ○ 開発中に遭遇した様々な困難を整理して紹介する ■ Documentはどこにあるか ■ Wearアプリとはどのようなものなのか ■ どうやってモバイルアプリと組み合わせるか ■ どうやってリリースをするか 本セッションの目標

Slide 7

Slide 7 text

● Health Servicesの実装 ○ フィットネスや健康に関するセンサー ● Watch Faceの実装 / Watch Face Studio ○ 時計の盤面 ● User input ○ IMEや音声入力 ● Data Layer API ○ ペア設定したモバイルアプリとの通信 本セッションで扱わないもの

Slide 8

Slide 8 text

● Wearアプリ ○ Wear OS by Googleがインストールされたスマートウォッチで動作 するアプリ。正確にはWear OSアプリ ● モバイルアプリ ○ Androidがインストールされたスマートフォン/タブレット端末で動作す るアプリ 本セッションでの便宜的なアプリの呼び方

Slide 9

Slide 9 text

Wear OSって何?

Slide 10

Slide 10 text

● Wearableデバイス向けに設計されたAndroidベースのOS ○ https://cs.android.com/android/platform/superproject/+/and roid-wear-9.0.0_r34 ○ 現在の最新はWear OS 3 (API level 30) : Google I/O 2021で発表 ● 接続できるモバイルのOS ○ Wear OSのデバイスはiOSとAndroidに対応している ● Wear単体での使用も可能 ○ モバイルが近くになくても使えるように実装できる Wear OSって何?

Slide 11

Slide 11 text

● Wear OSのデバイスはiOSにもAndroidにも接続できる Wear OSのデバイス iOS / iPadOS Android

Slide 12

Slide 12 text

● こちらを参照 ○ https://wearos.google.com/intl/ja_jp/#find-your-watch ○ Galaxy watch4が代表的 ● Wear OSではないデバイス ○ Fitbit Sense ○ Mi Watch ○ wena ○ … Wear OSがインストールされたデバイス

Slide 13

Slide 13 text

Wear OSがインストールされたデバイス ref: Google Play Console デバイスカタログ

Slide 14

Slide 14 text

● Wear OS 3 (api 30) ○ 15台(Galaxy Watch4他) ● Wear OS 2 (api 25, 26, 28) ○ 66台(Fossil Gen 5他) Wear OSのバージョン別台数

Slide 15

Slide 15 text

● 基本できることは同じ ○ Tiles, Complications, Overlays, Watch Face ● 今の段階では3が普及していないため2もサポートした方が良い ● すでにWear OS 2に向けてアプリを公開している場合 ○ Support Library から Jetpack Libraryへ移行する ■ https://android-developers.googleblog.com/2021/09/w ear-os-jetpack-libraries-now-in-stable.html ○ デザイン ガイドライン対応をする Wear OSのバージョン差

Slide 16

Slide 16 text

Wear OSの開発の準備

Slide 17

Slide 17 text

● 実機 ● エミュレーター ○ 円形の画面 ○ 長方形の画面 Wearアプリを動かす

Slide 18

Slide 18 text

1. Wearで開発者向けオプションを有効にする 2. Wearと開発マシンを同じWi-Fi ネットワークにつなぐ 3. WearでWi-Fi設定を開き、IP アドレスを確認する 4. 開発マシンでadbコマンドを打つ a. adb connect :5555 実機と開発マシンをつなぐ

Slide 19

Slide 19 text

1. Android StudioでDevice ManagerからCreate Deviceをする 2. デバイスを選択する 3. System Imageを選択する エミュレーターと開発マシンをつなぐ

Slide 20

Slide 20 text

1. Android StudioのDevice ManagerからPair Wearableを選択する 2. 任意のデバイスを選択しペアリング開始 3. ウィザードに従いアプリをインストールする エミュレーターでWearとモバイルをつなぐ

Slide 21

Slide 21 text

● Android Studioの各種機能がモバイルアプリ開発と同じく使える ○ デバッガ ○ Device File Exprolerer ○ Network Inspector ○ Jetpack ComposeのPreview デバッグをどう進めるか

Slide 22

Slide 22 text

● Android Studio Dolphinでエミュレーターの更新があった ○ ボタンが実機に近くなった ○ Complication, Tile, and Watch Faceを直接反映できる🎉 ■ いままでは毎回自分で手動で再配置する必要があった デバッグをどう進めるか

Slide 23

Slide 23 text

● 開発時はエミュレーターを使うのがおすすめ ○ モバイルとペアリングできる ○ デバッグが行いやすい ○ シンプルなWatchFaceが提供されている ○ Rotary inputなど実機にない機能検証ができる ● 企画時や使用感のチェックで実機を用いていく 実機とエミュレーターの使い分け

Slide 24

Slide 24 text

● できないこと ○ WearアプリではURLを開けない ■ 開いたURLはモバイルに転送される ○ Firebase App Testerアプリはサポートされていない ● できること ○ Google Playアプリ経由でインストールする ■ クローズドテストなど ○ Android Studioでbuild & installする ○ adbコマンドでインストールする インストールしての動作確認をどう進めるか

Slide 25

Slide 25 text

Wearアプリを開発する

Slide 26

Slide 26 text

● モバイルアプリの通知はそのままWearにも表示できる ○ もうWearアプリに対応しているのに何を開発するの? ● Wearはモバイルよりも制約が多い ○ 画面が小さい ○ バッテリー容量が少ない ○ ネットワークにつながっていない可能性がある Wearアプリは開発より企画の方が難しい

Slide 27

Slide 27 text

スマートフォンアプリ開発との差異

Slide 28

Slide 28 text

● FirebaseのAnalyticsやCrashlyticsが使える ● Composeが使える ● Activity上でUIを構築できる(Overlay) ● モバイルと同じようにデータを永続化できる ○ SharedPreferences API ○ Room スマートフォンアプリ開発と似ているところ

Slide 29

Slide 29 text

● Google Playコンソールのリーチとデバイスからインストール率やクラッ シュ率を見られる Wearアプリと効果計測

Slide 30

Slide 30 text

● Wear OSではすべてのアプリがダークモードで表示される ● 独自のサーフェスが用意されている ● シンプルなユーザー体験が求められる ○ シャロー:2 階層より深くならないようにする ○ リニア:ほとんどのコンテンツとナビゲーションをインラインで表示する スマートフォンアプリ開発と異なるところ

Slide 31

Slide 31 text

● > API のほとんどは完全にサポートされていますが、特定のエッジケース にはいくつかの制限があります。たとえば、android.webkit API はサ ポートされていません。 https://developer.android.com/training/wearables/wear-v-mo bile ○ UnsupportedOperationExceptionが発生します WearアプリではWebViewは使えません

Slide 32

Slide 32 text

Wear OSのUI

Slide 33

Slide 33 text

● 身につけていることによるデータがとれる ● 手元でさっと情報を見られる Wearアプリでできること

Slide 34

Slide 34 text

Wear OSのUI

Slide 35

Slide 35 text

● スマートフォンの通知と仕様は同じ ● ひと目で理解できる情報やアクションを表示する ● 表示方法 ○ モバイルアプリの通知を自動でWearに表示される ○ Wearアプリが通知を作成する Wear OSのUI: Notification

Slide 36

Slide 36 text

● モバイルのアプリと仕様や実装が似ており、Activityが動く。 ○ androidx.activity.ComponentActivity を継承したActivity上で UIを構築する ● 設定や詳細情報など複雑なタスクをするために使う ● 表示方法 ○ アプリ ランチャー ○ Complicationなど Wear OSのUI: Overlay

Slide 37

Slide 37 text

● ユーザーがひと目ですぐに理解できる情報を表示する ○ ユーザーの差し迫ったニーズにフォーカスする ● UI要素が限定されたComposeでさっと見て使える機能を提供する ● 表示方法 ○ WatchFaceからスワイプして切り替える Wear OSのUI: Tile

Slide 38

Slide 38 text

● 繰り返し使われるアクションやひと目でわかる情報を表示する ● WatchFaceの表示方法に依存する ○ 表示方法がWatch Faceによって異なる ● 表示方法 ○ Watch Faceに追加する Wear OSのUI: Complication

Slide 39

Slide 39 text

● 時計の盤面 ● ComplicationはWatch Face次第で置ける内容や個数がかわる ● 表示方法 ○ WatchFaceを長押しすると他のWatch Faceに変更できる ● 補足 ○ Watch Face StudioというSamsungのIDEがある ○ 自力で実装することもできる Wear OSのUI: Watch Face

Slide 40

Slide 40 text

各UIの優先度の例 ref: https://developer.android.com/training/wearables/principles

Slide 41

Slide 41 text

● Code Samplesがすごく充実しています ○ https://github.com/android/wear-os-samples ● Overlayについて学ぶ -> ComposeStarter ● Complicationについて学ぶ -> WearComplicationProvidersTestSuite ● Tileについて学ぶ -> WearTilesKotlin ● Watch Faceについて学ぶ -> WatchFaceKotlin Wear OSのUIに対応したCode Samples

Slide 42

Slide 42 text

● 物理 ○ 物理ボタン ○ クラウンのロータリー入力(縦方向のスクロールと押し込みでの選択) ○ 手首の操作 ● 入力 ○ IME ○ 音声入力 ● 画面操作 ○ 画面の縦スクロール ○ 画面の横スワイプ ○ ボタンのタップ Wear OSではどんなことができるのか(UX)

Slide 43

Slide 43 text

スタンドアロンか非スタンドアロンか ● スタンドアロンとは ○ ユーザーがモバイルアプリを使わずにスマートウォッチでタスクを Wearだけで完了できる ○ 認証などでモバイルアプリを前提とする場合は非スタンドアロンとして 宣言する -> Google Play ストアの表示がかわる

Slide 44

Slide 44 text

● モバイルがネットワークにつながっていれば、WearアプリはBluetoothを 介してネットワークに接続できる ○ WearデバイスがWi-Fiやモバイルネットワークをサポートしている場 合はWearデバイスだけでもネットワークに接続できる ● バッテリーや通信量を考慮したアプリをつくる必要がある ● オフライン状態を考慮しネットワークがなくても使えるようにする Wearアプリをネットワークにつなぐ

Slide 45

Slide 45 text

Wearアプリをネットワークにつなぐ Wearアプリ モバイル モバイル接続時: Bluetooth Moblile data / Wi-Fi Moblile data / Wi-Fi

Slide 46

Slide 46 text

Overlayを作る

Slide 47

Slide 47 text

● https://developer.android.com/jetpack/androidx/releases/wear ○ 多くのWear系Jetapack librariesが用意されています Wear OS Jetpack libraries

Slide 48

Slide 48 text

● https://github.com/google/horologist ○ AccompanistのようにComposeの機能を補うライブラリ ○ Horologist is a group of libraries that aim to supplement Wear OS developers with features that are commonly required by developers but not yet available. ● WearOSのUIやAnimationなどを強力にサポートしてくれる ぜひ使いたい便利なライブラリ: Horologist

Slide 49

Slide 49 text

● 新規アプリの作成や Moduleの追加はドキュメントが詳しいです ○ https://developer.android.com/training/wearables/get-started/creating#creating ● 重要な事項 ○ AndroidManifestに次のタグがある ■ ○ もし既存のモバイルアプリと一緒にリリースする場合 ■ 同じパッケージ名を付け、同じ証明書鍵で署名する Wearアプリの開発をはじめる

Slide 50

Slide 50 text

● 例:Android StudioでNew Projectする Overlayをつくる

Slide 51

Slide 51 text

No content

Slide 52

Slide 52 text

Wearアプリができた!!!

Slide 53

Slide 53 text

● androidx.wear:wear-remote-interactionsを使います ● Wearアプリからモバイルを開く val remoteActivityHelper = RemoteActivityHelper( this) try { val intent = Intent(Intent. ACTION_VIEW) .setData(Uri.parse( "https://play.google.com/store/apps/details?id=com.nikkei.newspaper" )) .addCategory(Intent. CATEGORY_BROWSABLE) // awaitは"org.jetbrains.kotlinx:kotlinx-coroutines-android" remoteActivityHelper.startRemoteActivity(intent).await() } catch (e: RemoteActivityHelper.RemoteIntentException) { //... }

Slide 54

Slide 54 text

● コード例ではモバイルでPlay ストアアプリが開かれる ● ここでモバイルアプリに向けたIntentを呼べば良い ○ モバイルの画面がオフになっていた場合でもIntentは受信され、次 オンになったタイミングでは画面に表示される ● モバイルのアプリが開かれる・失敗した場合には確認のオーバーレイを表 示すると良い Wearアプリからモバイルを開く ref: https://developer.android.com/training/wearables/design/confirmation-overlay#open

Slide 55

Slide 55 text

● モバイルアプリでWearアプリを使っていることをCapabilityClientを使え ば検知できる ○ https://github.com/android/wear-os-samples/tree/main/ WearVerifyRemoteApp モバイルアプリからのWearアプリの検知

Slide 56

Slide 56 text

Wearに特有のCompose

Slide 57

Slide 57 text

● WearアプリにはWearに最適化された独自のComposeがあります ○ Wearのデバイスに向けて調整されています ○ 多くのComposable要素は同じ名前で利用できます OverlayでComposeを使う ref: https://developer.android.com/training/wearables/compose

Slide 58

Slide 58 text

● 画面に時刻を表示する TimeText Scaffold( timeText = { TimeText() } ) { ScalingLazyColumn { // … } }

Slide 59

Slide 59 text

● 縁取りを暗くする Vignette Scaffold( vignette = { Vignette(vignettePosition = VignettePosition. TopAndBottom) } ) { ScalingLazyColumn { //… } }

Slide 60

Slide 60 text

● スクロール位置を表示する PositionIndicator val listState = rememberScalingLazyListState() Scaffold( positionIndicator = { PositionIndicator(scalingLazyListState = listState) } ) { ScalingLazyColumn( state = listState ) { //… } }

Slide 61

Slide 61 text

● LazyColumnよりもコンテンツにフォーカスがあたる ○ 画面の上部と下部でコンテンツが小さくなる ScalingLazyColumn val rooms = listOf("App bars", "Backdrop", "Cards", "Dialogs", "Online") ScalingLazyColumn { items(rooms) { room -> TitleCard( onClick = { /*TODO*/ }, time = null, title = { Text(text = room) }, content = { Text(text = "この部屋は${room}です。") } ) } }

Slide 62

Slide 62 text

ScalingLazyColumn ScalingLazyColumn LazyColumn

Slide 63

Slide 63 text

● リストではデフォルトで2つめのアイテムが中央に表示される ● 1本目を表示したい場合は次のindexで0を指定する ScalingLazyColumnの表示位置 val listState = rememberScalingLazyListState(initialCenterItemIndex = 0) Scaffold( timeText = { TimeText( modifier = Modifier. fadeAwayScalingLazyList( initialIndex = 0, ) { listState }, ) }, ) { ScalingLazyColumn( autoCentering = AutoCenteringParams( itemIndex = 0), ) { //… } }

Slide 64

Slide 64 text

● Rotary inputはデバイスに依存した 入力です ● ベゼルやクラウンを回すことで画面を スクロールできます ● エミュレーターではExtended ControlsからRotary inputを行えま す ScalingLazyColumnのRotary input対応

Slide 65

Slide 65 text

● HorologistのscrollableColumnを使う ● あわせてFocusRequesterを呼び出す ScalingLazyColumnのRotary input対応 val focusRequester = remember { FocusRequester() } val listState = rememberScalingLazyListState(initialCenterItemIndex = 0) Scaffold( //… ) { ScalingLazyColumn( modifier = Modifier . fillMaxSize() . scrollableColumn(focusRequester , listState) , autoCentering = AutoCenteringParams( itemIndex = 0), state = listState ) { //… } } LaunchedEffect(Unit) { focusRequester.requestFocus() }

Slide 66

Slide 66 text

● Actions ○ Floating action buttons -> ない ○ Segmented buttons -> ToggleButtonを使う ● Containment ○ Bottom sheets -> ない ● Navigation ○ Bottom app bar -> ない ○ Navigation bar -> ない ○ Navigation drawer -> WearableDrawerLayoutがあるが、Composeではない ○ Navigation rail -> ない ○ Top app bars -> ない ● Selection ○ Menus -> ない ○ Radio Button -> ToggleChipを使う ○ Switch -> ToggleChipを使う WearアプリとMaterial Components

Slide 67

Slide 67 text

● Tileの基本的なライブラリを入れる ○ https://developer.android.com/jetpack/androidx/releases/ wear-tiles ● Horologistを入れるとCoroutinesTileServiceが使える ○ https://google.github.io/horologist/tiles/ ● Figmaのデザインキットがある ○ https://developer.android.com/training/wearables/design/ tiles-design-system Tileを作る

Slide 68

Slide 68 text

● まずはライブラリを入れる ○ https://developer.android.com/jetpack/androidx/releases/ wear-watchface Complicationを作る // for Java implementation "androidx.wear.watchface:watchface-complications-data-source:1.1.1" // for Kotlin implementation "androidx.wear.watchface:watchface-complications-data-source-ktx:1.1.1"

Slide 69

Slide 69 text

Complicationを作る class HelloComplicationService : SuspendingComplicationDataSourceService() { override fun getPreviewData (type: ComplicationType): ComplicationData? { return if (type == ComplicationType. SHORT_TEXT) { val text = PlainComplicationText.Builder( "title").build() val contentDescription = PlainComplicationText.Builder( "description").build() val builder = ShortTextComplicationData.Builder(text , contentDescription) builder.setTapAction( null).build() } else null } override suspend fun onComplicationRequest (request: ComplicationRequest): ComplicationData? { return if (request.complicationType == ComplicationType. SHORT_TEXT) { val text = PlainComplicationText.Builder( "hello").build() val contentDescription = PlainComplicationText.Builder( "world").build() val builder = ShortTextComplicationData.Builder(text , contentDescription) builder.setTapAction( null).build() } else null } }

Slide 70

Slide 70 text

● SuspendingComplicationDataSourceServiceを継承すると便利 ● 配置する際のPreviewと実際に配置するComplicationをそれぞれ実装 する Complicationを作る

Slide 71

Slide 71 text

● Complicationは次のタイプが存在する ○ SHORT_TEXT ○ LONG_TEXT ○ RANGED_VALUE ○ SMALL_IMAGE -> 焼付き防止がある ○ PHOTO_IMAGE ○ MONOCHROMATIC_IMAGE Complicationを追加する

Slide 72

Slide 72 text

● タイプに対応したクラスも存在する ○ SHORT_TEXT: ShortTextComplicationData ○ LONG_TEXT: LongTextComplicationData ○ RANGED_VALUE: RangedValueComplicationData ○ SMALL_IMAGE: SmallImageComplicationData ○ PHOTO_IMAGE: PhotoImageComplicationData ○ MONOCHROMATIC_IMAGE: MonochromaticImageComplicationData ● データをセットしてWatch Faceに描画を依頼する ○ どのように描画されるかはWatch Face次第 Complicationを追加する

Slide 73

Slide 73 text

Complicationを作る

Slide 74

Slide 74 text

Complicationを作る // Wear OS システムだけがプロバイダ サービスにバインドできるようにする // サポートされている表示形式を指定する // データの更新頻度を指定する。単位は秒で、最短は 300秒、0を指定すると更新されない

Slide 75

Slide 75 text

Complicationを配置する

Slide 76

Slide 76 text

Complicationを配置する 長押しして設定へ どこに配置するか選択 Previewが表示 Complicationを選ぶ

Slide 77

Slide 77 text

Complicationを自動で配置する

Slide 78

Slide 78 text

● Watch Faceに配置できるためモバイルのWidgetのようにユーザーが繰り返 し使いやすい位置でコアな機能を提供できる ● 一方で、配置が難しい ● また、どのWatch Faceを使っているかに依存する ○ Complicationが置けない可能性 ■ SHORT_TEXTやSMALL_IMAGEは比較的サポートされている ○ 表示方法が異なる可能性 ■ SHORT_TEXTのテキストとアイコンをどの位置に表示するかは Watch Face次第 Complicationについて

Slide 79

Slide 79 text

Wearアプリができた あとはリリースするだけ

Slide 80

Slide 80 text

・・・Wearアプリって どうやってリリースするの?

Slide 81

Slide 81 text

● 1つのAPK/AABファイルをモバイル・Wear両方のデバイスでインストール し使うことはできない ○ > 現時点では、Wear デバイスと Wear 以外のデバイス用に単一の APK を作成することはできません。 ○ https://developer.android.com/training/wearables/packagi ng ● デバイスごとのAPK(AAB)のアップロードが必要となる 1つのAPK/AABでアプリを配信できる?

Slide 82

Slide 82 text

● 現行のドキュメント ○ https://developer.android.com/training/wearables/packaging ● 古いドキュメント ○ https://developer.android.com/training/wearables/apps/packaging?hl =ja ○ Wear 1.x / Wear 2.0向けのドキュメント ○ Codelabのコードの中にもWear 2.0向けのコードがまだある ■ 例えばモバイルアプリのapp/build.gradleにwearAppの依存関係ルールを 定義しなくてよくなった パッケージ化の方法にアップデートがあります

Slide 83

Slide 83 text

● たとえば審査でこういう点が指摘される ○ ストアの掲載情報で「 Wear OS」に言及していない ○ Wear のスクリーンショットがない ○ スクリーンショットに透明な背景やマスキングが含まれる ○ 円形ディスプレイ向けにフォーマットされていない ● 審査は長期化する可能性があるので余裕をもってリリーススケジュールを組みましょう ● 関連情報 ○ https://developer.android.com/training/wearables/packaging#reasons-for-rejec tion ○ https://support.google.com/googleplay/android-developer/answer/9866151 ○ https://developer.android.com/docs/quality-guidelines/wear-app-quality Play Consoleの審査に注意

Slide 84

Slide 84 text

1. WearアプリのAABもしくはAPKを用意する 2. Google Play Consoleの設定 > 詳細設定 > リリースの種類でWear OSを選択する 3. ストアの掲載情報を更新する a. Wear OSについて言及する b. Wear OSのスクリーンショットを含める 4. オープンテストなどでWearアプリをリリースする 5. Google Play Console の [詳細設定] から Wear OS にオプトイン Wearアプリの配信ステップ

Slide 85

Slide 85 text

● 既にスマートフォン向けアプリを配信中の場合、複数APKサポートを行うこ とになる ○ https://developer.android.com/google/play/publishing/mul tiple-apks ● ルール ○ 同じパッケージ名を付け、同じ証明書鍵で署名する ○ 異なるバージョン コードを指定する 1. WearアプリのAABもしくはAPKを用意する

Slide 86

Slide 86 text

● バージョン コードとアップロードについて ○ モバイルのバージョンとWearのバージョンは同じにできない ○ そのデバイスに適応した最もバージョンコードが大きいapkがインス トールされる ○ 変更がないAPKの方は毎回APKをアップロードする必要はない ■ インクリメントは不要 1. WearアプリのAABもしくはAPKを用意する

Slide 87

Slide 87 text

● バージョンコード: 10000など内部的に管理される正の整数 ○ 次のスライドでは便宜上、major_minor_patchとして表現する ● バージョンネーム: 1.0.0や1.0.0-wearなどPlayストアなどでユーザーに表 示される文字列 1. WearアプリのAABもしくはAPKを用意する

Slide 88

Slide 88 text

1. WearアプリのAABもしくはAPKを用意する ● 例:モバイルアプリ(1.0.0)がすでにリリースされているときにWearアプリ (1.0.0)をリリースする mobile: wear: 1_00_00 20_01_00_00 10_01_00_00 10_01_01_00 今のストア Wearをリリース モバイルをhotfix 20_01_00_00

Slide 89

Slide 89 text

1. WearアプリのAABもしくはAPKを用意する ● 例:モバイルアプリ(1.0.0)がすでにリリースされているときにWearアプリ (1.0.0)をリリースする mobile: wear: 1_00_00 今のストア Wearをリリース モバイルをhotfix Wearアプリであることをprefixで表現 している 必要な方だけバージョンを上げてリ リースできる 20_01_00_00 10_01_00_00 10_01_01_00 20_01_00_00

Slide 90

Slide 90 text

2. Google Play Consoleの設定

Slide 91

Slide 91 text

3-a. Wear OSについて言及する

Slide 92

Slide 92 text

3-b. Wear OSのスクリーンショットを含める

Slide 93

Slide 93 text

4. オープンテストなどでWearアプリをリリースする

Slide 94

Slide 94 text

● もしすでに配信しているモバイルのAPKがある場合 ○ 含まれないAPKからAPKを追加すると同時に配信できる 4. オープンテストなどでWearアプリをリリースする

Slide 95

Slide 95 text

5. Google Play Console の [詳細設定] から Wear OS にオプトイン

Slide 96

Slide 96 text

あとは審査の通過を待つのみです

Slide 97

Slide 97 text

おわりに

Slide 98

Slide 98 text

● まずはPathwayで概観を掴みましょう ○ https://developer.android.com/courses/pathways/wear ● 次にGoogleの開発者ページを参照します ○ https://developer.android.com/training/wearables ● 具体的な実装はCode Samplesを見てください ○ https://github.com/android/wear-os-samples Wearアプリ開発のはじめ方

Slide 99

Slide 99 text

● Wearアプリの開発ははじめやすいです ○ Code Samplesが充実しています ● どういう機能を提供できるかを企画するのが難しいです ● 審査があるのでリリースは余裕をもって行いましょう ● Pixel Watchの発売が楽しみですね おわりに

Slide 100

Slide 100 text

Wear元年やっていくぞ!

Slide 101

Slide 101 text

● Android Studioのスクリーンショット機能 ● adb shell screencap ● 端末のスクリーンショット機能 ● paparazzi ○ https://github.com/google/horologist/issues?q=is%3Aissue +paparazzi+is%3Aclosed 付録: スクリーンショットの方法

Slide 102

Slide 102 text

● Android Studio ○ LogcatのScreen Captureを押す ● エミュレーターの場合 ○ Take Screenshotボタンを押す ● 実機の場合 ○ Wearコンパニオンアプリの右上詳細ボタンから選択できる 付録: スクリーンショットの方法

Slide 103

Slide 103 text

● ニュース ○ https://android-developers-jp.googleblog.com/2021/11/compose-for-wear-os-now-in-developer.html ○ https://android-developers-jp.googleblog.com/2021/03/creating-custom-tiles-on-wear-os-by-google-with-jetp ack-tiles-library.html ○ https://android-developers.googleblog.com/2022/05/announcing-compose-for-wear-os-beta.html ○ https://blog.google/products/wear-os/wear-io21/ ● Google I/O ○ https://io.google/2022/program/7f0f4d16-b260-414d-9f2d-bd2e18ea469b/intl/ja/ ● 便利なツール ○ https://developer.android.com/distribute/marketing-tools/device-art-generator?hl=ja ● 発表 ○ https://www.droidcon.com/tag/wear-os/ ○ https://speakerdeck.com/syarihu/droidkaigi-2018-android-wearfalsewatch-facewozuo-rou-shi-ji-falsepan-mia n-nixiao-sanaqing-bao-wotian-ete 参考資料

Slide 104

Slide 104 text

● Wear OSの画面機能について ○ https://developer.android.com/training/wearables/user-interfaces ● Pathway ○ https://developer.android.com/courses/pathways/wear ● ComposeのAPI ○ https://developer.android.com/training/wearables/compose ● Overlayについて ○ https://developer.android.com/training/wearables/overlays ● Complicationについて ○ https://developer.android.com/training/wearables/tiles/complications ○ https://medium.com/@danybony/wear-complications-api-16ab65290aa1 ● デザイン原則について ○ https://developer.android.com/training/wearables/design/design-principles 参考資料