このシリーズでは、Android と Google Play の製品情報で、日本の皆さんに特に重要な記事を見やすくお届けするために、グローバルで発表された 2 週間分のブログ記事の URL を、1 つのブログ記事にまとめます。
*リンク先は英語の記事になります。お手数ですが Chrome ブラウザの翻訳機能などを使って、投稿を日本語でご確認ください。
Android
Media3 1.6.0 — 最新情報 (Media3 1.6.0 — what’s new?)
One UI 7 でウィジェットがより注目の存在に (Widgets Take Center Stage with One UI 7)
Gemini in Android Studio for business : AI でより良い開発を実現 (Gemini in Android Studio for businesses: Develop with confidence, powered by AI)
アダプティブ カメラ : アニメーションを用いたスムーズなテーブルトップ モード (Adaptive Camera: Smooth Tabletop Mode with Animations)
Google Play
Android の画像選択ツールでメディアのプライバシーにより配慮してユーザーの信頼を築きましょう (Prioritize media privacy with Android Photo Picker and build user trust)
Google Devs Japan の X (旧 Twitter) をフォローして、今後のアップデートをお見逃しなく!
Posted by Tamao Imura - Google Developer Marketing Manager, Japan
このシリーズでは、Android と Google Play の製品情報で、日本の皆さんに特に重要な記事を見やすくお届けするために、グローバルで発表されたブログ記事の URL を、1 つのブログ記事にまとめます。
Android Studio チームをご紹介 : Android デベロッパー UX マネージャー Dan Dole へのインタビュー (Meet the Android Studio Team: A Conversation with Android Developer UX Manager, Dan Dole)
アプリをレベルアップ : Android のウィジェットが革新的な理由 (Level Up Your App: Why Android Widgets are a Game-Changer)
Spotlight Week : ウィジェットのデザインと開発 (Spotlight Week: Design and Develop Widgets)
SoundCloud が Jetpack Glance を活用してわずか 2 週間で Liked Tracks のウィジェットを構築 (SoundCloud uses Jetpack Glance to build Liked Tracks widget in just 2 weeks)
ウィジェット品質階層の導入について (Introducing Widget Quality Tiers)
正規のウィジェット レイアウトでデザインする (Design with Widget Canonical Layouts)
Firebase の Vertex AI 経由で Imagen 3 を使用し Android アプリ向けの美しいビジュアルを生成 (Generate Stunning Visuals in Your Android Apps with Imagen 3 via Vertex AI in Firebase)
Jetpack Media3 の Transformer による一般的なメディア処理操作について (Common media processing operations with Jetpack Media3 Transformer)
ロック画面のウィジェット : よくある質問 (Widgets on lock screen: FAQ)
健康状態をより深く把握する : 新機能が追加されたヘルスコネクト Jetpack SDK がベータ版に (Unlock Deeper Health Insights: Health Connect Jetpack SDK is now in beta and new feature updates)
Jetpack WindowManager 1.4 が安定版に (Jetpack WindowManager 1.4 is stable)
Gemini in Android Studio でマルチモーダルの画像添付が可能に (Multimodal image attachment is now available for Gemini in Android Studio)
#TheAndroidShow : Gemini in Android Studio におけるマルチモーダル、ゲーム開発の最新情報、MWC での最新デバイスや XR についてをお届け (#TheAndroidShow: Multimodal for Gemini in Android Studio, news for gaming devs, the latest devices at MWC, XR and more!)
Android 16 ベータ版 3 (The Third Beta of Android 16)
Bump が歩んだ Jetpack Compose を活用した Android での素晴らしい体験 (Bump’s Journey into Delightful Experiences on Android with Jetpack Compose)
ViewModel におけるライフサイクルとステートの単体テスト (Unit Testing Lifecycle and State in ViewModels)
Now in Android #114 (Now in Android #114)
WebView をエッジ ツー エッジに (Make WebViews edge-to-edge)
Google Play の強化されたウィジェット検索機能でアプリのエンゲージメントを促進 (Google Play enhances widget discovery to drive engagement with your app)
#WeArePlay | Memory Lane Games が認知症の方を支援している方法 (#WeArePlay | How Memory Lane Games helps people with dementia)
アプリのエコシステムを強化:安全で効率的な開発のためのツールを拡充 (Strengthening Our App Ecosystem: Enhanced Tools for Secure & Efficient Development)
この記事は Jon Eckenrode による Android Developers Blog の記事 " What’s new in WindowManager 1.1.0-beta01 " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Jetpack WindowManager の 1.1.0-beta01 リリースでは、バージョン 1.1.0 の安定版に向けた作業が着々と進んでいます。今回のベータ版にはさまざまな新機能を追加しており、さっそく2023 年 4 月 3 日よりテストや早期利用ができるようになりました。
WindowManager が最適に動作するには、皆さんのフィードバックが必要です。アプリに 1.1.0-beta01 への依存関係を追加し、(すでにこのライブラリ以前のバージョンを使っている場合は)後述する移行手順に従ってください。そして、ぜひ感想をお聞かせください!
androidx.window.embedding
アクティビティの埋め込みを使うと、マルチアクティビティ アプリを大画面向けに最適化できます。1.1.0-beta01 リリースでは、API の拡張とリファクタリングが行われているので、タスク ウィンドウの分割を管理する際の柔軟性、機能、制御が向上しています。この機能は 1.0.0 で試験運用版 API として始まりましたが、最終的に 1.1.0 で安定版となります。
マニフェスト設定を追加して、アプリがアクティビティの埋め込みを実装していることをシステムに通知できるようにしました。分割プロパティに注目しやすくするため、SplitController をリファクタリングしました。分割ルール API を RuleController に、アクティビティ埋め込み API を ActivityEmbeddingController に抽出しました。埋め込み要素の分割属性を記述する SplitAttributes クラスを追加しました。アクティビティ埋め込みルールを適用する最低比率を設定する EmbeddingAspectRatio クラスを追加しました。ピクセルの単位をディスプレイ非依存ピクセル(dp)に変更しました。分割レイアウトをカスタマイズできるようにしました。デベロッパーがルールを識別、管理しやすくするために、ルールにタグを追加しました。
PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED
boolean 型のプロパティとして、アプリ マニフェストの <application> タグに追加しました。
ActivityEmbeddingController
Activity クラスや ActivityStack クラスに関連するオペレーションに使うクラスを追加しました。
SplitController の API に代わるものとして、isActivityEmbedded() を含めています。
RuleController
EmbeddingRule クラスとそのサブクラスに関連するオペレーションに使うクラスを追加しました。
SplitController の API に代わるものとして、以下の API を含めています。
addRule() — ルールを追加するか、同じタグのルールを更新します。
removeRule() — 登録されているルールのコレクションからルールを削除します。
setRules() — ルールのコレクションを設定します。
clearRules() — 登録されているすべてのルールを削除します。
parseRules() — XML のルール定義からルールを解析します。
SplitAttributes
分割レイアウトを定義するクラスを追加しました。
EmbeddingAspectRatio
ディスプレイのアスペクト比に関連する列挙型に似た動作定数を定義するクラスを追加しました。どの場合に分割を有効化するかを、親ウィンドウのアスペクト比に基づいて指定できます。
この定数を使うプロパティについては、SplitRule をご覧ください。
EmbeddingRule
分割ルールを識別するためのタグ項目を追加しました。
SplitController
API をリファクタリングし、次のモジュールに分割しました。
isActivityEmbedded() を ActivityEmbeddingController に移動しました。
次の API を削除し、その機能を RuleController API で置き換えました。
clearRegisteredRules()
getSplitRules()
initialize()
registerRule()
unregisterRule()
isSplitSupported() メソッドを非推奨とし、splitSupportStatus プロパティで置き換えました。これにより、分割機能が利用できない理由について、さらに詳しい情報を提供できるようになります。
getInstance() メソッドに Context パラメータが追加されました。 注 : ActivityEmbeddingController と RuleController の getInstance() メソッドにも、Context パラメータが追加されています。
分割レイアウトをカスタマイズするための SplitAttributes の計算関数を追加しました。
setSplitAttributesCalculator()
clearSplitAttributesCalculator()
isSplitAttributesCalculatorSupported() は、デバイスで SplitAttributesCalculator API がサポートされているかを確認します。
splitSupportStatus プロパティで使う状態定数を提供するために、SplitSupportStatus ネストクラスを定義しました。現在のアプリ環境でアクティビティ埋め込みの分割がサポートされているかどうかに応じて、アプリの動作を変えることができるようになります。
SplitRule
分割のデフォルト レイアウトを定義する defaultSplitAttributes プロパティを追加しました。これは splitRatio と layoutDirection に代わるものとなります。
XML プロパティ splitRatio と splitLayoutDirection が defaultSplitAttributes に変換されるようにしました。
最低の長さの定義に、ピクセルではなく密度非依存ピクセル (dp) を使うように変更しました。
minWidth を minWidthDp に変更し、デフォルト値を 600dp としました。
minSmallestWidth を minSmallestWidthDp に変更し、デフォルト値を 600dp としました。
minHeightDp プロパティを追加し、デフォルト値を 600dp としました。
maxAspectRatioInHorizontal を追加し、デフォルト値を ALWAYS_ALLOW としました。
maxAspectRatioInPortrait を追加し、デフォルト値を 1.4 としました。
完了動作定数に代わる FinishBehavior ネストクラスを定義しました。
このプロパティの変更を、SplitPairRule と SplitPlaceholderRule の Builder ネストクラスに適用しました。
SplitInfo
getSplitRatio() を getSplitAttributes() で置き換え、分割関連の追加情報を提供できるようにしました。
androidx.window.layout
ウィンドウ レイアウト ライブラリを使うと、アプリのディスプレイ ウィンドウの特性を決定できます。1.1.0-beta01 リリースでは、アクティビティ以外のコンテキストを扱えるようになります。
WindowInfoTracker
試験運用版として、アクティビティ以外の UI コンテキストに対応しました。
WindowMetricsCalculator
アクティビティ以外の UI コンテキストに対応しました。
以下の手順を実行し、アプリを以前のアルファ版からアップグレードしてください。アップグレード プロセスをさらに簡単にする方法についてアイデアがある方は、ぜひお知らせください。
アクティビティの埋め込みを有効にするには、次のようにしてこのプロパティをアプリ マニフェストの <application> タグに追加する必要があります。
< property android:name="android.window.PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED" android:value="true" />
このプロパティを true に設定すると、システムは早い段階でアプリの分割動作を最適化します。
現在の分割がスタックに登録されているかどうかを確認します。
SplitInfo.splitAttributes.splitType is SplitAttributes.SplitType.ExpandContainersSplitType
現在の比率を確認します。
if (SplitInfo.splitAttributes.splitType is SplitAttributes.SplitType.RatioSplitType) { val ratio = splitInfo.splitAttributes.splitType.ratio } else { // 他のタイプの場合、ratio には意味がない。 }
SplitController.getInstance()
次のように変更します。
SplitController.getInstance(Context)
SplitController.initialize(Context, @ResId int)
RuleController.getInstance(Context) .setRules(RuleController.parse(Context, @ResId int))
SplitController.getInstance().isActivityEmbedded(Activity)
ActivityEmbeddingController.getInstance(Context) .isActivityEmbedded(Activity)
SplitController.getInstance().registerRule(rule)
RuleController.getInstance(Context).addRule(rule)
SplitController.getInstance().unregisterRule(rule)
RuleController.getInstance(Context).removeRule(rule)
SplitController.getInstance().clearRegisteredRules()
RuleController.getInstance(Context).clearRules()
SplitController.getInstance().getSplitRules()
RuleController.getInstance(Context).getRules()
minWidth を minWidthDp に、minSmallestWidth を minSmallestWidthDp に変更します。
minWidthDp と minSmallestWidthDp の単位に、ピクセルではなく dp を使うようにします。
アプリでは、次のようにして呼び出すことができます。
TypedValue.applyDimension( COMPLEX_UNIT_DIP, minWidthInPixels, resources.displayMetrics )
または、単純に minWithInPixels を displayMetrics#density で割ります。
SplitPairRule.Builder
SplitPairRule.Builder( filters, minWidth, minSmallestWidth )
SplitPairRule.Builder(filters) // minWidthInDp 引数が 600 の場合は省略可能。 .setMinWidthDp(minWidthInDp) // minSmallestWidthInDp 引数が 600 の場合は省略可能。 .setMinSmallestWidthDp(minSmallestWidthInDp)
setLayoutDirection(layoutDirection) and setSplitRatio(ratio)
setDefaultSplitAttributes(SplitAttributes.Builder() .setLayoutDirection(layoutDirection) .setSplitType(SplitAttributes.SplitType.ratio(ratio)) .build() )
setFinishPrimaryWithSecondary と setFinishSecondaryWithPrimary は、列挙型に似た FinishBehavior 定数を受け取るようになります。
SplitRule の移行の詳細をご覧ください。
次のようにすると、
setMaxAspectRatioInPortrait( EmbeddingAspectRatio.ALWAYS_ALLOW )
縦向きのデバイスで分割表示できます。
SplitPlaceholder.Builder
パラメータは filters と placeholderIntent のみとなります。その他のプロパティはセッターに移動します。
SplitPairRule.Builder の移行の詳細をご覧ください。
setFinishPrimaryWithPlaceholder は、列挙型に似た FinishBehavior 定数を受け取るようになります。
完了動作の移行の詳細をご覧ください。
setLayoutDirection(layoutDirection) と setSplitRatio(ratio)
レイアウトの方向の移行の詳細をご覧ください。
完了動作定数は、FinishBehavior の列挙型に似たクラス定数に移行する必要があります。
FINISH_NEVER を FinishBehavior.NEVER に変更
FINISH_ALWAYS を FinishBehavior.ALWAYS に変更
FINISH_ADJACENT を FinishBehavior.ADJACENT に変更
レイアウトの方向は、SplitAttributes.LayoutDirection に移行する必要があります。
ltr を SplitAttributes.LayoutDirection.LEFT_TO_RIGHT に変更
rtl を SplitAttributes.LayoutDirection.RIGHT_TO_LEFT に変更
locale を SplitAttributes.LayoutDirection.LOCALE に変更
splitRatio を SplitAttributes.SplitType.ratio(splitRatio) に変更
WindowManager を使ってみるには、次のようにしてアプリの settings.gradle か、プロジェクト レベルの build.gradle ファイルに Google Maven リポジトリを追加します。
dependencyResolutionManagement {
repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
repositories {
google()
}
その後、次のようにアプリのモジュール レベルの build.gradle ファイルに 1.1.0-beta01 への依存関係を追加します。
dependencies {
implementation 'androidx.window:window:1.1.0-beta01'
. . .
それでは、コーディングをお楽しみください。
Reviewed by Mari Kawanishi - Developer Marketing Manager, Google Play