この記事は Takeshi Hagikura による Android Developers - Medium の記事 " Spot your UI jank using CPU profiler in Android Studio " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Android はアプリからフレームを生成し、それを画面に表示することによってユーザー インターフェース(UI)をレンダリングしています。アプリでスムーズなユーザー インタラクションを実現するには、各フレームがリフレッシュ レート以下でレンダリングされなければなりません。リフレッシュ レートはデバイスによって決まり、たとえば Pixel 6 は最大 90 フレーム / 秒をレンダリングできます。その場合、1 フレームを 11 ミリ秒以下でレンダリングする必要があります。アプリの UI レンダリングが遅いと、Android フレームワークはフレームをスキップせざるを得ません。これが起こると、ユーザーは視覚的な違和感を感じることになります。この現象は、ジャンクとも呼ばれます。
ジャンクの原因は、アプリや SurfaceFlinger (英語) など、さまざまです。この記事では、アプリに起因するジャンクと、それを見つけて修正するための Android Studio のツールに注目します。こういったツールを利用すると、リアルタイムにアプリを調査したり、記録したトレースを開いたりすることによって、アプリのパフォーマンスの問題を解決できます。
注 : この記事では、Android Studio Chipmunk 以降のアップデートされたジャンク検出 UI と、Android 12(API レベル 31)以降を実行する物理デバイスまたは Android エミュレータを使います。
以下では、GitHub のパフォーマンス サンプル リポジトリに含まれている JankStatsSample アプリを例に、CPU profiler を使ってジャンクの原因を見つける方法を説明します。
JankStatsSample
1. JankStatsSample を開き、アプリを実行します。
2. Android Studio 下部の Profiler タブを開きます。
Profiler
3. プロファイラ左側の + アイコンをクリックして新しいプロファイリング セッションを開始します。次に、プロファイラを実行するデバイス名とアプリのプロセスを選択します。
注 : デバッグ可能なアプリをプロファイルすることもできますが、プロファイル可能なアプリをプロファイルすることをお勧めします。デバッグ可能なアプリをプロファイルする場合、副作用としてパフォーマンスの負荷が非常に大きくなります。詳細については、 ドキュメント でプロファイル可能なアプリについてご確認ください。
4. CPU 列をクリックします。
CPU
5. System Trace Recording を選択して Record をクリックします。
System Trace Recording
Record
6. アプリを操作してデータを収集し、Stop ボタンをクリックします。
Stop
そうすると、Android Studio にジャンクが発生したフレームを含む Display セクションが表示されます。
Display
All Frames チェックボックスをオンにすると、ジャンクが発生していないフレームも表示するかどうかを切り替えることができます。
All Frames
マウスカーソルをフレームに合わせるか、フレームをクリックすると、詳細なフレーム情報を確認できます。All Frames チェックボックスをオンにすると、3 種類のフレームが表示されます。
Lifecycle チェックボックスをオンにすると、4 つの追加トラックの表示と非表示を切り替えることができます。
Lifecycle
次の 4 つのトラックがあります。
Application
Wait for GPU
Composition
Frames on display
これらは、Android Studio Bumblebee 以降で利用できます。各トラックの詳しい説明は、ドキュメントをご覧ください。
では、何がフレームのジャンクを起こしているのかを診断する方法を見てみましょう。
1. Janky frames トラックでジャンクが起きているフレームを選択します。すると、Display セクションで対応するライフサイクル データが、Threads セクションで対応するスレッドデータがそれぞれハイライト表示されます。
Janky frames
Threads
点線の Deadline は期限を示します。フレームの処理にかかる時間がこの期限を過ぎると、フレームでジャンクが発生したと見なされます。
Deadline
Android Studio の右ペインには、詳しい分析情報も表示されます。
2. アプリのメインスレッドの対応するトレースのセクションを見ると、「View#draw」に長い時間がかかっていることがわかります。
また、詳しい分析情報のペインでメインスレッドの状態を見てみると、スレッドの大半の時間がスリープ状態であることがわかります。
3. コードで View#draw を呼び出している場所を確認してみましょう。
View#draw
JankyView クラスで View#onDraw がオーバーライドされていることがわかります。
View#onDraw
override fun onDraw(canvas: Canvas) { simulateJank() super.onDraw(canvas)}
override fun onDraw(canvas: Canvas) {
simulateJank()
super.onDraw(canvas)
}
onDraw で呼ばれている simulateJank メソッドは、次のように定義されています。
onDraw
simulateJank
fun simulateJank( jankProbability: Double = 0.3, extremeJankProbability: Double = 0.02) { val probability = nextFloat() if (probability > 1 - jankProbability) { val delay = if (probability > 1 - extremeJankProbability) { nextLong(500, 700) } else { nextLong(32, 82) } try { // Make jank easier to spot in the profiler through tracing. trace("Jank Simulation") { Thread.sleep(delay) } } catch (e: Exception) { } }}
fun simulateJank(
jankProbability: Double = 0.3,
extremeJankProbability: Double = 0.02
) {
val probability = nextFloat()
if (probability > 1 - jankProbability) {
val delay = if (probability > 1 - extremeJankProbability) {
nextLong(500, 700)
} else {
nextLong(32, 82)
try {
// Make jank easier to spot in the profiler through tracing.
trace("Jank Simulation") {
Thread.sleep(delay)
} catch (e: Exception) {
ここで、simulateJank メソッドの中で Thread.sleep が呼ばれていることがわかります。これがわかりやすいのは、JankStatsSample アプリが意図的にジャンクをシミュレーションするように作られているからです。しかし重要なのは、ジャンクが起きているフレームの概要から詳しい分析情報までを確認でき、そこから実際のコードを見つけられることです。
Thread.sleep
注 : この例では Thread.sleep を呼び出していることが問題なのは明らかですが、実際にアプリのコードを最適化する際には、もっと難しい決断を迫られることになるでしょう。Microbenchmark ライブラリ (英語) は、行う変更が意図した効果を発揮するかどうかを測定する際に役立ちます。
注 : システム トレースには、アプリを構成するプラットフォームのコードやライブラリによってキャプチャされたさまざまなセクションが表示されます。多くの場合、ここに表示される情報は十分ではありません。この点を改善するには、カスタム トレースを追加します。カスタム トレースを追加する方法の 1 つは、 trace(“MySection”) { /* トレースに含める内容 */ } を追加することです。これは AndroidX Tracing (英語) ライブラリに含まれる命令です。
trace(“MySection”) { /* トレースに含める内容 */ }
たとえば、この例で使われている trace(“Jank Simulation”) { … } は、対応するスレッドのトレース セクションに表示されます。
trace(“Jank Simulation”) { … }
トレースの読み方とカスタム トレースを追加する方法の詳細は、 システム トレースの概要をご覧ください。
4. コードを変更し、onDraw で simulateJank メソッドを呼ばないようにしてみましょう。その後、まだフレームのジャンクが起きるかどうかを確認してみます。
override fun onDraw(canvas: Canvas) { // simulateJank() super.onDraw(canvas)}
// simulateJank()
今回は、システム トレースの記録を実行し直してアプリを操作しても、フレームのジャンクは確認できません。
トレースを保存して後から読み込むこともできます。これを行うには、次の手順に従います。トレースの保存と読み込みは、別のバージョンのトレースと比較したり、トレースを別の人と共有したりする際に便利です。
注 : システム トレースは、Macrobenchmark ライブラリ (英語) を使用して取得することもできます。
1. リアルタイム インタラクションでトレースを記録する方法については、手順 1 から 6 と同じ手順に従います。
2. 保存アイコンをクリックして記録をエクスポートします。
3. 後ほど、+ -> Load from file… を開き、前の手順でエクスポートしたファイルを選択して、保存したシステム トレース記録を読み込みます。
+
Load from file…
その後、保存したトレースを読み込み、リアルタイム インタラクションの記録と同じ方法でジャンクが起きているフレームを確認できます。
最後になりましたが、Android Studio Chipmunk 以降ではさらに精密なプロファイリング データを確認できるので、アプリのジャンクが一層見つけやすくなります。
CPU profiler の詳しい使い方は、ドキュメントに記載されています。Android Studio で Help -> Submit Feedback を開き、ツールの改善にご協力ください。
また、Google I/O のアプリ パフォーマンスの新機能セッション (動画/英語) では、フレームのジャンクを回避する方法をはじめ、パフォーマンスに関連するさまざまなトピックを取り上げています。
さらに、ユーザーのデバイスで実行されている本番アプリでジャンクを検出して報告する新しいライブラリもあります。詳しく確認してみたい方は、JankStats のドキュメントをご覧ください。
Reviewed by Mari Kawanishi - Developer Marketing Manager, Google Play
Google Play では、あらゆる規模のデベロッパーの皆さんが、その可能性を最大限に発揮し、さらなる成長を実現することに注力しています。
2018 年より開催している Google Play 主催のインディー ゲーム フェスティバルもその一例です。
第 5 回目を迎える今回のイベントでは、過去に継続的に本イベントに参加し、大きな成果を残してくださったデベロッパーの方々にさらにスポットライトを当てる為、「オフィシャル アドバイザー」という新しいプログラムを導入しました。
オフィシャルアドバイザーとは、過去のインディー ゲーム フェスティバルにおいて、 継続的に成果を残されたデベロッパーの方限定に、イベントの企画や運営にアドバイザーとして参加いただき、イベントを盛り上げるために一緒に「インディー ゲーム フェスティバルの顔」としてプロモーションを行っていただくプログラムです。
記念すべき第 1 回目のオフィシャル アドバイザーは、Odencat(オデンキャット)株式会社 代表取締役 Daigo Sato さんに決定いたしました。就任を記念して Daigo さんよりコメントをいただきました。
自分自身と Odencat の成長のきっかけは 2019 年の IGF 入賞でした。なにもないところから、なにかをはじめられる、そういう機会になるコンテストだと思います。永遠にこのコンテストに応募し続けようと考えていましたが、今回からはなんと IGF 側の人間としてこれからのクリエイターたちをサポートできるとのことで大変楽しみです。
今年のトップ 3 やトップ 10、特別賞の受賞者を決定するファイナル イベントは 9 月 3 日(土)15:00 〜開催予定です!
ファイナル イベント関連の最新情報を受け取るには、こちらからニュースレターにご登録ください。
皆さんのご参加をお待ちしております。
Posted by Tamao Imura - Developer Marketing Manager, Google Play
この記事は Dave Burke による Android Developers Blog の記事 " Android 13 Beta 3 and Platform Stability " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
2022 年 6 月 8 日、3 回目の Android 13 ベータ版をリリースしました。これでサイクルの最終フェーズに入り、作業の中心は機能の洗練とパフォーマンスの向上となります。Android 13 は、プライバシーとセキュリティ、デベロッパーの生産性、タブレットと大画面のサポートという中核テーマに基づいて構築しています。
Android 13 には注目すべきたくさんの機能があります。まずは、新しい通知パーミッションや写真選択ツールなどのプライバシー機能です。そして、テーマ対応アプリアイコン、アプリごとの言語サポートなどの生産性機能があります。さらに、HDR 動画、Bluetooth LE オーディオや MIDI 2.0 over USB といった最新の標準も導入されます。そのうえ、12L で行った新たなアップデートを拡張し、ツールを改善して現在使われている 2 億 7,000 万台のタブレットと大画面デバイスを活用できるようにしています。
ベータ版 3 で、Android 13 は プラットフォームの安定版 になります。つまり、デベロッパー API とアプリに関連するすべての動作が確定したことになります。皆さんが寄せてくださったフィードバックに感謝いたします。おかげでここまで来ることができました。今年予定されている正式リリースに向けてデベロッパーの皆さんがアプリを準備する作業の中心は、互換性テストと品質に移ります。
こちら (英語) から登録すると、Pixel デバイスで無線 (OTA) によってベータ版 3 を入手できます。すでに登録している方は、自動的に今回のアップデートを受け取ります。いくつかのパートナーのデバイスの一部でも Android 13 ベータ版を試すことができます。詳細は android.com/beta (英語) をご覧ください。アプリを準備する方法は以降で簡単に説明します。または、Android 13 デベロッパー サイトで詳細をご覧ください。
ベータ版 3 をもって Android 13 は プラットフォームの安定版 に到達しました。これは、正式な API レベル 33 SDK と NDK API を含め、アプリに関連するすべての動作と API が確定したことを示すマイルストーンです。ベータ版 3 以降では、プラットフォームが変更されないことがわかっているので、安心して互換性アップデートを開発し、リリースできます。
すべてのアプリとゲームデベロッパーは、最終リリース前にできるだけ早く最終の互換性テストを開始し、互換性アップデートを公開する準備をしてください。
特にすべての SDK、ライブラリ、ツール、ゲームエンジンのデベロッパーの皆さんは、今すぐテストを始めて、できる限り早く互換性アップデートをリリースすることが重要です。下流のアプリやゲームのデベロッパーが、皆さんのアップデートを受け取るまで作業できない可能性があるからです。そのため、互換性アップデートをリリースしたら、デベロッパーに向けてアナウンスしてください。
アプリの互換性とは、新しいバージョンのプラットフォームでアプリが意図したとおりに動作することを意味します。私たちはリリースごとにプラットフォームに必要な変更をし、プライバシーやセキュリティを改善したり、OS 全体のユーザー エクスペリエンスを向上させたりしています。これにより、アプリに影響が生じる可能性もあります。そのため、すぐにアプリをテストし、必要なアップデートをし、最終リリース前に互換性のあるアップデートをユーザーに公開することが重要です。これは基本的なことですが、Android 13 の新機能を探るユーザーに高く評価される重要な品質レベルです。
アプリの互換性テストは、Android 13 ベータ版 3 を実行しているデバイスに Google Play や他のソースから公開版のアプリをインストールするだけで行うことができます。そしてアプリのすべてのフローを試し、機能や UI の問題を探します。重点的にテストをするべき点については、動作の変更点を確認してください。特に注意すべき変更点は、以下のとおりです。
また、アプリのライブラリや SDK の互換性テストも忘れずに行ってください。問題を見つけた場合は、最新バージョンのライブラリまたは SDK にアップデートするか、デベロッパーに連絡してサポートを求めます。
現在のアプリの互換性のあるバージョンを公開したら、アプリの targetSdkVersion をアップデートするプロセスを開始できます。Android 13 をターゲットとしたアプリの動作の変更点を確認し、互換性フレームワークを使って問題をすばやく検知します。テストすべき変更点のいくつかを示します(これらは、targetSdkVersion を API 33 以降に設定したアプリのみに適用されます)。
Android 13 は、12L で導入されたタブレットの最適化がベースとなっています。そこでテストの一環として、アプリがタブレットなどの大画面デバイスで最適に表示されることを確認します。Android Studio で Android Emulator をセットアップすると、大画面機能をテストできます。または、Android 13 ベータ版パートナー (英語) の大画面デバイスを使うことができます。以下に、注意すべき点を示します。
Android 13 のタブレット機能とテスト内容の詳細は、こちら (英語) からご覧ください。
2022 年 6 月 8 日のベータ版リリースには、アプリをテストして Android 13 機能を試すために必要なものがすべてそろっています。Pixel デバイスを登録するだけで、無線 (OTA) でアップデートを入手できます。始めるには、Android 13 SDK をセットアップします。
いくつかのパートナーのデバイスでも、Android 13 ベータ版でアプリをテストすることができます。android.com/beta (英語) にアクセスすると、すべてのパートナーの一覧を確認できます。サポート対象のデバイスや、ベータ版 1 以降のベータ版ビルドについての詳細が記載されたサイトへのリンクも含まれています。登録やサポートはそれぞれのパートナーが担当し、ベータ版のアップデートも直接提供されます。さらに幅広くテストしたい場合は、Android GSI イメージ (英語) で Android 13 ベータ版 3 をお試しください。デバイスをお持ちでない場合は、Android Emulator でテストできます。
Android 13 ベータ版の詳細については、Android 13 デベロッパー サイトをご覧ください。
私たちは Android 13 の正式リリースに向けて着実に開発を進めています。Android 13 では、アプリごとの言語設定をはじめとする多言語サポートの改善が重要なテーマです。日本語に関連する機能も 2 つ含まれています。
Android 13 では TextView に新しい機能が追加され、文節を保ったまま改行することができるようになりました。これにより、より洗練された日本語テキスト表示が実現できます。
対象の TextView の lineBreakWordStyle 属性を "phrase" にすることで、文節による改行を設定できます。
lineBreakWordStyle
"phrase"
<TextView android:id="@+id/message_phrase" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:lineBreakWordStyle="phrase" android:text="@string/message" />
<TextView
android:id="@+id/message_phrase"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:lineBreakWordStyle="phrase"
android:text="@string/message" />
この動作を確認できるデモが Text サンプルに含まれています。
アプリ側から IME の未確定の変換候補を取得できるようになりました。例えば、「かた」と入力している途中では以下のように 5 つの候補を取得できます。
※ この機能の動作には最新の GBoard が必要です。
テキスト変換候補をアプリから取得する
アプリで検索機能を提供するとき、英語などのアルファベットで表記される言語においては「インクリメンタル サーチ(逐語検索)」または「Search as you type」と呼ばれる動作を提供するのが一般的です。例えば "Shoulder" という検索語句を入力するとき、一文字入力するごとに検索が行われ、単語をすべて入力しなくても目的の検索対象を見つけることができます。
日本語で逐語検索を提供しようとすると工夫が必要になります。IME で「かた」とひらがなを入力している間はアプリ内の漢字の「肩」を含むデータを検索しても一致せず、IME 上で漢字への変換を行って初めて意図した検索ができるからです。これに対応するために例えば連絡帳アプリであれば、あらかじめ読み仮名を登録しておき、ひらがな入力中はそちらから検索することで実現できるでしょう。しかし、漢字のデータしか存在しない場合、逐語検索を実現するのは困難だったのではないでしょうか。
Android 13 のテキスト変換候補 (Text Conversion Suggestions) API を使えば、逐語検索を実現できます。
まず、EditText (またはその小クラスである AppCompatEditText や TextInputEditText) を継承します。このカスタム EditText で onCreateInputConnection をオーバーライドして、カスタムの InputConnection を返します。このカスタム InputConnection の実装については後ほど述べます。
EditText
AppCompatEditText
TextInputEditText
onCreateInputConnection
InputConnection
class MyEditText @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = com.google.android.material.R.attr.editTextStyle) : TextInputEditText(context, attrs, defStyleAttr) { override fun onCreateInputConnection(outAttrs: EditorInfo): InputConnection { return MyInputConnection(super.onCreateInputConnection(outAttrs)) }}
class MyEditText @JvmOverloads constructor(
context: Context,
attrs: AttributeSet? = null,
defStyleAttr: Int = com.google.android.material.R.attr.editTextStyle
) : TextInputEditText(context, attrs, defStyleAttr) {
override fun onCreateInputConnection(outAttrs: EditorInfo): InputConnection {
return MyInputConnection(super.onCreateInputConnection(outAttrs))
レイアウト XML で対象の EditText の android:inputType 属性を textEnableTextConversionSuggestion に設定します。
android:inputType
textEnableTextConversionSuggestion
<com.example.android.tiramisudemo.ui.conversion.MyEditText android:id="@+id/edit" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text|textEnableTextConversionSuggestions" />
<com.example.android.tiramisudemo.ui.conversion.MyEditText
android:id="@+id/edit"
android:inputType="text|textEnableTextConversionSuggestions" />
カスタムの InputConnection を実装します。このために Android には InputConnectionWrapper というクラスが用意されています。setComposingText(CharSequence, int, TextAttribute) をオーバーライドして、実行中の変換候補にアクセスします。TextAttribute.getTextConversionSuggestions メソッドを使えば文字列のリストとして変換候補を取得できます。
InputConnectionWrapper
setComposingText(CharSequence, int, TextAttribute)
TextAttribute.getTextConversionSuggestions
class MyInputConnection( inputConnection: InputConnection?) : InputConnectionWrapper(inputConnection, false) { override fun setComposingText( text: CharSequence, newCursorPosition: Int, textAttribute: TextAttribute? ): Boolean { if (textAttribute != null) { val suggestions: List<String> = textAttribute.textConversionSuggestions // ここで suggestions (変換候補) から検索文字列を作る } return super.setComposingText(text, newCursorPosition, textAttribute) }}
class MyInputConnection(
inputConnection: InputConnection?
) : InputConnectionWrapper(inputConnection, false) {
override fun setComposingText(
text: CharSequence,
newCursorPosition: Int,
textAttribute: TextAttribute?
): Boolean {
if (textAttribute != null) {
val suggestions: List<String> = textAttribute.textConversionSuggestions
// ここで suggestions (変換候補) から検索文字列を作る
return super.setComposingText(text, newCursorPosition, textAttribute)
これで未確定の変換候補が取得できました。後はこの変換候補からそれぞれのアプリに即した検索クエリーを作って検索してください。注意する点として、この setComposingText で取得できるのはあくまで変換動作中のテキストです。EditText に確定済みのテキストが既に含まれる場合、連結する必要があります。それらの動作を含んだ詳細なコードは Text サンプルを参照してください。
setComposingText
Posted by Yuichi Araki - Developer Relations Team
この記事は Krish Vitaldevara による Android Developers Blog の記事 " Progress on initiatives to keeping Google Play safe " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
皆さんが前もって計画し、新しいツールを使ってビジネスを安全に構築することができるように、2022 年に紹介したプライバシーとセキュリティの取り組みについて最新情報 (英語) をお伝えします。これまでの数か月間で、以下をリリースしました。
Google Play を誰もが信頼できる安全なプラットフォームにするためにご協力いただき、ありがとうございます。
Google は Android 初級者向けに、コミュニティと一緒に学ぶ無料のオンライン プログラム「Android Study Jam」を 2022 年 7 月 19 日(火)から 8 月 19 日(金)の期間中に開催します。
本プログラムではオンライン学習ツール Pathways 上にあるネイティブ Android UI を開発するための最新のツールキット「Compose」について学習します。
お申し込みはこちら
プログラム期間 : 2022 年 7 月 19 日(火) ~ 8 月 19 日(金)
キックオフ セッション : 2022 年 7 月 19 日(火)16:00 ~ 18:00
Compose を初めてご利用いただく方にもご安心いただけるように、キックオフ セッションで使い方を説明し、いくつかのラボを解説つきで実施します。(本セッションは、アーカイブでもご覧いただけます。セッションに参加できなくても、プログラムに参加して学習することは可能です)
対象 : Android, Compose を学びたい大学生以上の方
費用 : 無料
実施方法 : オンライン
本プログラムに登録しプログラムを修了した参加者には、下記のノベルティをプレゼントいたします。
1 人ではなかなか思うように勉強が進まない方を支援することを目的とした、勉強会を開催するコミュニティを募集します。コミュニティが主催する勉強会に参加することで、1 人では解決しなかった課題などを解決しましょう。
コミュニティ主催の勉強会の情報は随時こちらのブログで更新していきます。また主催者となって勉強会を開催してくださるコミュニティのオーガナイザーの方には Google からの支援をおこないますので、こちらのフォームから申し込んでください。
皆様のご参加をお待ちしております。
dev-event@google.com
この記事は Alex Musil による Android Developers Blog の記事 " What's new in Google Play " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
今年の Google I/O では、Google Play でビジネスを継続的に拡大していただくことを目的として、皆さんをサポートする 3 つの主な方法に注力しました。
I/O のセッションですべてのアップデートを確認できますが、この記事では、ビジネスの推進に役立つ新機能の概要を紹介します。
(日本語字幕は YouTube の右下の設定から選択してください)
私たちはここ数年、SDK プロバイダ、アプリ デベロッパー、そして最終的にはすべてのエンドユーザーにとって、安全で優れた SDK を実現するためのツールに取り組んできました。
アプリの品質は、ユーザーのエンゲージメントや維持率から、Google Play ストアでのアプリの見つけやすさや宣伝まで、あらゆることに影響します。
Android Vitals 以外にも、開発ライフサイクル全体で役立つ新機能があります。
以上のリリースについて詳しく知りたい方は、アプリの品質に関するセッション動画をご覧ください。
(日本語字幕は YouTube の自動翻訳機能で日本語を選択してください)
Google Play ストア上で、新規ユーザーの獲得、既存ユーザーのエンゲージメントの向上、収益の拡大などビジネスの拡大に役立つ新しい方法を提供します。
1 つの定期購入に対して、課金期間や更新タイプが異なる複数のベースプランを設定できます。たとえば、毎月自動更新されるプラン、毎年自動更新されるプラン、1 か月のプリペイド プランなどです。1 つのベースプランに対して、定期購入のライフサイクル全体に対する複数のスペシャル オファーを作成できます。たとえば、期間限定の無料トライアルを提供する獲得オファー、定期購入ユーザーにプリペイド プランから自動更新プランに移行してもらうためのアップグレード オファー、定期購入のメリットをフル活用していないユーザーを維持するためのダウングレード オファー、などがあります。オファーは、新しいユーザーにアプローチしたり、コンバージョン率を上げたり、アップグレードを推奨したり、既存の定期購入ユーザーを維持したりする際にとても役立ちます。
以上の機能は、すべて最新バージョンの Play Billing Library 5.0 で利用できます。ビジネスを拡大するために、こちらで紹介したツールやその他のツールについて詳しく知りたい方は、“Power your Success with new acquisition, engagement and monetization tools.” のセッション動画をご覧ください。 (日本語字幕は YouTube の自動翻訳機能で日本語を選択してください)
Google Play エコシステムの繁栄のためにご協力いただき、ありがとうございます。皆さんの次のアプリのリリースを楽しみにしています。
この記事は Maru Ahues Bouza による Android Developers Blog の記事 " 13 Things to know for Android developers at Google I/O!" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
何かを作ってすぐ、スマートフォンだけでなく、テレビ、自動車、タブレット、スマートウォッチを含め、世界の数十億の人々に届けることができるプラットフォームは多くはありません。今年の Google I/O では、このチャンスを最大限に活用していただけるように、Android がたくさんの方法で皆さんをサポートしていることを説明しました。また、最新の Android 開発が、可能な限り多くの共通性をもたせることで、日常生活で使用するあらゆる場面に適したエクスペリエンスを短時間で、かつ簡単に作成できるようになっていることにも触れました。
ここでは、Android デベロッパーが知っておくべきことの上位 13 をまとめています。Jetpack Compose やタブレット、Wear OS、そしてもちろん Android 13 も含まれています! Android の I/O プログラムには、26 のテクニカル セッションと 4 つのワークショップが含まれています。さらに、もう 1 つの #TheAndroidShow (動画/英語) のエピソードとして、Android ライブ Q&A も開催しました。#AskAndroid を使って質問されたツイートはエキスパート チームがライブ配信 (動画/英語) で回答しました。
Android の最新 UI ツールキットである Jetpack Compose は、ダウンロード可能フォント、LazyGrids、ウィンドウ インセット、ネストされたスクロールの相互運用性など、さらに高度なユースケースを実現する API を提供し続けています。また、Live Edit、再コンポーズのデバッグ、アニメーション プレビューといった機能を搭載したツールもサポートします。詳細はブログ投稿をご覧ください。
Android Studio Dolphin ベータ版と Electric Eel Canary を使うと、より多くのことを短時間で行うことができます。Android Studio Dolphin には、Jetpack Compose や Wear OS 開発向けの新機能や機能改善が搭載されています。また、Logcat の操作も新しくなっています。Android Studio Electric Eel には、新しい Google Play SDK Index や Firebase Crashlytics との連携機能が追加されます。さらに、大画面でアプリをテストするための新しいサイズ変更可能なエミュレータや、コンポーズ可能な関数内のコードの変更を即座にデプロイできる新機能 Live Edit も提供されます。Android 開発ツールの新機能 (動画/英語) に関するセッションを視聴し、こちらの Android Studio I/O ブログ投稿をお読みください。
インストール直後のアプリのスピードは、ユーザーの維持率に大きく影響します。そのスピードを高めるために、ベースライン プロファイルを作成しました。ベースライン プロファイルを使うと、アプリやライブラリが Android ランタイムにコードパスの使用方法に関するメタデータを提供できます。ランタイムは、それを使って Ahead-Of-Time コンパイルの優先順位を判断します。コードを一切変更せず、ベースライン プロファイルを追加するだけで、アプリの起動時間が最大 30% 短縮されます!ベースライン プロファイルは、すでに Jetpack の内部で使われています。私たちは、Fragments や Compose といった人気のライブラリにベースラインを追加して、エンドユーザーのエクスペリエンスを向上させています。アプリ フレームワークの新機能 (動画/英語) を視聴し、こちら (英語) の Jetpack ブログ投稿をお読みください。
Google は全力を挙げてタブレットに対応しています。前回の I/O 以降、大画面の最適化に注力した Android 12L をリリースしました。Android 13 にはその機能改善がすべて含まれているだけでなく、さらなる機能追加も行われています。また、来年登場する Pixel タブレットについてもお知らせしました。すばらしい新ハードウェア、アップデートされたオペレーティング システムと Google アプリ、改善されたガイドラインとライブラリ、そして刺激的な Google Play ストアの変更がそろった今こそ、アプリを見直して大画面と Android 13 に対応する絶好のタイミングです。今年の I/O で 4 つのセッションと 1 つのワークショップ (動画/英語) を開催し、大画面のデザイン (動画/英語) から実装 (動画/英語) まで、詳しく説明しているのはそのためです。
Wear OS の最新アップデートが行われた今、ウェアラブルの開発でできることを再考できます。Jetpack Compose for Wear OS は現在ベータ版です。これを使うと、これまでよりも少ないコードで、美しい Wear OS アプリを作成できます。健康とフィットネス関連のデベロッパー コミュニティに大きなイノベーションをもたらすヘルスサービスも、現在ベータ版になっています。そして今回は、Google Pixel Watch を発表しました。Fitbit と Wear OS の長所を合わせ持つもので、今秋発売予定です。ウェアラブルの期待のアップデートの詳細については、Wear OS テクニカル セッション (動画/英語) をご覧いただくか、Jetpack Compose for Wear OS のお知らせ (英語) をお読みください。
Health Connect は、Google と Samsung が密接に連携して作り上げた新しいプラットフォームです。これを使うと、簡単にアプリ同士を接続して、ユーザーの健康とフィットネスに関するデータに安全にアクセスしたり、それらのデータをすべてのアプリとデバイスで共有したりできるようになり、少ない作業で多くのユーザーに簡単にアプローチできます。5 月 11 日より、Jetpack Health から Health Connect にアクセスできるようになりました。詳しくは、お知らせ (英語) を確認するか、I/O のセッション (動画/英語) をご覧ください。
Android for Cars と Android TV OS が、米国やその他の国で拡大を続けています。ネットワークに接続しながら運転したりテレビを見たりするユーザーが増える中、今年は自動車やテレビ向けの開発がさらに簡単になる新機能を導入します。詳しくは、2 日目 (5 月 12 日) に開催された、Android for Cars の新機能 (動画/英語) や Google TV と Android TV の新機能 (動画/英語) に関するセッションをご覧ください。
Android for Cars の Shortcuts API にアクセスできるデベロッパーを拡大することにより、Google アシスタントを搭載したさまざまなデバイスで、音声を使って簡単にアプリにアクセスできるようにしています。この機能は、Wear OS (英語) アプリでも今年中にサポートされる予定です。また、Smarter Custom Intents (英語) を使ってこのようなエクスペリエンスを簡単に開発できるようにしています。具体的には、手間がかかる NLU トレーニングなしに、アシスタントが ML を通してさまざまな形態のユーザークエリを検出できるようにします。加えて、モバイルで音声を使ってアプリを見つけやすくする改善もしています。まずは、Brandless Queries によって、ユーザーが明示的にアプリの名前を話さなくてもアプリを使用できるようにします。また、まだアプリをインストールしていない場合には、App Install Suggestions が表示されてインストールを提案します。こちらの機能 (動画/英語) は、5 月 11 日より既存の App Actions で自動的に有効になりました。
Google Play を活用して皆さんのビジネスを拡大する新しい方法について、Google Play の最新情報をご覧ください。特に重要なのは、ディープリンクや最大 50 個のカスタム掲載情報を作成できる機能、Google Play ストアに掲載したいコンテンツを送信できるデベロッパーを拡大する LiveOps ベータ版、そして柔軟性が増したサブスクリプション販売などです。以上の最新情報の詳細は、ブログ投稿 (英語) をご覧ください。
新しい Google Play SDK Index で、SDK がアプリに適切かどうかを評価しましょう。この新しいパブリックポータルは、特によく使われている 100 以上の商用 SDK が登録されており、SDK がアプリのどんなパーミッションを要求するのか、SDK を使っているアプリの統計、どのバージョンの SDK が最もよく使われているのかといった情報が公開されています。ブログ (英語) 記事を確認し、Google Play の新機能 (動画/日本語字幕付き) や Android 開発ツールの新機能 (動画/英語) についてのセッションを視聴しましょう。
Android のプライバシー サンドボックス (英語) は、無料のコンテンツやサービスへのアクセスを危険にさらすことなく、ユーザーのプライバシーを強化した新しい広告ソリューションを実現する仕組みです。先日、Android のプライバシー サンドボックスの初めてのデベロッパー プレビュー版 (英語) を公開したので、SDK ランタイムと Topics API をいち早く確認できます。これら新技術を予備テストし、どのようにソリューションに採用できるかを評価し、フィードバックを提供してください。
新しい Google Wallet を使うと、Android や Wear OS から日常的に使用する機能に高速で安全にアクセスできます。私たちは、以前 Google Pay Passes API と呼ばれていた Google Wallet API を強化し、汎用パスやパスのグループ化とミックス(イベント チケットとバウチャーをまとめるなど)のサポート、そしてバックエンド統合なしにアプリからパスを直接保存できる新しい Android SDK のリリースしました。詳細については、詳細なブログ記事 (英語) を読むか、セッション (動画/英語) をご覧ください。また、developers.google.com/wallet のドキュメントを確認することもできます。
Android 13 の 2 回目のベータ版が 5 月 11 日にリリースされました。新しい通知パーミッション、プライバシーを保護する写真ピッカー、近くのデバイスとペア設定したり、メディア ファイルにアクセスしたりするパーミッションの改善など、アプリをプライバシーとセキュリティの最新機能に対応しましょう。また、アプリ別の言語設定やテーマ対応アプリ アイコンなどの機能で、アプリを強化しましょう。HDR 動画や Bluetooth LE オーディオなど、最新の標準を使って開発することもできます。こちらから Pixel デバイスを登録すると、すぐに試してみることができます。Android 13 ベータ版は、パートナー製の一部のスマートフォンやタブレット、折りたたみ式デバイスでも利用できます。詳細は、developer.android.com/13 をご覧ください。
ここで紹介した内容は、今年の Google I/O の Android デベロッパー向けハイライトの一部にすぎません。ぜひ Android の新機能 (動画/日本語字幕付き) セッションを視聴して、Google I/O での Android テクニカル トラックの全容を把握してください。全部で 26 のセッションと 4 つのワークショップがあります。ぜひご利用ください!
この記事は Jolanda Verhoef , Anna-Chiara Bellini による Android Developers Blog の記事 " What's new in Jetpack Compose " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Jetpack Compose 1.0 がリリースされてからほぼ 1 年が経過し、その間にコミュニティによる積極的な採用が進んでいます。簡潔な Kotlin の構文と、UI についてすばやく簡単に検討できる宣言型アプローチは高く評価されています。
多くの企業が Compose を大々的に採用し、アプリの新機能や目玉機能を開発しています。たとえば、私たちはかなり早い段階から Compose の実験を始めていた Google Play ストアチームと密接に連携し、Compose を使うと開発が楽しくなるだけでなく、デベロッパーの生産性も上がることを発見しました。チームのメンバーはこのように話しています。「Play ストアのすべての新機能は、このフレームワークを使って構築しています。Compose は、アプリの開発速度向上やスムーズな導入に役立っています」。また、Twitter のチームも、アプリのさまざまな部分で Jetpack Compose を使っており、その成果について、「Compose を使うと、独自のコンポーネントをとてもに簡単に定義でき、API コントラクトの明示性、柔軟性、直感性が向上します」と述べています。Airbnb (英語) チームも Compose を採用し、「Jetpack Compose は技術戦略上欠かすことのできない部分です。これによって向上する生産性は計り知れません」と語っています。
うれしいことに、こういったチームが大規模で複雑な本番環境で慎重に Compose を評価した結果、UI 開発が楽しくわかりやすいものになっただけでなく、さまざまなエンジニアリング上のメリットを得ることもできました。そして、それは一例に過ぎません。なぜなら、Play ストアのトップ 1,000 アプリのうち 100 以上がすでに Compose を使っているからです。
このような緊密な共同作業や、幅広い Android コミュニティからのフィードバックに慎重に耳を傾けることは、常に私たちの開発プロセスの中核であり、ロードマップの実現に向けた鍵でもあります。現在は、新しい API や機能の改善、Compose での開発を今まで以上に簡単にする新ツールを通して、さらに高度なユースケースをサポートする作業を重点的に進めています。Compose が UI の構築方法を根本的に変革するものであることはわかっています。すばらしい見栄えの高性能なアプリを作成するには、考え方の転換が必要です。そのためのサポートとして、ガイド、高度なトピックに関するセッションや Codelab、詳細な解説動画をさらに公開します。以下は、新機能の紹介です。
2022 年 5 月 11 日、たくさんの機能や改善が含まれている Compose 1.2 最初のベータ版をリリースしました。
includeFontPadding をカスタマイズ可能なパラメータにすることで、Issue Tracker で特に要望の多かったバグ (英語) に対応しました。この値は、false に設定することをお勧めします。それにより、レイアウト内のテキストの配置をより厳密に調整できるようになります。今後のリリースでは、これをデフォルト値にすることを検討しています。値を false に設定するとアプリで問題が起きる場合は、前述の Issue でぜひお知らせください。また、includeFontPadding を false に設定した場合、lineHeightStyle パラメータを設定して Text コンポーザブルの行の高さを適合させることができます。これを組み合わせると、次のようになります。
includeFontPadding
false
lineHeightStyle
Text( text = myText, style = TextStyle( lineHeight = 2.5.em, platformStyle = PlatformTextStyle( includeFontPadding = false ), lineHeightStyle = LineHeightStyle( alignment = Alignment.Center, trim = Trim.None ) ))
Text(
text = myText,
style = TextStyle(
lineHeight = 2.5.em,
platformStyle = PlatformTextStyle(
includeFontPadding = false
),
lineHeightStyle = LineHeightStyle(
alignment = Alignment.Center,
trim = Trim.None
)
Compose 1.2 では、Compose にダウンロード可能なフォントが導入されます。複雑な設定を行わずに、Compose の新しい API を使って Google Fonts に非同期的にアクセスしたり、フォールバック フォントを定義したりできます。ダウンロード可能なフォントを使うと、プロバイダを通して複数のアプリで同じフォントを共有できるので、APK のサイズを小さく保ち、ユーザーのシステムの健全性を向上させることができます。
Android のテキストは、テキストを選択しやすくする拡大鏡ウィジェットを提供しています。今回、Compose がテキスト拡大鏡をサポートします。
選択ハンドルをドラッグすると、拡大鏡が表示されて指の下にあるものが見やすくなります。Compose 1.1.0 では、テキスト フィールドで選択をする際の拡大鏡が導入されました。今回の Compose 1.2.0 では、テキスト フィールドと SelectionContainer (英語) の両方で拡大鏡がサポートされます。この拡大鏡は、ビューの Android 拡大鏡の動作とも完全に一致するように拡張されています。
SelectionContainer
Lazy レイアウトがさらに進化します。グリッド API の LazyVerticalGrid (英語) と LazyHorizontalGrid (英語) が試験運用版を終了して正式版になり、独自のカスタム Lazy レイアウトを実装できる LazyLayout (英語) という試験運用版 API が新たに追加されます。これらの API の詳細については、I/O セッション動画 Compose の Lazy レイアウト (英語) をご覧ください。
LazyVerticalGrid
LazyHorizontalGrid
ビューシステムからスクロール可能なコンポーザブルを CoordinatorLayout に埋め込む際に、スクロール動作の相互運用性を確保できるようになります。これにより、折りたたみ可能なツールバーをはるかに簡単に設定できるようになります。この動作は、試験運用版の新しい rememberNestedScrollInteropConnection メソッドを呼び出した結果を nestedScroll 修飾子に渡すことでオプトインできます。この新機能のデモは、こちらのサンプルでご確認ください。
CoordinatorLayout
rememberNestedScrollInteropConnection
nestedScroll
Accompanist の insets ライブラリ (英語) が正式版として Compose Foundation ライブラリに追加され、WindowInsets (英語) クラスから利用できるようになりました。詳しくは、既存の UI に Compose を組み込む方法を説明したドキュメントをご覧ください。
WindowInsets
サイズ変更可能なレイアウトの設計、開発、テストを容易にするため、綿密に検討されたビューポートの一連のブレークポイントであるウィンドウ サイズ クラスをリリースしました。これはマテリアル 3 ライブラリ セットの一部で、現在、新しいライブラリ material3-window-size-class でアルファ版を利用できます。サイズクラスの詳細については、異なる画面サイズをサポートするためのドキュメントで参照できるほか、Crane でサンプル実装を確認することもできます。
material3-window-size-class
アプリのパフォーマンスの理解と改善に役立てていただけるよう、新しいパフォーマンス関連のツールやガイドにいっそう注力しています。この対応により、アプリが遅くなっている理由や場所を、はるかに簡単に理解できるようになります。
Android Studio Dolphin より、Layout Inspector でコンポーザブルの再コンポーズ発生頻度を確認できるようになります。再コンポーズの回数が異常に多い場合は、そのコンポーザブルを最適化する余地があることを示している可能性があります。さらに、Android Studio Electric Eel には再コンポーズのハイライト表示機能が追加され、どのコンポーザブルでいつ再コンポーズが発生したかを視覚的に確認できるようになっています。これらの新ツールについては、Android Studio の新機能ブログをご覧ください。
Compose は、根本的なレベルで UI の記述方法を変革します。そのため、アプリのパフォーマンス向上に役立ついくつかのベスト プラクティスがあります。新たに公開されたドキュメント ページには、最高のパフォーマンスを実現するための Compose アプリの記述方法や設定方法を掲載しています。I/O セッション動画 Jetpack Compose の一般的なパフォーマンスの落とし穴 (英語) では、Compose チームがパフォーマンス関連のよくある失敗例とその修正方法について説明します。
パフォーマンスは、私たちが引き続き重点を置いている領域です。現在、ツールやガイドの改善や追加に懸命に取り組んでいます。それと合わせて、これまでの作業に対するフィードバックもお待ちしています。Issue Tracker (英語) でバグを報告するか、KotlinLang Slack グループ (英語) で質問してください。
これまでの改善をベースに、Compose の効率アップを図る新ツールの最新情報をお知らせします。現在ベータ版の Android Studio Dolphin (英語) では、Compose 開発にすばらしい機能が追加されます。再コンポーズの回数に加え、すべてのアニメーションを一度に確認できる Animation Coordination や、複数の画面サイズに対応する開発に役立つ MultiPreview アノテーションなどの新ツールが導入されます。また、反復処理を高速化できるように、Android Studio Electric Eel Canary に LiveEdit を追加します。
完全な情報は、Android 開発ツールの新機能 (英語) に掲載されています。また、Compose に必要なツールのサポートを実現するため、ぜひフィードバックを共有してください。
もし Compose よりも優れたものがあるとすれば、それはもう 1 つの Compose です。Compose for Wear OS がベータ版になりました。Compose for Wear OS は、他の Jetpack ライブラリと同じ考え方に従っており、ベータ版になったことは、機能が完成して API が安定版になったことを意味します。そのため、本番環境に対応できるアプリの開発を始めることができます。さっそくブログ記事 (英語) を読んで、開発にとりかかりましょう!
Compose に関するたくさんのガイドを追加、刷新しました。
これらの新機能を私たちと同じ用に皆さんにも気に入ってもらえることを願っています。まだ Jetpack Compose を使ったことがない方は、速度やデベロッパーの生産性向上によるあらゆるメリットを享受できるように、チームや開発プロセスでどのように利用できるかをこのタイミングで学びましょう。ぜひ Compose を使ってみてください!
この記事は Jeanine Banks による Google Developers Blog の記事 "Helping you build across devices, platforms, and the world" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
嬉しいことに、再び Shoreline Amphitheatre で Google I/O を開催できました。世界中の皆さんとバーチャルで、そして直接お会いできるのは、すばらしいことです。
I/O は、私たちからデベロッパーの皆さんに宛てたラブレターのようなものです。デベロッパーの皆さんは、情報革命を実現する原動力です。それだけでなく、情報やアイデアをコードに変えて、学習、仕事、通信、娯楽などに活用できるようにしています。
数十年前のデジタル エクスペリエンス構築とは、パソコンを使える人々に向けて静的なウェブサイトを公開することでした。それが今では、さまざまなブラウザ、パソコン、スマートフォン、タブレット、バーチャル アシスタント、テレビ、ゲーム機、自動車、スマートウォッチなどで動作する超高速でインタラクティブなエクスペリエンスを指すようになっています。最高水準のプライバシーと安全性を確保しながら、これまで以上に高速な新機能が期待されています。
この複雑さと高まる期待に応えるため、皆さんが直面している課題を簡単に解決できるようにしたいと考えています。今年の I/O では、デベロッパー プロダクトの連携を向上させ、提供するガイドやベスト プラクティスを増やして一連のワークフローを最適化できるように、長期的な取り組みを始めることを発表しました。ここでは、デベロッパー基調講演でお話ししたポイントの一部を紹介します。
Android、ARCore、Chrome OS、Cloud、Flutter、Firebase、Google Play、Kaggle、機械学習、ウェブ プラットフォーム (動画) など、さまざまなプラットフォーム上の今年の新機能の全容を把握したい方は、デベロッパー基調講演か次のハイライト動画をご覧ください。(※上記全て英語)
初めてアプリを作ろうとしている皆さん、製品でできることを増やしたい皆さん、そして責任ある ML を簡単に活用したい皆さん。皆さんの前に広がる広大な領域には、たくさんのインスピレーションがあふれています。ぜひそのアイデアを現実のものにして、人々の生活を向上させましょう。
そこで、先日、インディー ゲーム デベロッパーの皆さんに向けた 2 つのプログラム (英語) を発表いたしました。
応募は 2022 年 7 月 1 日まで。
新しいゲームの発売が間近、または最近発売したタイトルがあるインディー ゲーム デベロッパーの皆さんのために設計されたプログラムです。
Indie Games Accelerator (英語) は、Google とゲーム業界の専門家とのネットワークを通して、開発、ローンチ、成長の成功を支援するための研修とメンターシップを提供します。
プログラムに選ばれたゲームスタジオは、2022 年 9 月から始まる 10 週間のアクセラレーション プログラムに招待されます。このプログラムは、70 カ国以上の小規模なゲーム開発者を対象とした、カスタマイズされたプログラムです。業界屈指の講師陣が主催するオンラインのマスタークラス、講演、ゲームワークショップなどを予定しています。
また、ゲームを次のレベルへと進化させたい世界中の情熱にあふれたデベロッパーの皆さんと出会い、つながる機会も得られます。
応募は (英語) 2022 年 7 月 1 日まで。
2021 年 7 月 1 日以降に Google Play ストアで公開されているインディー ゲーム を対象に、2022 年もインディー ゲーム フェスティバルを開催します。(オープンベータ版も対象となります)
ファイナリストは、オンライン上で開催されるファイナル イベントで紹介され、世界中のゲーム業界の専門家やプレーヤーにあなたのゲームを発見してもらうことができます。また、Google Play ストアの特設コーナーへの掲載や、Google Pixel 6 Pro などの賞品もご用意しております。
昨年に引き続き「学生部門賞」もご用意しています。(13 歳以上の学生の方が対象です)
皆さんからのご応募お待ちしております。
すべての応募は 2022 年 7 月 1 日 17:00 (日本時間) が締切となります。
なお、本イベントの最新情報、参加規約、ルールについては必ず随時 Web サイトをご確認ください。