この記事は Purnima Kochikar による Android Developers Blog の記事 "Celebrating 10 years of Google Play. Together. " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
Google Play 10 年のお祝いを、皆さんと共に
今週、私たちは Google Play の 10 年を祝っています。この 10 年間にわたり、デベロッパーの皆さんの創造性と、Google のグローバルなプラットフォームへの投資との相乗効果で、活気に満ちたアプリのエコシステムが生み出されました。190 か国以上の 25 億人のユーザーが毎月 Google Play を利用して皆さんのアプリやゲームを楽しみ、 Google Play は、これまでにデベロッパーの皆さんに $1,200 億ドルを超える収益 をもたらしました。この素晴らしい節目を誇りに思うとともに、皆さんのパートナーシップに感謝申し上げます。
これまでの歩みを振り返って
私は、Google Play の立ち上げからわずか数か月後の 2012 年にチームに参加しました。当時、Android のアクティブユーザー数が 1 億人から 4 億人に (英語) 増加したばかりでした。Android は、モバイル コンピューティングを全世界のあらゆる人々に広めるという大胆な目標を掲げた新参者でした。プラットフォームの機能、ツール、デザイン ガイドライン、商業的な能力など、ほとんどの面で競合プラットフォームに大きく遅れをとっていたため、当然ながら皆さんも成功の可能性には懐疑的でした。しかし、私たちは、公平でオープンなエコシステムが持つ大きな可能性を信じ、何より重要な点として、デベロッパーの皆さんの無限の可能性を信じて、前進してきました。私たちは、皆さんの成功へのコミットメントを原動力として、これからも歩み続けます。
当時、わずか 6 人だったパートナーシップ チームは、モバイル経済のもたらすチャンスをとらえ課題を克服するために、最善のサポートをするにはどうすればよいかを考えていました。しかしながら、とても多くの不確定要素がありました。世界中のユーザーにとって手の届く価格のデバイスで、デベロッパーの皆さんが思い描くアプリを提供できるだろうか?モバイル機器のデータ通信料は高額でデバイスの性能も低い中、人々はスマートフォンの小さな画面で動画を見るだろうか?モバイルゲームに満足して課金し、安心して利用してもらえるだろうか?雑誌や新聞などの紙媒体と同様に、アプリ内コンテンツを定期購読してもらえるだろうか?などの要素です。
私たちは、あらゆるステップで皆さんと共に課題に取り組み、時間をかけて皆さんのニーズを把握し、上質なアプリやゲームを開発できるよう支援してきました。また、β テストや段階的なロールアウトの機能、ユーザーレビューに返信できる機能などを通して、世界に広がる Google のユーザー コミュニティと共に、皆さんのアプリやゲームを進化させられるお手伝いをさせていただきました。
そうした初期の頃の、最も懐かしい思い出は、モバイル端末の利便性を活かす斬新な方法を考案して、私たちに刺激を与えてくれた各企業との協働です。これらの協働は、このテクノロジーの可能性について、改めて気づかせてくれました。Smule の事例は、Google Play 初期のサクセス ストーリーの 1 つです。この 10 年間、Smule の成長と繁栄を見ることができ、とても嬉しいです。
(日本語字幕は YouTube の自動翻訳機能で日本語を選択してください)
皆さんのアプリが人気を博し、持続可能なグローバル ビジネスへの転換を目指す中、Google はコマース プラットフォームへの投資を強化し、皆さんのビジネスの成長やマネジメントを支援しました。世界中の最も一般的で効果的な支払い方法を追加することで、アプリやゲームに対する支払いをスムーズに行えるようにしました。70 か国でサポートされている 300 以上の現地の支払方法へのアクセスなど、現地の支払方法の発見と統合に関する複雑さを解消しました。また、プレミアムから無料プレイや定期購入のビジネス モデルに至るまで、皆さんのビジネスニーズを予測しサポートするためにプラットフォームを進化させ、現在 Google Play は、 170 以上の市場でユーザーの安全かつシームレスな取引を支援しています。
インストールから Vitals まで、アプリやゲームのライフサイクル全体について、Google Play Console を通じて業界をリードするインサイトを提供し、ビジネスを効率的に管理できるよう支援しました。Smart Launcher の創業者である Vincenzo Colucci 氏が、Google Play のおかげで、彼が住みたい場所(南イタリアのマンフレドニアで、愛する人と一緒に)で、好きなこと(世界中の人々に影響を与えるアプリの開発)ができるようになったと述べたとき、私のチーム全員が涙したことを覚えています。彼の会社も、つい先日 10 周年を迎えたばかりです。
これまでのあらゆる段階で、皆さんは Google へさらに多くのことを求め、より広い視野で考えるよう促してくれました。これを受けて、プロダクトチームとエンジニアリング チームは、皆さんの素晴らしい開発をサポートするためのツールや機能を構築しました。皆さんからのフィードバックは、このプラットフォームでの成功をサポートするための新機能、リソース、プログラムのリリースに活かされています。皆さんのご協力のもとで、私たちは進化し続けています:
また、数社のパートナーとの協働を通じて、エコシステム全体に利益をもたらす新機能を開発してきました。たとえば、2015 年には Supercell と協力して不正行為の防止を支援し、Voided Purchases API をリリースしました。これにより、不正行為や還付金詐欺への対策を業界全体で改善することができました。同様に、ガンホー・オンライン・エンターテイメント株式会社 や NCSOFT などの日本や韓国のパートナーは、Rovio の初期の Angry Birds のような有料ダウンロードゲームをサポートするプラットフォームから、ライブサービスとしてのゲームを展開できる LiveOps プラットフォームへの成長を支援してくれました。メディア パートナーは、アカウントの一時停止や猶予期間などの機能を含む定期購入のプラットフォームを進化させるために、私たちを支援してくれました。興味深いのは、世界がロックダウン状態になった際に、私たちはこれらの機能を利用して、スポーツアプリのパートナーが定期購入ユーザーを維持するために役立てました。
10 年にわたるパートナーシップの中で、このような例は数え切れないほどありますが、ここでは過去 10 年の中で最も印象に残ったローンチを 10 件、ご紹介します。
※こちらのタイムラインはグローバルでのローンチ日を反映しています。日本でのローンチ日は異なる場合がございますので、ご了承ください。
皆さんのビジネスが成熟するにつれ、最も忠実なユーザーを維持して再びエンゲージできるよう、Google Play Points などのプロダクト機能の開発に投資してきました。このプログラムは 28 か国で 1 億人を超える会員を獲得し、2022 年後半にはさらなる拡大が予定されていることを大変誇りに思っています。また、プロダクト ロードマップやグローバル展開の計画について、よりデータに基づいた意思決定を行えるよう、ビジネスおよび技術的なインサイトを提供するコンサルティング サービスも設けました。これらのインサイトによって収益が数百万ドル増加し、プロダクトの方向性だけでなく M&A 戦略にも影響があったことを皆さんからお聞きしています。
そして何より、私たちのパートナーシップは、世界中のユーザーに有意義なアプリやゲームを提供し、新たな雇用を創出し、地域経済に貢献するビジネスを成功させてきました。米国だけでも、Google Play と Android は 200 万人以上の雇用創出に貢献してきました。私たちは、世界中の地域社会や中小企業にもたらした経済効果を、心から誇りに思っています。
将来を見据えて
次の 10 年に目を向けるとき、私たちが共に経験したこの前例のない 2 年間と、私たちのパートナーシップが多くの人々の生活に与えた圧倒的な好影響について、立ち止まって考えてみることは有益なことだと思います。Android と Google Play は、皆さんのビジネスを通じて、家族や大切な人をつなぎ、日常生活をサポートすることでユーザーの安全を守り、遠隔医療へのアクセスを早め、雇用を創出し、子どもたちの学習と成長を可能にしてきました。 このことを今、しっかりと認識し受け止めるために少し時間を取ってみましょう。
この数年間で、私たちは、安全で信頼できるエコシステムを育てるという私たちの共同責任と、すべての人がモバイルにアクセスできるようにするために、さらに多くのことを行う必要があるという点について、重要な教訓を得ました。将来のことを考える際に、私たちは次の 3 つの分野を最重視しています:
デバイスや画面のタイプを問わず、より優れたアプリやゲーム (英語) を提供できるよう支援することで、世界中の誰もが (英語) アプリやゲームがもたらす価値を体験できるようにします。Play ゲームサービスを通じてゲームのリーチを PC へと拡大し、Play Pass のような厳選されたアプリやゲームの定期購入を通じてユーザーに最も関連性の高いアプリやゲームを表示し、Play Offers や LiveOps を通じてユーザーがアプリやゲームの最も興味深い側面を見つけられるよう支援しています。
皆さんのビジネス上の意思決定を支援し、自らのビジネスモデルを進化させ (英語)、進化するプライバシーとセキュリティの状況下で、皆さんのビジネスを安全に成長させ、ユーザーに最高品質の体験を提供できるように、継続して Google Play のツールを進化させ続けます。
アプリやゲーム業界における多様性を向上させる取り組みに投資し、より多くのマイノリティ グループに属する創業者がビジネスを成功させる支援をすることで、すべての人のためのエコシステムを構築することにフォーカスします。2021 年に、あらゆるタイプのビジネスが成功できるよう、単一のサービス手数料モデルから移行し、今後も多様性あるアプリのエコシステムをサポートするために複数のプログラムを用意しました。
インディー ゲーム フェスティバルや Accelerator (英語) プログラムを通じて、経験豊富で成功した創業者が次世代のデベロッパーに投資してきたこと、また、Change the Game (英語) イニシアチブやアクセシビリティの取り組みが有意義な影響を与えていることから、Google は、エコシステムについて前向きな見方をしています。次の 10 年間も、アフリカやカリブ海のヘアスタイルの認知度を高めるための着せ替えゲーム、Frobelles を制作した 9 歳のアリッサとその母親のような多くの創業者 (英語) を、#WeArePlay (英語) ファミリーに迎えられることを楽しみにしています。
どこにいても、誰もがモバイルを使えるようにする、という私たちの大胆な目標に不可欠な存在でいてくださる皆さんに感謝します。私たちは長い道のりを歩んできましたが、まだまだこれからです。私たちは、皆さん一人ひとりに刺激を受け、感謝し、今後も皆さんの成功のために尽力し続けます。皆さんが次に何を創り出すのか、そして皆さんが私たちを駆り立て、実現する新たな地平を見ることを楽しみにしています。
感謝を込めて
Purnima Kochikar
この記事は Takeshi Hagikura による Android Developers Blog の記事 " Android Studio Chipmunk" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
今回は、Android Studio Chipmunk 🐿 安定版のリリースについてお知らせします。Android Studio は、Android アプリ開発の公式 IDE です。これは小さな機能リリースですが、最新の IntelliJ アップデートが含まれています。また、品質と安定性に多くの時間をかけており、このリリースだけで 175 以上の品質の問題に対応しています。
Android Studio の最新安定版を使いたい方は、さっそくダウンロード (英語) してください!
Android Studio Chipmunk のすべての新機能のリストを次に示します。
Jetpack Compose のデベロッパーが、Compose で作成したアニメーションを調査したりデバッグしたりできる機能です。この機能はこれまで試験運用版でした。コンポーザブル プレビューにアニメーションが記述されていれば、ある時間でのアニメーションの正確な値を調べたり、アニメーションの一時停止やループ、早送り、スロー再生ができます。この機能は特に、アニメーションとデザイン仕様をフレーム単位で比較する際に役立ちます。
現在の Compose アニメーション プレビューでは、AnimatedVisibility と updateTransition がサポートされています。今後、さらに多くの種類のアニメーションがサポートされる予定です。
Android Studio Chipmunk では、表示されるジャンク情報が更新されており、ジャンクの種類などが含まれるようになっています。想定期限と実際の期限も表示されるので、ジャンクの実際の原因を見つけるのに役立ちます。このジャンク情報は、API レベル 31(Android 12)以降の Android Emulator または実機を使う場合に表示されます。詳細については、こちらを参照してください。
Chipmunk では、Build Analyzer に新しい Jetifier チェックを導入しました。これにより、Jetifier フラグをオフにするとビルド時のパフォーマンスを改善できる場合に通知されます。
Jetifier フラグは、サードパーティ製ライブラリを AndroidX を使うように自動移行するもので、現在も大半の Android Studio プロジェクトで有効になっています。しかし、ほとんどのライブラリ エコシステムがネイティブに AndroidX をサポートするように移行されているため、このフラグをオンにしている場合、ビルドに不要なオーバーヘッドが追加されることになります。その場合、フラグをオフにすると一般的にビルド時間を 5~10% 短縮できます。
Android Studio Chipmunk での Android 固有の機能の数は少ないものの、このリリースには IntelliJ 2021.2 プラットフォーム メジャー リリース 😎 が含まれており、プロジェクト全体の分析、新しい強力なパッケージ検索 UI、ワークフローを高速化する IDE アクションの拡張など、多くの新機能が搭載されています。詳細はこちら (英語) をご覧ください。
Android Studio Chipmunk 🐿 は見逃すことができないアップデートです。短期間でのリリースでしたが、新しいバージョンの IntelliJ、IDE の品質やパフォーマンス、安定性改善に向けたたゆまぬ作業、そしてここで紹介した機能などが詰まっています。さっそくダウンロード (英語) してお試しください!
いつものように、気に入った機能や問題点、新機能の提案などのフィードバックは大歓迎です。バグや問題を見つけた方は、問題を送信してください。最新機能に関する情報をいち早く得るには、私たち Android Studio 開発チームを Twitter と Medium でフォローしてください。
この記事は Sameer Samat による Android Developers Blog の記事 " Exploring User Choice Billing With First Innovation Partner Spotify " を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
大切なデベロッパーの皆さんとの密接なパートナーシップと皆さんからのフィードバックを活用し、進化を続けてこなければ、私たちはここにいないでしょう。例えば、パートナーからのフィードバックや競争に対応することで、プラットフォームを利用するすべての開発者が成功できるよう手数料モデルを進化させ、現在では 99% のデベロッパーの皆さんが 15% 以下のサービス手数料の対象となっています。
最近、アプリストアの課金システムの選択肢をめぐる議論が活発になっています。Google はこの議論を歓迎し、本ブログで、Google Play のデベロッパーとともに取り組んでいるエキサイティングなパイロット プログラムを紹介したいと思います。
ユーザーが Google Play を選ぶ理由は、Google Play が安全なアプリ体験を提供することを期待しており、これらにはユーザーのデータや支払い情報などを保護するアプリ内課金システムも含まれます。Google Play の課金システムは、プライバシーと安全性に関する最高水準の基準を満たすように構築されており、ユーザーがアプリ内課金を行う際に、重要な支払いデータが危険にさらされることが無いと安心してもらえるようにしています。
Google Play からアプリをインストールする際に、引き続き Google Play の課金システムを利用する選択肢をユーザーに提供すべきだと私たちは考えています。また、代替の課金システムが、ユーザーの個人データや機密性の高い金融情報を保護する上で、同様に高い安全基準を満たすことが極めて重要だと考えています。
先日、韓国のユーザー向けに、Google Play の課金システムに加えて、追加の課金システム (英語) を選択できるようにしました。それを踏まえて、Google の理念 (英語) に基づいて、他の一部の国でも、ユーザーによる選択制の課金方式を試行することをお知らせします。
このパイロット プログラムでは、少数の対象デベロッパーが、Google Play の課金システムの隣に、追加の課金オプションを提供できるようにし、エコシステムへの投資能力を維持しながら、ユーザーにこの選択肢を提供する方法を模索することを目的としています。これは重要なマイルストーンであり、モバイル、デスクトップ、ゲーム機を問わず、主要なアプリストアにおいて初めての取り組みです。
Google は、Spotify を皮切りに(英語)、デベロッパーの皆さんとパートナーシップを組み、ユーザーが選択できる課金方法のさまざまな実装を探っていきたいと考えています。Spotify は、世界最大規模の定期購入のデベロッパーであり、グローバルに展開し、多様なデバイスのフォームファクタに対応していることから、私たちにとって最初のパートナーです。両社 は、ユーザーのアプリ内課金に革新をもたらし、さまざまなデバイスで魅力的な体験を提供することで、より多くのユーザーに Android プラットフォームを活用してもらうために協業していきます。
Spotify は、Google Play の課金システムを、現在の課金システムとともに導入することになりますが、最初のパートナーとしての Spotify からの視点は、非常に貴重なものです。このパイロット プログラムは、ユーザーによる課金方法の選択が、さまざまな国のユーザーや、さまざまな規模やカテゴリーのデベロッパーにとって有益かどうか、またどのように機能するかについての理解を深めるために役立つことでしょう。
Spotify のフリーミアムビジネス最高責任者 Alex Norström 氏は、次のように述べています。「Spotify は何年も前から、アプリのデベロッパーが自由にイノベーションを発揮し、公平な場で競争できるようにすることを目指しています。今回、Google と共に、開発者、ユーザー、そしてインターネットのエコシステム全体にとっての課金方法の選択肢と機会について、このようなアプローチを模索できることを嬉しく思っています。この協業が、他の業界にも利益をもたらす道を切り開くことを期待しています。」
このプロセスには時間がかかり、デベロッパー コミュニティとの密接な協力も必要になることを理解しています。しかし、このように最初の一歩を踏み出せたのは喜ばしいことだと感じており、今後数か月の間にさらに詳しい内容をお知らせしていく予定です。
この記事は 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