A | B | C | D | E | F | G | |
---|---|---|---|---|---|---|---|
1 | Session title | Speakers / スピーカー | Description | Intended Audience / 受講対象者 | Session format | Language | Category / カテゴリ |
2 | いいね問題に対する様々な解決策とトレードオフ | Haruhiko Takada | Android アプリ開発をしていて、いわゆる「いいね問題」で悩んだ経験のあるエンジニアは多いと思います。ある画面で行われた更新を別の画面に抜けなく反映するためには、注意深い設計が必要になることを俗に「いいね問題」と呼びます。名前の由来は SNS アプリの投稿詳細画面で「いいね」を付けたあとに投稿一覧画面に戻ったら、該当の投稿には「いいね」が付いている必要があるという話から来ていると思われます。
このセッションでは「いいね問題」に悩む Android エンジニアに向けて、技術選定の観点といくつかの解決策を説明します。画面や機能にまたがるデータの種類や件数、それぞれの関係性はアプリによって大小様々なので、それらも踏まえてそれぞれの解決策のトレードオフを説明します。それによって各社の Android アプリ開発チームの技術選定の助けとなることを目指します。 技術選定の観点は以下のものを説明します。 - 適切な UI/UX - 変化に対応するための開発工数 - プロセスキルからの復帰対応 - チーム開発における情報共有 解決策としては、呼び出した Activity, Fragment から結果を受け取り、その内容に応じて表示を更新する手法がまず考えられます。しかし対象となるデータを更新および表示する画面が多くデータの関係性が複雑な場合は、認知負荷が高くなり更新抜けを防ぐことが難しくなります。そこで画面や機能にまたがるデータは信頼できる唯一の情報源として格納し、各画面はそれを更新監視し UI に自動反映する作り方が考えられます。このセッションでは、その格納方法をデータの生存期間別に以下の3種類に分類して説明します。 - Fragment や Compose で画面遷移するケースで、 Activity に紐付く ViewModel にメモリキャッシュとして持たせる - アプリのプロセスが生存している間は保持されるメモリキャッシュに格納する - SQLite などに永続化して格納する | 「いいね問題」に悩む Android エンジニア | 40 minuites | 日本語 / Japanese | アプリアーキテクチャ (App Architecture) |
3 | Sceneview-AndroidによるAndroid上での3D/ARモデルの簡単な表示 | Yujiro45 | このセッションでは、Sceneview-Androidライブラリを使用してAndroidアプリケーションでの3D/ARモデル表示について詳しく解説します。Google FilamentとARCoreの統合により、高度なグラフィックスと拡張現実体験を実現する方法に焦点を当てます。特に、ライブラリの機能と利点を紹介しつつ、高度な視覚化手法の使用事例を探ります。実装から最適化までの手順や、最適なパフォーマンスを実現するためのベストプラクティスについても解説します。 | - 基本的なAndroidアプリケーション開発の知識を持つ方
- 3D/ARモデルをAndroidアプリで簡単に表示したいと考えている開発者やデザイナー - Google FilamentやARCoreなどのグラフィックスや拡張現実技術に興味を持つ方 | 40 minuites | 日本語 / Japanese | Kotlin |
4 | Kotlinで作られたゲームエンジン、KorGEの紹介 | Yujiro45 | このセッションでは、Kotlinで開発されたゲームエンジンであるKorGEについて紹介します。KorGEのアーキテクチャや機能、開発環境のセットアップ方法から、シンプルなゲームの作成方法までを解説します。さらに、高度な機能や拡張性、実際の利用事例についても触れ、KorGEを活用したゲーム開発の可能性を探ります。 | - Kotlin言語に関心を持つ開発者や学生
- ゲーム開発に興味を持つプログラマーやデザイナー - Kotlinを使用してゲームを開発したいが、適切なツールやエンジンを探している方 | 40 minuites | 日本語 / Japanese | Kotlin |
5 | This session submission has been withdrawn. | ||||||
6 | Compose migration automated screenshot testing pipeline for zero UI regression | AmniX | I want to show the paypay's risk free compose migration screenshot testing pipeline which will fill the developers with a confidence to migrate to compose without a UI regression or issues while migrating to compose.
This pipeline ensure the pixel perfect migration to compose without annoying business. | The android developers who aims to migrate to compose but are not able to do it because of the UI regression risk. | 40 minuites | English | Jetpack Compose |
7 | How I brought Mistral AI to the Kotlin Multiplatform world | Julien Salvi | Embark on a journey with me as I dive into the fascinating world of Mistral AI's public API. Intrigued by its generative AI capabilities, I set out to craft a Kotlin Multiplatform SDK, enabling seamless app development across Android, iOS, Desktop, and Web platforms. With the powerful combination of Compose Multiplatform and Kotlin Ktor, I brought the library to life accompanied by a conversational assistant app. Join me as I recount the challenges and lessons learned throughout this vibrant side project. | People interested in knowing more in Kotlin Multiplatform (KMP) and Compose Multiplatform. | 40 minuites | English | クロスプラットフォーム(Cross-platform Development) |
8 | API Design with Compose | Julien Salvi | From our basic experimentations with Jetpack Compose to pushing the first Composable to Production with our brand new design system, it took us roughly 2 years! Yeah 2 years might be long you would say but wasn't for us!
This talk will mainly focus on how we design the API of our new Compose Design System, which is not based on Material, with the different iterations we experimented along the way. You will see the importance of a good communication between the tech and design teams and the impact the migration might have on the QA when automation tests are already in place. In the end, you'll have a glance at how we introduce Compose in our production app 🚀 | People interested in building a design system with Compose with a smooth API to make it easy to integrate in existing applications. | 40 minuites | English | Jetpack Compose |
9 | Streamlining Offline and Client-Side ML Development with MediaPipe | Ayushi Gupta | MediaPipe is a powerful framework from Google that simplifies building machine learning pipelines for mobile and edge devices. This session explores how MediaPipe empowers developers to create rich interactive experiences that function seamlessly without an internet connection.
Unlocking the potential of offline and client-side ML with MediaPipe: Pre-built ML functionalities: MediaPipe offers a library of pre-trained models for common tasks like pose estimation, hand tracking, face mesh, and speech recognition. Reduced development time: Leverage ready-to-use components, eliminating the need to train custom models from scratch. Lightweight and efficient: Designed for on-device processing, ensuring smooth performance even on resource-constrained devices. Offline capabilities: Process data entirely on the device, enabling applications to function without an internet connection. The talk will showcase a compelling example: Building an FAQ chatbot that utilizes MediaPipe for offline speech recognition. This demonstration will unveil how to integrate speech models with chat interfaces, empowering users to interact with information even without a network connection. Join this session to learn: The core functionalities and benefits of MediaPipe for developers. How to leverage pre-built pipelines for common machine learning tasks. Strategies for building efficient and interactive client-side ML applications. Practical considerations for deploying offline ML solutions with MediaPipe. | Android, AI/ML (Basic) | 40 minuites | English | その他(Other) |
10 | スムーズな価格改定を実現するためのベストプラクティス | Dai Miyamoto | 近年物価上昇など様々な外部要因により、サービスの開発費や運用維持コストが著しく増加しています。
こうした状況下で、モバイルアプリ開発者にとっても収益確保と事業継続のための価格改定はもはや避けられない選択肢の一つとなりつつあります。 一方、価格改定はユーザー離脱のリスクを伴うため、慎重な検討と適切なコミュニケーションが不可欠です。 本講演では、Android定期購読システムの価格改定に関する包括的なガイドを提供するとともに、実際に私が携わっているサービスで経験した内容を基に、円滑な価格改定を実現するためのベストプラクティスについて解説します。 発表予定の内容 ・新規定期購読ユーザーの価格変更のタイムライン ・既存定期購読ユーザーの価格変更における「オプトイン」「オプトアウト」の違い ・既存定期購読ユーザーの価格変更のタイムライン ・価格変更におけるユーザーコミュニケーションのプラクティス ・どのように価格変更をテストすれば良いかのプラクティス ・(時間があれば) iOS定期購入システムとの違い | ・モバイルアプリの定期購入プランを提供している開発者
・今後モバイルアプリの定期購入の導入や価格改定を検討している開発者 | 40 minuites | 日本語 / Japanese | 開発ツール&サービス(Development Tools and Services) |
11 | Crime Scene InvestiGITor | Benjamin Kadel | THERE HAS BEEN A MURDER!
... (Or whatever the code version of a murder is... like breaking unit tests, a bug maybe?... I dunno!) Together, we will learn how to become a professional and revered investiGITor, who will be able to sniff out and solve any version control offence with the ease and panache of a seasoned detective! Version control software is often a mysterious black-box that we HAVE TO interact with in order to successfully collaborate with others. But what if it doesn't need to be a confusing & complicated enigma? You will learn to probe into the dark recesses of Git and understand its inner workings by learning how to carry out many tasks that you will undoubtedly need to perform at some point in your career. For example: * Ever needed to safely remove a secret that you accidentally stored in the repository? * Ever had your app break, not know why, and then needed to quickly hunt down the exact commit where a bug was introduced? * Ever needed to travel back in time, through history, to stop a crime before it even happens...(sort of)? ...All these things and a bunch more useful & interesting, lesser-known ways to become a masterful git detective and truly understand the most important tool in a developer's arsenal. So come have a little fun with me in this talk, bring the bugs to justice, solve the case of the naughty commit & become a hero by defending the integrity of your codebase! | Audience should have basic Git knowledge already, however all levels of audience knowledge will be catered for, but the perfect level is someone that uses git for their VCS but at a basic level and maybe intermediate level | 40 minuites | English | 開発体制(Development Process) |
12 | ML KitとVision APIで次世代のOCRアプリ開発をしよう! | akkiee76 | 2024年2月末、GoogleはAndroidアプリ用のドキュメントスキャナ機械学習APIである「ML Kit Document Scanner API」を、アプリ開発者向けに提供開始しました。このセッションでは、ML Kit Document Scanner APIとVision APIを組み合わせたOCRアプリを開発する方法について解説します。
ML Kit Document Scanner APIを利用することで、モバイルアプリケーションやウェブアプリケーションに文書スキャン機能を簡単に組み込むことができます。APIの特徴としては、ユーザーにカメラの権限を要求することなく利用することができ、画像中のテキストや要素を検出し、文書をデジタル形式に変換するUXを提供することができます。 また、Vision APIのテキスト認識機能を利用することで、OCR機能を実現することができます。Vision APIは他にもラベル検出、顔検出、ランドマーク検出といった分析APIを提供しており、分析の精度が高い特徴があります。このセッションでは、テキスト認識だけでなく、Vision APIの各機能や最近リリースされた生成AIとの精度比較について解説します。 このように、ML KitとVision API組み合わせることで、サーバーレスなOCRアプリを簡単に作ることができます。例えば、レシート、名刺、領収書のスキャンなど、様々なアプリに利用することができます。近年OCRアプリは、ビジネスや個人の生活をサポートするため、需要が高まっていることから、開発者にとっても魅力的な分野となっており、明日からすぐ実装ができるよう実装方法を詳しく紹介します。 ML KitとVision APIを組み合わせたサーバーレスOCRアプリの開発は、ユーザーに魅力的なUXを提供できる点で非常に魅力的です。また、開発者にとってはスキルアップや新たなビジネスチャンスを生む可能性があり、非常に有望な開発分野といえるでしょう。 具体的には、以下のトピックについて紹介する予定です。 - ML Kitの概要と各機能の紹介 - ドキュメントスキャナの利用方法 - ドキュメントスキャナをアプリに組み込む手順 - ドキュメントスキャナの実装上の問題点と解決方法 - Vision APIの概要と各分析APIの紹介 - テキスト認識v2を利用したスキャン機能の利用方法 - スキャンしたドキュメントを解析する方法 - テキスト認識の実装上の問題点と解決方法 - Vision API利用時の注意点と個人情報の扱い方 - Vision APIと生成AIによる分析精度の差異 | - ML Kitの使い方を知りたい人
- ML Kitを使ってアプリを開発したいと考えている人 - Vision APIに興味のある人 - Vision APIを利用したいと考えている人 - Androidアプリをこれから開発したい人 - サーバレスアプリの開発に興味のある人 | 40 minuites | 日本語 / Japanese | 開発ツール&サービス(Development Tools and Services) |
13 | Androidをとりまく地図ライブラリの共通的な機能と注意点 | hiroaki | 世の中のアプリを見渡すと地図機能を持つものがよく見られるようになってきました。ヘルス系のログサービスやライドシェアサービスなど、位置情報をグラフィカルに表示する需要は高まっています。
Androidで地図を表示したい場合には、Google Map Sdk、Mapbox、Osmdroid等のようなライブラリの選択肢があります。実際の業務でこれらのライブラリを導入しようということになったときには、ライブラリを使ってどういったことができるか知っておく必要があります。またアノテーションという概念やGeoJSONといったフォーマットなど地図独特のノウハウもあり、複雑な地図機能を実現するためにはぜひとも使いこなしたいところです。 またAndroid特有のトピックとしてJetpack Compose対応があります。これらのライブラリは旧来のAndroid Viewを前提に作られており、Compose対応のアプリに導入する際にも注意事項があります。 本セッションでは、それぞれの地図ライブラリに共通する一般的な機能の紹介と、業務のアプリに導入することを前提とした注意点等をご紹介します。 本セッションで得られる知見 - 地図ライブラリの基本的な使い方 - マーカーにComposable関数を使って画像を差し込む - クラスタリングで多すぎるマーカーを集約する - Compose化されたアプリで地図SDKを使う - 端末の現在位置の利用とそのデバッグ方法 - Geo jsonを使う - パフォーマンスの懸念事項と対策 - 運用面の注意点 話さないこと - 地図ライブラリに共通に見られる技術的な話題にとどまり、サービスのメリット・デメリット比較などの機能比較は控えます。 | - これからAndroidアプリに地図機能の導入を検討されている方
- すでに地図機能を使っているが、もっと高度な機能を使いこなしたい方や、コードの保守性を上げたい方 - すでに地図機能を使っているが、Composeへの移行を検討している方、またCompose対応のアプリに地図機能を導入したい方 | 40 minuites | 日本語 / Japanese | その他(Other) |
14 | Working with SELinux on Android | theimpulson | SELinux is a security feature of the Linux kernel that provides support to enforce access control security policies to enforce MAC (Mandatory Access Control).
Since Android 5.0, SELinux has been a core part of Android and is enabled by default. Developers when working on a third-party OS based on AOSP (Android Open Source Project) or developing a system application that uses privileged APIs such as OS Updater need to write appropriate security policies to ensure that the OS and apps work properly but also that it not weak which will allow security vulnerabilities. This talk will introduce what is SELinux and how Android developers can work with it. Real-world projects will be used as examples which include a third-party OS based on AOSP (LineageOS) for a smartphone and a SystemUpdater app. | The audience should have basic knowledge of Android development. Familiarity with AOSP development is a plus but not required. | 40 minuites | English | Android Framework |
15 | Building a Third-party App Store on Android with MAD | theimpulson | Over the years Android has added a lot of APIs that allow developers to build great third-party app stores on Android. Third-party app stores allow developers to cater to a specific audience and provide the intended experience they want to deliver. Companies use the app stores as a means of updating their own published applications for specific devices.
With the latest Android 14 (stable) and Android 15 (beta), there have been lots of new APIs that improve the experience of third-party app stores more than ever. This talk with showcase how Android Developers can easily build third-party app stores on Android with MAD (Modern Android Development) using the Jetpack libraries and APIs. Real-world examples of third-party FOSS app stores will also be shared to allow developers as references. | Familiarity with the basics of Android development is a required. | 40 minuites | English | Jetpack |
16 | データに基づく意思決定を支える、Google Analytics for Firebase のイベント送信 | Haruhiko Takada | アプリサービスの運営においては、ユーザの操作や画面遷移などのイベントを適切に送信し、データ分析できる体制を整えることが重要です。しかし、イベント送信の実装には注意が必要です。不適切な実装の場合、分析時に必要なデータが欠損し、効果的な意思決定が困難になる可能性があります。
このセッションでは、これから新たに Android アプリを開発したり、今後データ分析を強化したい Android エンジニアに向けて、以下のことを説明します。具体的な技術として Google Analytics for Firebase と BigQuery を取り上げます。このセッションを通して、データ分析という観点から、事業貢献を加速する Android エンジニアを増やすことを目指します。 - 予備知識としてイベントはどのように BigQuery に保存され、どのような SQL やツールで分析できるかを解説 - ユーザ登録、ログイン、ログアウト、退会でイベントに紐付くユーザ ID を適切に設定することで、バックエンドのデータと結合できるようにする - 画面遷移の方法 - Activity, Jetpack Navigation, Compose Navigation それぞれに合わせた画面遷移イベントの送信方法 - iOS / Android でイベント名を合わせるための仕組み作り(Kotlin Multiplatform によるコード共通化やコード自動生成を用いたソリューションを紹介) - イベント送信実装抜け防ぐための仕組み作り(Konsist や detekt を用いたソリューションを紹介) - PdM などモバイルエンジニア以外とのデータ分析方法についてのコミュニケーション体制構築 | これから新たにアプリを開発する Android エンジニア
今後データ分析を強化したい Android エンジニア データ分析に必要な Google Analytics for Firebase のイベントが送られていなかったり、iOS と Android で違うイベントが送られていることに悩む Android エンジニア | 40 minuites | 日本語 / Japanese | 開発体制(Development Process) |
17 | Demystifying CTFs - manipulating Android apps | tatocaster | This session dives into the exciting world of Capture the Flag (CTF) competitions, specifically focusing on the challenges related to Android security and application manipulation.
We'll embark on a journey to: Uncover the secrets of CTFs: Gain a clear understanding of CTFs, their format, and the skills they test. Demystify Android vulnerabilities: Explore common security weaknesses found in Android apps, equipping you to identify potential risks. Master the art of manipulation: Learn practical techniques for manipulating Android applications, including basic decompilation, analysis, and exploitation (conducted ethically within a controlled environment). | Intermediate + | 40 minuites | English | Security / Identity / Privacy |
18 | コードレビューマスタリー 〜ガイドラインとメトリクスを活用したチームの成功 | akkiee76 | 皆さんのチームでは「定量的なコードレビューが行えない」「レビューアーの育成が進まない」といったコードレビューに関する課題はありますか?実際にコードレビューの場面では、チームによって様々な課題があると思います。本セッションでは、これらの課題へのアプローチとして、レビューガイドラインを利用した定量的に行えるコードレビューの手法を紹介します。
このセッションで紹介するコードレビューガイドラインは、Google's Engineering Practices Documentationをベースに独自に作成し、実際に運用した実績のあるガイドラインです。中でもコードレビューにおける重要な観点として、設計、理解容易性、命名、コードスタイル、機能要件、ドキュメント、テストの7つの観点を設けています。これらの使い方をKotlinのアンチパターンコードやAndroid開発におけるデザインパターンで知ることにより、定量的にコードレビューする方法を学ぶことができます。 また、発展編してこれらの観点によるレビューコメントをベースに技術力を可視化するKPI戦術も紹介します。この手法によってチームメンバーの弱点を可視化することができるので、育成のアプローチやオンボーティングの指標として活用することができます。 他にも、コードレビューを支援するツールであるPR-AgentやCodeRabbitを活用したAIコードレビューの手法やコードレビューを効率化するプロンプトを紹介します。AIコードレビューを導入し属人的なコードレビューの前に実施することで、コードレビューでの手戻りを削減し、生産性の向上に繋げることができるはずです。 このセッションに参加することで、プロダクト開発に効果的なコードレビュー戦術を学び、チームの技術力向上に効果的かつ実践的な手法を得ることができるでしょう。 | - コードレビューの方法が分からない方
- レビュアーの育成が進まないお悩みをお持ちの方 - 定量的なコードレビューの方法を知りたい方 - チームメンバーの技術育成に悩んでいる方 - コードレビューで品質が担保できない方 - AIによるコードレビューで生産性を向上させたい方 - コードレビューのマインドセットを知りたい方 | 40 minuites | 日本語 / Japanese | 開発体制(Development Process) |
19 | API29以上でのVisualRegressionTestとE2Eテストについて | sefwgweo | 自身がVisualRegressionTestを導入・運用していく中で2023年頃が転機でした。
最新のAPIレベルが34になろうという時に、VisualRegressionTestのAPI29以上での実装例が見つけられませんでした。 このセッションでは、どのようにしてAPI29以上でもVisualRegressionTestを実装出来るようになったのかを、セットアップ方法・アプリの実装・CI連携まで含めて紹介します。 VisualRegressionTest導入検討材料となれば幸いです。 また、弊社で運用している各種E2Eテストについても導入時の苦労や実装のコツ等を紹介予定です。 | - VisualRegressionTestに興味がある方
- 様々な理由でVisualRegressionTestを導入したいが出来ていない方 - E2Eに興味がある方 | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
20 | 数百画面をAndroid ViewからJetpack Composeに移行するプロジェクトをリードする | Masamichi Ueta | Jetpack Composeは革命的な宣言的UIフレームワークです。多くの企業が既存のAndroid ViewからJetpack Composeへの移行を考えていると思います。
私は今、日本最大のフリマアプリである「メルカリ」を通して全国のお店で利用できるスマホ決済サービス「メルペイ」で、既存画面のAndroid ViewからJetpack Composeへの移行プロジェクトをリードしています。 この講演では、何百ものAndroid Viewベースの画面をJetpack Composeに移行するプロジェクトのベストプラクティスを共有します。 | ・既存のAndroid ViewベースのアプリをJetpack Composeへ移行していきたい方
・宣言的UIフレームワークの有効性を信じていて、社内でJetpack Composeへの移行プロジェクトを立ち上げたいが進め方がわからない方 ・Mobileアプリ開発の大規模なリファクタリングプロジェクトをリードするためのノウハウを知りたい方 | 40 minuites | 日本語 / Japanese | @Experimental ソフトスキル(@Experimental Soft skills) |
21 | カオスなComposable関数に秩序をもたらす | mikan | Jetpack Compose が登場したことにより効率的にUIを構築できるようになりましたが、
膨大な数のパラメータを持つ親コンポーネントを作りだしてしまうような新たな問題も出てきています そういった問題を解消するためにユーザーインタラクションをモデル化してみてはどうかという提案をします 合わせてスクリーンレベルやUIレベルで状態やイベントをどういったモデリングが可能なのかも検討します 以下がセッションで予定している内容です。 # Composable関数が抱えがちな問題 - 膨大な数のパラメータ - 苦痛なバケツリレー # 画面を構成する要素を再考する - ScreenState - ScreenEvent - UiState - UiEvent - StateにもEventにもなりうる例: Error # 画面をモデリングしよう - ステートマシンを描く - イベントの階層構造を見つける # 実装編 - モデルを保持する - StateFlow vs SharedFlow - モデルを公開する - モデルを利用する --- keyword - MVVM - MVI - StateFlow - SharedFlow - state machine - event stream - functional reactive programming | Composable関数のパラメータ数が膨大になっていて困っている方
Compose向けのViewModelの実装に悩んでいる方 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
22 | A New Era of Testing | Marcel Schnelle | JUnit 5 is the latest iteration of the popular unit testing framework and has been around for seven years. However, adoption in the Android ecosystem has historically been somewhat slow: Even the most recent additions to the testing infrastructure in AndroidX are tied very closely to JUnit 4 as their underlying backbone. This makes it difficult to benefit from many of the great features introduced with JUnit 5. Luckily, the community has been hard at work to provide what Google does not.
This talk presents the current state of the art for testing Android applications with JUnit 5 in 2024. We will take a look at the improvements to Android testing by utilizing parameterized tests, parallel test execution, test composition and many more features. Listeners will witness how instrumentation tests of Jetpack Compose code can be executed on real hardware, and how JUnit 5 integrates seamlessly with other prominent libraries from the community. Rumor has it that there may even be an update to the Robolectric situation on the horizon... | Listeners are only expected to know the basics of how to write a test and when to choose which type of test for an Android project. While this talk covers several libraries related to testing, the audience is not expected to have in-depth knowledge of tools like Espresso, Robolectric, Roborazzi or Compose Testing, as the necessary fundamentals will be explained along the way. | 40 minuites | English | 保守・運用・テスト(Maintenance / Operations / Testing) |
23 | Master Game Design | Halordain | Learn best practices in game design from an engaging, dynamic, former Apple app developer and Nintendo game director. Examine case studies from lesser-known successes as well as failures, from both the smartphone and console industry. Gain insight into how to best port console game experiences to native Android smartphone UI. | App developers, game designers, character artists, and creators. | 40 minuites | English | UI・UX・デザイン (UI・UX・Design) |
24 | 負債を抱えた長期運用プロダクトのクリーンアーキテクチャを目指したリファクタリングテクニック | Yukihiro Mori | 本セッションでは、長期に運用開発を行なっているサービス・プロダクトを保守・開発を行なっている方を対象にアーキテクチャとリファクタリングをテーマに発表します。
長期運用されているプロダクトコードでは既存コードが構造的な欠陥を抱えていることがしばしばあります。 これらは一定の品質があり問題なく動いているが、新規に仕様を追加していくとなると変えられない既存仕様や構造のために、 新規の開発は自由度がなく複雑化していきます。 複雑化された開発はデグレや障害の発生率が上昇していったり、それを防ぐための品質を重視する開発により開発速度の低下をもたらし、開発者体験を損ねる環境になっていきます。 これらの課題を解決するための手法や考え方について筆者の経験を元に解説させていただきます。 - 仕様把握 コード調査・分析 リファクタリングする上で重要な点として、リファクタリングによるデグレを発生させないことです。 そのためには既存仕様や既存コードの動きを調査することが重要です。 長年の開発によっては仕様がドキュメントとして残っていなかったり、今となっては不要なコードが散在していたりします。 リファクタリングする上で単にコードを綺麗にするだけではなく、仕様面での振る舞いを理解しやすくロジックに落とし込んでいくことが重要です。 この章では、こういった既存仕様の把握やコード調査・分析のアプローチをいくつか紹介していきます。 また仕様そのものをリファクタリングしていくことの重要性に関しても言及します。 - リアーキテクト 長年の開発におけるプロダクトコードの負債では構造的な欠陥を抱えていることが多々あります。 構造的な欠陥を抱えたプログラムでは追加開発をする際に新たな複雑性をもたらし、よりカオスなロジックによってでしか新規の仕様を追加できない状況に追い込まれてしまいます。 そのため、この章では典型的な構造的欠陥の代表例と問題点、それらに対するリアーキテクトの考え方やアプローチをご紹介していきます。 またリアーキテクト後の開発で気をつけていくべきポイントについても言及します。 構造的な欠陥例 - View層から直接Data層の操作を行なっている - View層にドメインロジックが混入してしまっている - Domain層で責務の分離が正しく行えていない - Domain層がData層に依存するなど、依存関係の逆転が起きてしまっている | 長期に運用開発を行なっているサービス・プロダクトを現場で保守・開発を行なっている方
既存プロダクトの負債に日々向き合っている方 長期に運用開発を行なっているサービスの開発に新規で参画される方 | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
25 | 技術的負債山積のアプリをビジネス案件をこなしながらモダンなアプリに蘇らせた話 | OHMAE Ryosuke | アプリ開発担当になった。がんばるぞ!
しかし、その先に待ち受けていたのは、技術的負債の山! 「このコード……どうして動いているんだ?」 これは腕が鳴るじゃないか。自分色に染めてやる! しかし、ビジネス案件をこなしつつ、理想の状態を追い求めることは至難の業。 リリース計画、技術戦略、見直すべき項目はいくらでもある。 ソフトウェアの改善に銀の弾丸は存在しない! 地道で泥臭い作業を積み重ねるしかないのだ! ときにはアンチパターンも許容しながら、着実に改善を進めていく 目指すは、最先端技術を取り入れたモダンなアプリ! このセッションでは、私の実経験をもとに、直面した問題やその解決方法を具体例とともにお話しします。お楽しみに! | 技術的負債を解決していく泥臭い話に興味のある方 | 40 minuites | 日本語 / Japanese | 開発体制(Development Process) |
26 | 挑戦の時:Dagger Hiltと共にDIの世界へ | OHMAE Ryosuke | Anroidアプリ開発におけるDI(Dependency Injection)の方法はいくつかありますが、Dagger HiltはAndroidアプリのために作られたDIの仕組みであり、非常に有力な選択肢です。
「良いという話はよく聞くけど、よく分からないんだよね」 ……分かります。難しいですよね。 - いろいろ資料を読んでみたけど、必要性すらよく分からない - チュートリアルは試してみたけど、それを現実のアプリにどう適用すればよいのか分からない 実際のアプリにDIを導入し、その利益を享受するまでにはいくつかの壁があります。 私も何度も挫折しました。 しかし、試行錯誤の末にHiltを導入したことで、複雑なアプリの内部構造を綺麗に整理でき、とても気持ちよく開発できる環境を構築できました。 初期コストは高いかもしれませんが、それを上回るメリットがあります。今からでも遅くはありません。挑戦しましょう。 本セッションでは、Dagger Hiltを使いたいけれども、まだ使い始められていない方々を対象に、なぜ導入すべきなのかから初めて、実際のアプリにどうやって導入するのか、導入前後でどのように変化するのか、実例を交えて丁寧に説明します。 | Dagger Hiltに興味があるがまだ使い始められていない方
すでに使っているが改めておさらいをしたい方 | 40 minuites | 日本語 / Japanese | 開発ツール&サービス(Development Tools and Services) |
27 | 多重開発を防げ!アプリ内の機能を他アプリに提供する技術 | OHMAE Ryosuke | 同一組織内で複数のアプリを開発している場合、同じ機能を何度も開発してしまう「多重開発」の問題がよく発生します。複数のアプリに似たような機能があり、それがそれぞれのアプリで個別に開発されていることは珍しくありません。
このような状況では「なぜ同じものをいくつも開発してるんだ!共通化できないのか?」と言われても仕方がありません。しかし、小さな機能であればまだしも、ある程度の規模の機能となると共通化するのは容易ではありません。 複数のアプリで利用できる機能モジュール、つまりライブラリを作ること自体は難しくありません。アプリ開発と必要とされる技術に大きな違いはないからです。しかし、「良いライブラリ」を作るのは非常に難しいものです。 提供する機能の要件や利用するアプリの要件は変化していくため、将来の変更に対応できる設計が求められます。これを怠ると、あっという間に大きな技術的負債となってしまい、最終的には全体を再構築することになる可能性も大いにありえます。 一方、余計なお世話をしないことも重要です。利用者のためにと考えて作った結果、そのせいで全体が非常に使いにくいものになってしまうこともあるのです。「作ろうとしているものは何であって何でないか」を意識する必要があります。 このセッションでは、実際にアプリ内の機能を他のアプリに提供するというプロジェクトに取り組んた事例を基に、Androidにおいて、アプリ内の機能を他アプリに提供する方法について解説します。具体例を交えながら、将来の変化に備える設計方針や、避けるべき設計ミスについても詳しく説明します。 | アプリ内の機能を他のアプリに提供することに興味のある方 | 40 minuites | 日本語 / Japanese | アプリアーキテクチャ (App Architecture) |
28 | JetpackCompose製のアプリでのAdMob SDKの使い方 | kkkkan | モバイルアプリで収益を得るための手段の1つに「ネットワーク広告をアプリに表示すること」があります。
多種多様な広告ネットワークとそれをアプリに導入するためのSDKが各社から出ていますが、その中で有名なもののひとつにAdMobがあります。 AdMobはGoogle製のモバイルアプリ用広告ネットワークです。 Androidネイティブ用、iOSネイティブ用、Flutter用、Unity用など各プラットフォーム用にそれぞれSDKが公開されています。 ところで、Androidネイティブ用のAdMob SDKは2024/5時点でまだJetpackCompose対応がなされておらず、Viewでできた広告コンポーネントをアプリ内に表示する方法のみが提供されています。 そのため、JetpackComposeでできたアプリにAdMobを導入しようとした場合、困ることがあります。 このセッションではJetpackCompose製のアプリにAdMob SDKで広告を表示する方法やその際の注意点についてお話いたします。 | ・JetpackCompose製のアプリでAdMob SDKを用いて広告を表示することに興味のある方
・View製のアプリや画面でAdMob SDKを使って広告を表示していたが、JetpackCompose製のアプや画面での表示はまだしたことのない方 | 40 minuites | 日本語 / Japanese | その他(Other) |
29 | Coilの機能について少し深くみてみよう | kkkkan | JetpackCompose製のアプリでインターネットから読み込んで画像を表示させる場合には、Coilライブラリを使用することが多いのではないでしょうか。
このセッションでは、AsyncImage()でインターネットから画像を読み込んで表示するシンプルな利用方法より一歩深堀してCoilの豊かな機能・Tipsをご紹介する予定です。 | ・Coilライブラリにあまり詳しくないという方
・Coilライブラリに興味のある方 | 40 minuites | 日本語 / Japanese | その他(Other) |
30 | Building an inclusive mobile development ecosystem | Tech Over with Sumaiya | The mobile development landscape thrives on innovation and diverse perspectives. This session discusses strategies for building a more inclusive and welcoming environment for everyone, regardless of background, experience level, or chosen platform (Android, Kotlin, or Flutter).
Inspired by the combined forces of DroidKaigi and this talk goes into building an inclusive community through collaboration: -We'll discuss unconscious bias and its potential impact on inclusivity within the mobile development space. -Identify strategies for promoting diversity in mobile development teams, fostering a culture of respect for different approaches and skillsets. -Learn about effective mentorship programs and knowledge-sharing initiatives to empower developers from underrepresented backgrounds within both Android, Kotlin, and Flutter communities. -We'll explore how open-source projects can be leveraged to promote collaboration, inclusivity, and learning opportunities for all mobile developers. | Mobile developers | 40 minuites | English | @Experimental ソフトスキル(@Experimental Soft skills) |
31 | Building the future of Android: The power of diverse teams | Tech Over with Sumaiya | The android landscape is constantly evolving, and fostering a truly inclusive development environment is key to staying ahead of the curve. This session intends to dive into the power of D&I in building the future of Android.
You'll learn how D&I can lead to: -Diverse perspectives ensure android apps cater to a wider range of users with varying needs and abilities. -D&I teams bring a wealth of ideas and experiences to the table, fostering creativity and problem-solving in tackling complex android challenges. -An inclusive environment attracts and retains top talent, building a more vibrant and collaborative Android developer ecosystem. You will also get to discover practical strategies to cultivate a culture of inclusion within your android development team and through leveraging the power of diverse perspectives, you can contribute to a future-proof Android experience for everyone. | All developers, Team Leads | 40 minuites | English | @Experimental ソフトスキル(@Experimental Soft skills) |
32 | Level up your android game: Mastering soft skills for app domination. | Tech Over with Sumaiya | You've mastered the code, but can you take your Android development skills to the next level?
This session intends to dive into the power of soft skills, the often-overlooked strengths that can supercharge your Android app development journey. You'll be able to learn how to: -Discover how to clearly explain complex technical concepts to both developers and non-technical stakeholders, ensuring project success. -Learn how to leverage the power of teamwork, fostering a productive and efficient development environment where everyone thrives. -Develop the ability to think critically, approach challenges creatively, and work effectively under pressure, becoming a valuable asset to any Android project. It is through honing these essential soft skills that you'll transform yourself from a good developer into a great one, ready to tackle any Android app challenge and dominate the app store. | Developers | 40 minuites | English | @Experimental ソフトスキル(@Experimental Soft skills) |
33 | GoogleとAmazonのアプリ内課金の違い | Tatsuki Ishijima | 近年、Google製のAndroidOSが搭載されたスマートフォン、タブレットが数多くあります。そのような中、FireTabletやFireTV StickといったAmazon製のFireOSが搭載されたデバイスも存在しており、こちらは比較的価格が低価格に設定されていることからこれらFireOSを搭載しているデバイスを入手するユーザが増えつつあります。
FireOSの特徴はAndroidOSをベースとしているため、Androidアプリのコードをほぼそのまま流用できることです。 しかし、アプリ内課金を実装しているAndroidアプリをそのままAmazon Appstoreへ公開しようとするとGoogleのアプリ内課金ライブラリであるGoogle Billing Libraryは使えないという課題に当たります。Amazonでは代わりにAmazon Appstore SDKというアプリ内課金SDKが用意されています。これを用いることでFireOS向けのアプリでもアプリ内課金を実装・提供することが可能です。 そこで本セッションでは上記のようにAmazon Appstoreの方でもアプリ内課金を備えたアプリを公開したいといった場合にGoogleとAmazonのアプリ内課金の差異についてを説明します。今後将来的にAmazon Appstoreへアプリ内課金を備えたアプリを公開したいといった場合にスムーズにAmazon向けのアプリ内課金を実装・提供できる助けになると考えます。 アジェンダ(予定) - Google Billing Library と Amazon Appstore SDKの実装の違い - GracePeriodやAccountHoldなど状態の違い - 動作確認方法 - テストについて - Fakeの作り方 - TVデバイスにおけるアプリ内課金について - トラブルシューティングTips | - Amazonのアプリ内課金に興味がある方
- Amazon系端末でアプリ内課金を提供を検討している方 - Google Billing Libraryを用いてアプリ内課金を実装している・した方 | 40 minuites | 日本語 / Japanese | 開発ツール&サービス(Development Tools and Services) |
34 | This session submission has been withdrawn. | ||||||
35 | This session submission has been withdrawn. | ||||||
36 | Animations with Jetpack Compose | Stevan Milovanovic | In this talk I'll try to explain how well animations API aligns with Jetpack Compose Framework and how easy it is nowadays to add animations to your layout.
Within this talk we'll cover basic theoretical concepts of animations API for Jetpack Compose and for each statement we'll provide practical example. After the theoretical part, we'll dive into some showcase projects to see how these animations work during the live code session. | Basic knowledge about Android UI System. Preferably some basic knowledge about Jetpack Compose Framework but that's not required. | 40 minuites | English | Jetpack Compose |
37 | Crafting Cross-Platform Adventures: Building a Game Engine with Kotlin Multiplatform | David Wursteisen | Building a game engine is an adventure. Building a multiplatform game engine in Kotlin Multiplatform is an even more exciting adventure.
In this session I will share what I learned from creating game engines with Kotlin Multiplatform. From mastering Graphic APIs like OpenGL and WebGL to crafting sounds using waveform synthesis, we'll explore the essentials of game development. Learn how to design cross-platform APIs, what are the specificities of each platform and what were the issues I had to create my game engine. Join me as we embark on this thrilling journey of creativity, innovation, and endless possibilities in game engine development. | People who
- Want to discover Kotlin Multiplatform - Want to discover how a game engine is working - Want to discover what is OpenGL/WebGL - Want to discover the nuances between a desktop app, android app, web app, … while using Kotlin multiplatform - Already know Kotlin/JVM | 40 minuites | English | クロスプラットフォーム(Cross-platform Development) |
38 | Seamless Fusion: A Deep Dive into Flutter's Add-to-App Magic | Md Noman Khan | In this session, We'll unravel the mysteries behind making Flutter and native code work together like never before. Discover the reasons why developers are enchanted by Add-to-App, from its ability to reuse code across platforms to maintaining a consistent user experience. Basically, I'll talking about how you can integrate a flutter module into you existing kotlin and swift app and how you can not scrap you existing android and ios apps and still use flutter for you upcoming features.
I'll guide through the steps of setting up Flutter modules, seamlessly integrating them into native code, and handling the intricate dance between the two. Expect some hands on to make this fusion process not only seamless but also delightful. Real-world examples will be our treasure map, guiding us through instances where Add-to-App has turned the ordinary into the extraordinary. By the end of our magical journey, you'll have the knowledge to infuse your app development process with the captivating charm of Flutter's Add-to-App and a case study of CRED on how they used it in their app. | - People who wants to integrate flutter module directly into their exiting android projects.
- People who don't want to scrap their existing android and ios app but wants to use flutter for upcoming feature. | 40 minuites | English | クロスプラットフォーム(Cross-platform Development) |
39 | Boosting Performance and Cutting Costs: Unifying Android and iOS Apps with KMP in a monorepo | Italo Marcel | In this talk, we'll share insights from our experience at Stone Payments on consolidating multiple applications into one, significantly reducing build times, development efforts, and conserving mobile data across our payment systems. | entry level KMP enthusiast | 40 minuites | English | クロスプラットフォーム(Cross-platform Development) |
40 | From Idea to IDE: Developing Plugins for Android Studio | Ahmed Ali | Android Studio allows developers to add custom features to make the IDE work better for their needs. In this talk, we'll look at how to use the Project Structure Interface (PSI) to create plugins that improve Android Studio and make development faster. We'll explain the basics of the Plugin SDK and show how Jetpack Compose can help build easy-to-use interfaces for these plugins. Attendees will learn about different kinds of plugins they can create and how these can help them work more efficiently in Android Studio. We'll also share examples of useful plugins to give you ideas and practical tips. | Basic Understanding of Kotlin and Compose | 40 minuites | English | Kotlin |
41 | A case study for improving the performance around 20x by using JNI | Freddie | We made a custom APNG encoder in an Android app and met many challenges when we tried to improve the encoding performance. Eventually, we use a mixed design with Kotlin Flow and JNI. In this session, I’ll share the reasons why we choose this design and what should we follow when we are writing JNI functions | Experienced with Kotlin Coroutines. Better to have some knowledge of C++ | 40 minuites | English | その他(Other) |
42 | 結局状態のホスティングどうするの!?Jetpack compose | RyujiSato | 自分が今までJetpack Composeを実装してきて、経験したことや、つまづいた部分、悩んだことをもとにアーキテクチャや状態のホスティング、データの取り回しかたなどを紹介していきます
詳細な対象者 - UIへのデータ伝達に悩んでいる方 - 状態のホスティングや状態の変化をUIレイヤーやデータレイヤーでの取り回しに悩んでいる方 - 設計や構造の治験に興味のある方 このセッションの主な議題 - アーキテクチャ - 状態保持の方法 - 各種アーキテクチャの向き不向き - 各種状態保持の向き不向き - 各種メリットデメリット - データの持ち方 - データの取り回し方 | Jetpack Compose初心者
Jetpack Composeに興味のある方 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
43 | The rollercoaster of releasing an Android, iOS, and macOS app with Kotlin Multiplatform | Marco Gomiero | With the rise of Kotlin Multiplatform, the possibility of expanding to multiple platforms has increased, especially for Android Developers. It's easier than before to build for other platforms.
But how to release your app to multiple platforms? In this talk, I will share all the things I've learned around distributing FeedFlow, an Android, iOS, and macOS app built with Kotlin Multiplatform, coming from an Android development background. We will cover the deployment of the binary, automating everything with CI, crash reporting, logging, internationalization, and all you need to know to successfully distribute your KMP app. | The session doesn't require prior knowledge about releasing apps on iOS and macOS. I will explain all the steps.
A bit of prior knowledge about Kotlin Multiplatform is great, but not necessary to follow the talk. | 40 minuites | English | Kotlin |
44 | Beyond one platform: migrating an Android library to Kotlin Multiplatform | Marco Gomiero | With the rise of Kotlin Multiplatform, the possibility of expanding to multiple platforms has increased, especially for Android Developers. This is true for applications but also for libraries.
In this talk, I will share the journey of migrating and publishing an Android library (RSS-Parser) to Kotlin Multiplatform, targeting Android, iOS, and the JVM. We will cover all the challenges faced during the process, with practical tips to tackle them: - Handling and using platform-specific dependencies - Re-organizing the project structure without losing the contributor's history - Writing one test for multiple platforms - Publishing the library. By the end of this talk, you'll have a better understanding of what is needed to make your Android library Multiplatform. | A bit of prior knowledge about Kotlin Multiplatform is great, but not necessary to follow the talk. | 40 minuites | English | Kotlin |
45 | Jetpack Compose実装の基本的な考え方 | RyujiSato | 最近では最先端の技術を使うような現場でなくてもフルComposeで実装をするところが増えてきています
だからこそこのタイミングで改めて基本となるJetpackCompose実装での考えるべき点などを話していきます 主に得られる知見 - UI更新のタイミング - UIレイヤーとデータレイヤーの切り分け方 - UIのカスタム性とその方法 - Composable関数のファイル分け - レイヤーの分け方 - データの取り回し方 | Jetpack Compose初心者
JetpackComposeに興味のある方 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
46 | Jetpack Composeで全画面を覆わないボトムシートを作る | Yuichi Ishijima | ボトムシートをJetpack Composeで表示したくなった場合、多くの場合は、BottomSheetScaffold もしくはModalBottomSheetLayout を使うことで要求を満たせると思います。
しかしこれらは内部でScaffoldを使用しており、Scaffoldが画面全体を覆うことで都合が悪いこともあるのです。 例えば1つのFragmentで表示している地図の上に、別のFragmentでコンテンツを表示している場合、コンテンツとしてボトムシートを表示してしまうと、Scaffoldがタッチイベントを阻害してしまうため地図が操作できなくなってしまうのです。 そこでModifier.anchoredDraggable、Layout Composable、Modifier.nestedScrollを説明しながら、全画面を覆わないボトムシートができるまでの話をステップごとにお話しします。 | ・Jetpack Composeの基礎知識 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
47 | Mapopolis - Unleashing Google Maps in Android | Piyush Maheswari | Explore the dynamic world of map integration in Android applications in this session. Discover how to incorporate Google Maps into your Android projects, from setting up the foundation to implementing advanced features like adding markers, drawing lines between them, and optimizing performance. Gain insights into the comparison between Google Maps and OpenStreetMap, and stay updated with the latest developments in Google Maps. Elevate your Android development skills by delving into the realm of map integration. | Android Developers/Product Managers | 40 minuites | English | その他(Other) |
48 | Androidでサブスクリプションをテストする実践的方法 | satoshi baba | 本セッションでは、Androidアプリのサブスクリプション機能を確実にテストし、リリース前におけるトラブルを未然に防ぐ方法に焦点を当てます。現代のアプリ開発において、定期購入はユーザーに継続的な価値を提供する重要な手段ですが、その複雑な挙動と多様な使用シナリオはテストを難しくしています。
このセッションでは、Androidにおけるサブスクリプションの課金形態について概観し、その上でサブスクリプションのテストプロセスにおける基本的なアプローチと応用的なテスト手法を紹介します。特にPlay Billing Labを使用したテストの実行について、具体的な例と共に詳しく解説いたします。 サブスクリプションテストの際によくハマりがちな罠と、それを解決するための実践的なアプローチについて、参加者に役立つベストプラクティスを提供します。 | ・サブスクリプションを実装しようとしている方
・サブスクリプションのテストで罠にハマった経験がある方 | 40 minuites | 日本語 / Japanese | 開発ツール&サービス(Development Tools and Services) |
49 | 今日からマップアプリもJetpack Compose 〜デザインシステムを添えて〜 | fukuchancat | Composeに染まった この俺を
慰める奴は もういない というくらいのノリで10年以上に渡って膨れ上がってきたAndroid Viewに一定の見切りをつけ、私達はJetpack Composeを全面的に導入する選択を採りました。 このセッションでは、そんな中規模のプロジェクトにJetpack Composeを導入して発生した諸々の障害とその解決策について、地図アプリ特有の事情やデザイナーとの協業、開発チーム全体のスキル向上・学習啓発まで含めてお話しします。 発表予定の内容 ・Composableの地図上への描画、それに伴って必要になった*Composableの画像化* ・(Material Designではない)*独自のデザインシステム*への対応 ・気付いたらテックリードになってた話 ・ピクセルパーフェクトを目指しデザイナーと熱い協業 ・開発チーム全体のComposeスキル向上を目的とした*Review Committee Weekly Report*の取り組み | ・これからJetpack Composeへの移行を考えているAndroidエンジニア
・地図など、描画に関して特殊な事情を抱えるアプリのAndroidエンジニア ・デザインシステム構築に興味があるAndroidエンジニア・デザイナー | 40 minuites | 日本語 / Japanese | Jetpack Compose |
50 | Bridging the Gap: Understanding Method Channels for Flutter and Native Communication | Md Noman Khan | In the ever-evolving landscape of cross-platform development, Flutter has emerged as a powerful tool for crafting beautiful and performant user interfaces. However, the seamless integration of native functionalities into Flutter apps remains a critical challenge. Enter "Bridging the Gap: Understanding Method Channels for Flutter and Native Communication."
This talk is a deep dive into the world of Method Channels, a vital mechanism that facilitates communication between Flutter and native code. We will unravel the complexities of native communication challenges, exploring the bidirectional flow of data and control that Method Channels enable. From setting up Method Channels in a Flutter project to showcasing real-world applications, attendees will gain practical insights into leveraging this powerful tool. The discussion will include best practices, performance considerations, and a thorough exploration of use cases where Method Channels shine. By the end of the talk, attendees will have a comprehensive understanding of how Method Channels can bridge the gap between Flutter and native functionalities, opening new possibilities for enhancing the capabilities of their Flutter applications. | People who want to use native code in flutter. | 40 minuites | English | クロスプラットフォーム(Cross-platform Development) |
51 | You will 💙 becoming a fullstack developer with your Android skills | Yassine Benabbas, Ibrahim Gharbi | Kotlin is much more than just a language; it is a complete ecosystem! From backend development to cross-platform front-end development, and even data science, it is everywhere. This is part of the DNA of Kotlin since its creation and grows exponentially especially with the latest Google IO and KotlinConf 2024.
This talk demonstrates how Android devs can easily become fullstack using their existing Kotlin skills. We will share three demos covering different stacks of development including exotic and funny ones. We will achieve all of this by keeping our favorite Jetpack libraries (such as navigation, Room and preferences datastore) and integrating new ones (such as Ktor client/server, DataFrame). By the end of this presentation, you will be delighted to realize how easy and pleasant it is to kick-start development for other targets than Android. Indeed, in addition to iOS, desktop, web, backend, and data-science apps, even more app stacks are already in your reach. | Expected audience: we expect the audience to already have some knowledge in Android development so that they can expand to other platforms with their existing knowledge of the Android ecosystem (Kotlin language, libraries, IDE, tooling, build system, etc.).
This session answers the question: As an Android dev, how can I become a cross-platform and full-stack developer and what is possible to achieve currently? | 40 minuites | English | クロスプラットフォーム(Cross-platform Development) |
52 | Practical Tips and Tricks to Improve Your Compose Previews | István Juhos | Jetpack Compose Preview is a powerful tool that provides real-time feedback on how our composables are rendered and even on how they behave and animate in certain conditions. While writing useful previews seems like a straightforward task, there are some things that we need to keep in mind. Preview code won't reach users of your app (hopefully!); however, it's more likely that the author of the preview and future peers as well might have to work with them eventually.
This talk will touch on the following topics: - Recap on the main features and limitations of Compose previews - How we can overcome the limitations of @Preview being an annotation - How we can make our previews developer-friendly - What we can use our previews for besides checking how our composables are rendered and how they behave | Android engineers who are in the process of adopting Jetpack Compose in their projects, or who already have a large Compose codebase, and want to streamline their Compose previews. | 40 minuites | English | Jetpack Compose |
53 | 怖くないedge-to-edge対応 | kazakago | 来たるAndroid15(TargetSdk 35)では、edge-to-edgeへの対応がすべてのアプリで求められるようになります。
edge-to-edge、つまり画面の端から端までアプリを描画するための手順自体はJetpackライブラリ側の対応が進み、以前に比べはるかに楽になりました。 しかしながら真の意味でedge-to-edgeに対応するためには各々のアプリの各画面でWindowInsetsによる細やかなチューニングが必要になります。 JetpackComposeかAndroidViewかでチューニング方法は異なり、同じComposeにおいてもScaffoldを敷いているか否か、さらにはMaterial2かMaterial3か否かによっても記述すべきコードが変わってきます。 そこでこのセッションでは、edge-to-edge対応にあたり必要な要素と対応方法をよくあるパターン別に解説していきます。 基本的にはCompose向けAPIを中心に解説しますがAndroidViewにおける対応方法もお話する予定です。 目次(予定) 1. edge-to-edgeとは?Android15から求められること 2. edge-to-edgeを有効にする 3. チューニングに利用するWindowInsets APIの紹介 4. Compose + Material3における対処法 5. Compose + Material2における対処法 6. AndroidViewにおける対処法 7. とにかく最低限UIを破綻しないようにするためには? | - edge-to-edgeって聞いたことはあるけど雰囲気でしか知らない方
- Android15からedge-to-edge対応が必須になると聞いて戦慄している方 - edge-to-edgeを有効にした場合の、適切な対応方法を知りたい方 - edge-to-edgeを有効にした場合に、適切でなくとも最低限破綻しない対応方法を知りたい方 | 40 minuites | 日本語 / Japanese | Androidプラットフォーム (Android Platform) |
54 | KMP vs Flutter〜技術選定の判断基準〜 | そば屋, K9i | マルチプラットフォームで開発をするにあたってKMPとFlutterどちらを選べば良いか判断に悩むことがあると思います。
- KMPの特徴 - Flutterの特徴 - 開発メンバー(技術のキャッチアップしやすさ) - 開発効率 - 拡張性 - ケーススタディ など実例を混ぜながら技術選定の判断をどうすると良いかお話します。 | - クロスプラットフォームに興味がある開発者の方
- PMなどプロジェクトの管理を行なっている方 | 40 minuites | 日本語 / Japanese | クロスプラットフォーム(Cross-platform Development) |
55 | This session submission has been withdrawn. | ||||||
56 | 「撮る」で終わらせないスクリーンショットテスト活用事例 | すいみー | 皆さんのプロダクトではスクリーショットテストを導入していますでしょうか?
最近はRoborazziという静的なスクリーンショットテストライブラリやPaparazzi、Google I/O2024で紹介されたCompose Previewのスクリーンショットテストなどいくつか実現できるツールがあります。 Roborazziを一例にとると、Composable関数単位でテストを書けたり、HiltやViewModelなどの下位レイヤーと疎通してのテストができたり、GithubActionsをはじめとするCI上で差分を確認したりすることができます。 さて、いずれかのツールを使い、スクリーンショットテストを多くのパターンに対してカバーできるように導入/実装したり、CI/CDに組みこめたりするところまでは良いもののそこで生まれたスクショテストの関数や差分比較のスクショデータ達は一体どんなメリットを我々開発者に与えてくれるのでしょうか? 本セッションではスクリーンショットテストが与えるプロダクトへのアウトカムを提示したいと思います。 具体的にはスクリーンショットテストを実際のテスト項目を代用したり、得られた最新のUIをスクショを使ってカタログを作ったりしてスクショテストによって実現していきます。 本セッションによってスクリーンショットテストの活用によって様々なコスト削減を実現し、導入に対する妥当性を説明できる状態を目指します。 ※ 今回はいくつかあるスクリーンショットテストライブラリの中からRoborazziとCompose Previewのスクリーンショットテストを主に取り扱います。 ※ 題材として使うテスト項目は複雑なバリデーションチェック時のUI状態など手動で確認するには大変なものを取り上げます。 ※ スクショテストで得た画像データの保存先についてはAmazon S3やGoogle Cloudを例として使用します。 - 目次 - Roborazziを初めとする使ったスクショテストでできること - 導入の大まかな流れ - CI上でスクショテストを確認する - 実際のテスト項目をスクショテストで代用してみる - 得られたスクショを用いてカタログを作ってみる | - スクショテスト導入を検討している方
- プロダクトのテスト項目が多く品質担保に苦労している方 - プロダクトの最新のUIをすぐに確認する術がなく苦労している方 - Roborazziを初めとするスクショライブラリを導入したもののそれがプロダクトに還元できている実感のない方 - スクショテスト導入のメリットを上手く説明できない方 - Compose Previewのスクリーンショットテストの可能性について知りたい方 | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
57 | AndroidStudioを使いこなして、コードを読む・書く生産性を上げよう | morayl | AndroidStudioに多機能であるがゆえ「実は便利だけど知らない」という経験をすることがあります。
よく使う機能でも、似た機能やオプションがあったりします。 このセッションでは、エンジニアが多くの時間を費やす「コードを読む(調べる)・書く」ことにフォーカスし、機能とその使い分け・オプションについて詳しく解説します。 最初は小さいコードでも、開発が進むにつれコードの行数・ファイル数が多くなってきます。 複雑なコードを、様々な機能を使って効率よく・正確に読み書きし、開発の生産性を上げることを目指します。 使いこなさないともったいない! # コードを読む 3つのUsagesを使いこなす ShowUsage/Find Usage/Call Hierarchy 定義・実装を見る Go to Declaration or Usages/ Go to Implementations 検索を使いこなす Search Everyware/Go to Class/Go to Files/Go to Symbol/Find action/ Find in files 望んだ検索結果を早く見つけるテクニック ファイルの中を調べる File Structure/ Go to Line/ Parameter Info/ パンくずリスト ファイル(フォルダ)の履歴を調べる Annotate / Show History / Local History / Open in VCS ファイルを開く Recent Files/ Project tool window モジュールに移動する # コードを書く 基本機能 コピー・ペースト・ペースト履歴・複製・行削除・行移動・Select Word Actions Replace in Filesで効率よく置換する Live Templateを使う、作る Complete Current Statementを活用する Postfix completionを使う 補完・GithubCopilotを使う Geminiを使う | Android開発初学者
AndroidStudioをもっと使いこなしたい方 複雑なコードを読む方 | 40 minuites | 日本語 / Japanese | 開発ツール&サービス(Development Tools and Services) |
58 | フルリモートワークにおけるAndroidアプリプロジェクトの開発を加速する効率的な運用方法 | syarihu | 私が所属する株式会社ギフトモールではフルリモートワークで開発をしています。
リモートワークをする上では特に意識的にコミュニケーションをしたりタスク進捗を確認しないと誰が何をしているのかが分からないためプロジェクトの進捗が把握しづらいので、プロジェクト管理ツール上でタスクを正しく把握できる状態にしておくことはとても重要だと考えています。 また、タスク管理ツールによる運用改善だけでなく、可能な限り自動化をしたりプロジェクト自体を作業分担しやすい環境にしておくことで、より効率的に開発を進められます。 本セッションでは効率的に作業ができるAndroidアプリ開発環境づくりや、Asanaを活用したAndroidアプリプロジェクトのタスクを可視化、CIを活用した運用の自動化、QAフローの最適化による不具合改善の仕組みづくりなど、Androidアプリ開発チームの作業効率を向上するためにギフトモールで行っているさまざまな取り組みについて詳しく紹介します。 目次案 ■ 効率的に作業するための開発環境づくり - プロジェクト構成 - PR/ブランチ運用ルール ■ Asanaを活用したAndroidアプリプロジェクトのタスクの可視化 - タスクステータスをセクション分けする - サブタスクを活用したタスク進捗の管理 - 目的別に必要な情報にアクセスしやすくする - ABテストの状況を把握しやすくする ■ CircleCI / GitHub Actionsを使った運用自動化 - Asana <-> GitHub連携を活用したタスク進捗の共有 - Asana <-> Slack連携 - 依存関係の更新 - 静的解析のコードレビュー - protoファイルを元にした自動生成クラスの更新 - 次回リリースバージョンに含まれるPR差分の可視化 - 未使用リソースの自動削除 - ライセンスの自動更新 - バージョン更新 - リリース作業 ■ QA運用を最適化する - 修正したアプリを最速でQAに伝えるための仕組みづくり - QAで見つかった不具合にすぐに気づけるようにするための仕組みづくり - デバッグメニューを活用したQA・デバッグがしやすい仕組みづくり - スクショ/録画をしやすいツールなどを使って、QAの不具合報告も加速する ■ Notionを活用したドキュメンテーションのすゝめ ■ 自分のタスク消化速度を加速するための工夫 | - Androidアプリプロジェクトのタスク管理に課題を感じている人
- AndroidアプリプロジェクトにおけるQA運用に課題を感じている人 - タスク管理の改善によって作業効率をより上げたいと思っている人 | 40 minuites | 日本語 / Japanese | 開発体制(Development Process) |
59 | Android ViewからJetpack Composeへ 〜Jetpack Compose移行のすゝめ〜 | syarihu | Android Viewはメンテナンスモードになり、Jetpack Composeも正式リリースされてから3年ほど経過しておりJetpack Composeを導入するアプリも増えてきていると思います。
しかし、古くから提供し続けているアプリでは未だAndroid Viewからの移行の腰が重かったり、開発リソースが足りなかったりなどで移行を進められていないアプリもあるのではないでしょうか。 Jetpack Composeは導入自体は簡単ですが、コードの書き方の自由度が高く、いざチームで開発しようと思うと、どのようなルールを決めるべきなのか、どの単位でComposableを切るべきなのか、Composable関数にどのように引数を渡すべきなのか、プレビューもどこまで書けば良いのか、移行や実装の進め方に迷うことがたくさんあると思います。 私が業務委託としてお手伝いをしている株式会社mikanでも以前からJetpack Compose化を進めており、導入からしばらく経過して試行錯誤を重ねた結果、ようやくこういった書き方やルールがいいんじゃないだろうかという方針が確立してきました。 本セッションでは、mikanにおけるJetpack Compose移行の進め方と、実際の移行タスクを例にしたJetpack Composeを使ったレイアウトの実装方法や、プレビューを活用して実際の動作に近い画面の動きを再現する方法などを解説します。 目次案 ■ Jetpack Composeの導入 - Jetpack Composeの依存関係を追加する - Compose関連のファイルの置き場を決める - ファイルやComposable関数などの命名規則を決める - コンポーネント単位だけでなく画面までプレビューを表示できる設計にする ■ Jetpack Composeへの移行 ~ オンボーディング画面をJetpack Composeに移行する ~ (説明に使う画面は変わる可能性があります) - 移行対象の画面のレイアウトを確認する - 移行対象の画面のレイアウトをコンポーネント単位に分割する - 移行に必要なタスクを洗い出す - UIを実装する - UiStateを定義する - プレビューで実際の動作に近い画面の動きを実現する - ロジックを実装する - 画面とロジックを結合する | - Android ViewからJetpack Composeに移行する具体的な方法が知りたい人
- Jetpack Composeのプレビューをより活用して開発したい人 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
60 | 電話フィルタリング技術:CallScreeningService APIの詳細と実装 | Kaisei Watanabe, Masashi Mori | Android 10以降でCallScreeningServiceが利用できるようになりました。
CallScreeningServiceは電話のフィルタリングとリダイレクトを可能にするサービスで、迷惑電話のブロックなどができます。 このセッションでは、APIの詳細、具体的な実装方法について発表します。また、Android10未満の実装など、実運用における課題と解決策も紹介します。 セッション内容 - CallScreeningServiceの詳細 - 実装例、検知とフィルタリングのロジック - 実運用の紹介、Android10未満の対応 - まとめ | 電話関連のアプリケーションやサービスを開発している、もしくは今後開発を予定しているAndroidエンジニア。
電話のフィルタリング技術に興味のあるAndroidエンジニア。 | 40 minuites | 日本語 / Japanese | Android Framework |
61 | Compose時代のedge-to-edge対応 | tomoya0x00 | 弊社のアプリは2024年にフルCompose版の新規開発アプリでリニューアルをおこないました。
また、このタイミングでedge-to-edgeのコンテンツ表示を全面的にサポートいたしました。 そしてAndroid 15ではedge-to-edge表示の強制化が予定されています。皆さんも是非、edge-to-edgeに対応してみませんか? このセッションではそもそもedge-to-edgeとは何なのか、という導入レベルから、弊社アプリでのedge-to-edge対応で経験したハマり所や実践的なプラクティクスまで、包括的に取り扱います。 一部については https://zenn.dev/tomoya0x00/articles/f854a6825a1182 ですでにご紹介済みの内容をお話ししますが、当日はより最新の情報を加え、より役に立つ内容を皆様にお届けする予定です。 お話しする予定の内容 - edge-to-edgeって何だろう? - edge-to-edgeに対応すると何が嬉しいのか - 事前準備としてのenableEdgeToEdgeと、使用時の注意点(Android OSごとの差分で特に気にした方が良い箇所もご紹介) - ComposeでのWindowInsetsの扱い - キーボードとWindowInsets - consumeWindowInsetsの話し - 一般的なアプリで対応が必要と思われる箇所をご紹介 - Material2とMaterial3 - BottomNavとNavigation Rail - こんな端末があるので要注意、という話し - PullRefreshIndicator - LazyColumn - キーボード操作も考慮した対応 - SnakbarHost - より高度なedge-to-edge対応 | - edge-to-edge対応したいが、何から手を付ければ良いのか困っている方
- 自分のedge-to-edge対応に不足が無いか不安な方 - 最低限のedge-to-edge対応をしたが、より良いedge-to-edge対応をおこないたい方 - Jetpack Compose初心者 | 40 minuites | 日本語 / Japanese | UI・UX・デザイン (UI・UX・Design) |
62 | 外部ライブラリ・端末依存不具合解析の事例から学ぶ問題解決方法 | tomoya0x00 | 皆さん、普段の開発の中で自分や同僚が書いたコードが直接的な原因では無い、外部ライブラリ・端末依存の不具合に立ち向かった事がありませんか?
このような不具合解析はあまり一般的にノウハウが公開されておらず、各々がどうにか頑張って解析して対応策を考えているケースが少なくない、と考えています。 弊社のアプリでは幸か不幸か外部ライブラリ・端末依存不具合解析の事例が何件か溜まっています。 本セッションではこれらの事例をいくつかピックアップしてご紹介しつつ、問題解決方法の一般化を試みます。 現時点では下記の様な事例がネタとしてありますが、当日はここから追加・取捨選択してご紹介する予定です。 外部ライブラリ・端末依存の不具合事例 - AndroidX Core SplashScreenを導入するとedge-to-edgeが一部解除される - https://issuetracker.google.com/issues/331563980 - 特定のComposeバージョンから市場でクラッシュ問題が頻発する - https://issuetracker.google.com/issues/300280216 - 特定端末の約半数で、タップ位置が必ずズレる - https://zenn.dev/tomoya0x00/articles/e9c0558e5d8e16 - 特定の端末で動画再生を一時停止してバックグラウンド遷移後にフォアグラウンド遷移させると、映像部分だけ先に進んでしまう | - 主にソフトウェア開発における、ソフトウェアに関する汎用的な問題解決方法を学びたい方
- 現代のAndroidアプリ開発において、外部ライブラリ・端末依存の不具合にどのようなものがあるのか知りたい方 | 40 minuites | 日本語 / Japanese | @Experimental ソフトスキル(@Experimental Soft skills) |
63 | Jetpack Compose導入の失敗を超えて、今選ぶべきベストアプローチ! | akkiee76 | Jetpack Composeの導入、それは当時の我々のチームにとって大きな失敗を招く結果となりました。なぜなら、我々のチームにJetpack Composeの知見もあまりなく、メリット・デメリットをあまり理解していない状態でJetpack Composeの導入に踏み込んでしまったからです。
特に、アーキテクチャ選定、FragmentとComposableの関係性、Componentの再利用性、ホイスティング、画面遷移、permissionの実装箇所、パフォーマンス、肥大化するViewModelとテストコード、学習コスト不足といった様々な試練に直面した結果、大きく生産性を下げてしまう結果を招いてしまいました。しかし、これらの課題に対して試行錯誤することで、我々なりの答えを導き出し、開発の軌道を徐々に修正することができました。 このセッションでは実際に我々が直面した課題と課題に対して行ったアプローチ方法を紹介します。さらに直近のJetpack Composeのアップデートを踏まえて今選ぶべきベストアプローチを紹介します。 Jetpack Composeがデファクトスタンダードになりつつある今、Jetpack Compose導入の成功のきっかけとなるセッションになるでしょう。 具体的には、以下のトピックについて紹介する予定です。 - MVVMとFluxでCompose Architectureの最適解を考える - Full ComposeとFragmentベースで設計する方法とメリデメ - Navigation Composeの落とし穴とその後のアップデート - Composableを細分化して再利用する最適解 - ホイスティングで適切な値設計を行う方法 - 過剰なRecompositonによるパフォーマンス低下問題との向き合い方 - permissionはどこに定義べきか - 状態管理の複雑化によるFat ViewModel問題とその改善 - 業務時間中に学習コストが取れない結果、起きたことそのアプローチ | - これからJetpack Compose導入を考えている方
- Jetpack Compose導入に失敗したくない方 - Jetpack Compose導入に失敗してしまった方 - これから新しくプロジェクトを立ち上げる方 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
64 | 今からはじめるAndroidアプリ開発 | Kenji Abe | Androidは2023年に15周年を迎えましたが、その歴史とともに開発手法なども大きく変わってきました。
Androidアプリ開発に興味をもってくれた方も多くいらっしゃると思いますが、その中で何から始めれば良いのか?ということは大きな課題です。 このセッションではAndroidアプリ開発をはじめるための道しるべとなることを目指します。難しいことを話す予定はありません。 最近はじめた方にとっても有益になるように、困ったときにどうするか?情報のキャッチアップ方法、なども紹介していきます。 予定内容 - Androidの概要 - Androidアプリを開発するために必要なもの - どこからはじめれば良いのか? - アプリ開発で知っておくこと - アプリ開発で困ったときは? - 情報のキャッチアップ方法 | Androidアプリ開発をはじめたい方
プログラミング初学者 Androidアプリ開発初学者 | 40 minuites | 日本語 / Japanese | その他(Other) |
65 | 電池寿命を考えた位置情報の監視方法を考える(Geofence) | はるちろ | # 背景
皆さんは、位置情報の監視をされたことはありますでしょうか? 監視をしたい用途としては、自分が家の付近にいるかどうかを判定してイベントを発行したり、イベント会場などに入ったときに通知を送りたいなど、様々な用途で使用をされていると思います。 位置情報の監視をすると一番最初に思いつくアルゴリズムとしては、数分に一回GPSを受信して、その位置情報が自分の決めたエリアに入っているかを判定するという動作になると思います。 ですが、GPSの取得には大きな電力を使用されます。 そこで今回GoogleMobileService(以下、GMS)の一つの機能であるGeofenceを用いて位置情報の監視を行い、電池寿命の改善を行いたいと考えます。 GMSのGeofenceは、GPS情報の他にモバイルネットワークの情報などのフィンガープリントを利用することで電池寿命を延ばしている # このセッションで行うこと このセッションではGeofenceの概要から説明を始め、Geofenceの簡単なアルゴリズムの組み立て方を説明し、その後GMSのGeofenceを実装して、動作検証を行う。 # スライドの内容 - Geofenceとは - Geofenceを用いるとどのようなアプリを作れるのか? - 自分で実装をしてみたらどのようになるのか? - GMSのGeofenceの実装方法 - 簡単な実演 - 自作で作った機能とGMSのGeofenceで性能を比べてみる - アプリ公開をするまでの手順(時間によっては飛ばします) - GMSのAPIであるGeofenceの機能でできることできないこと | ・GPSの取得を行い、位置情報の監視を行っているときに電池寿命を気にしている方
・GPSの監視方法の別のアプローチを探している方 | 40 minuites | 日本語 / Japanese | ハードウェア (Hardware) |
66 | UIの状態生成ロジックを宣言的に記述する ― Moleculeライブラリを実運用して分かったこと | hiroaki | Cash App製のMoleculeライブラリは複雑になりがちなAndroidの状態生成ロジックを宣言的に、分かりやすく記述することができます。droidkaigi2022ではCash Appの方から発表がありましたが、このたび検討からプロダクションアプリへの適用まで1年ほど使い倒し、その過程で見えてきた知見を共有します。
MoleculeによってComposable関数を使ってStateFlowやFlowを作ることができます。Composable関数を使うので、UI実装で馴染の深い関数を使うことができます。 良いライブラリですが、検討当初はGoogleのガイドとは異なる方法をアーキテキチャの重要な部分に取り入れることになるので、不安がありました。しかしMoleculeはViewModelと併用する書き方ができます。そうすることでViewModelの充実した機能を利用つつ、Moleculeのメリットを活かして簡潔に状態ロジックを記述することができます。今回は具体例を含めてその運用方法についてご紹介します。 同じCashApp製のFlowをテストできるTurbineライブラリを使ってのテスト方法についてもご紹介します。 # 本セッションで得られる知見 - Moleculeの概要と導入の注意点 - 宣言的にUI状態生成ロジックを書くメリット - ViewModelでMoleculeを使う方法と運用、注意点 - Turbineを使ってPresenterのテストを書く - プロダクションアプリで適用していく際の注意点 - チームで運用する際にやったこと - 宣言的UIを使うもう一つの選択肢「Circuit」 | - アプリのアーキテキチャの話に興味のある方
- 複雑なViewModelでの状態管理に悩まれている方 - UIの中に混ざったビジネスロジックを分離したい方 - MoleculeやTurbineライブラリに興味がある方 - チームにアーキテキチャ運用方針を根付かせたい方 | 40 minuites | 日本語 / Japanese | アプリアーキテクチャ (App Architecture) |
67 | ExoPlayer in Jetpack Media3 | entaku | ExoPlayerはメディア再生に欠かせないライブラリです。
そんなExoPlayerは今、Jetpack Media3になっています。 今までのExoPlayerからどのように変わったのか?これからAndroidでメディア扱いたい人はどのようにやっていくのかを話したいと思います - 基本的な再生機能 - ストリーミング再生 / アダプティブ ストリーミング - プレイリストを作成する - ユーザーインタラクションのカスタムイベント / エラーハンドリング - メディア プレーヤーを操作する - バックグラウンド再生 - MediaControllerの制御 - UI コンポーネント - Transformer API によるメディア編集 - など | AndroidでMediaAPIを扱っている人
これからMediaAPIを扱いたい人 | 40 minuites | 日本語 / Japanese | Jetpack |
68 | テスト駆動開発(TDD)を通して考えるAndroid開発のユニットテスト戦略 | hiroaki | ユニットテスト戦略を立てることはAndroidアプリを開発していくうえで重要です。良いユニットテストが十分にあれば、自動化によってデグレを検出でき、機能変更やリファクタリングを容易に行うことができるようになります。
ユニットテストは、機能実装と同時に作られるのがよく、そのために効率的にすばやく書ける環境になっている必要があります。また、バグを適切に検出し、開発者が容易に原因を特定できる状態になっているのが良いです。実装もユニットテストしやすい状態になっていることが望ましいでしょう。 本セッションではこうしたAndroid開発における良いユニットテスト戦略をどうやって実現していくのかを提案していきます。そのためにテスト駆動開発(Test-Driven Development 以下TDD)でAndroidアプリのコードを実際に書くデモを通してご紹介します。 TDDとは、テストコードを先に書き、そのテストを通るように実装コードを作成する開発手法です。なぜTDDでデモを行うかというと、TDDの実践によって良いユニットテストがどんなものかが自然と見えてくるからです。またデモでは、推奨アーキテキチャのクラス等を実装していきます。具体例をコードとともにユニットテストの書き方をご紹介していきます。 本セッションで得られる知見 - TDDの基礎知識と実践方法 - flowやSharedFlowやStateFlowのテストの仕方 - viewModelやrepositoryなど推奨アーキテキチャのクラスのテストしやすい実装の仕方 - mockやFakeの使い所、DRYとDAMPの使い分け等 - IDE機能やAIを活用したテストコード記述のサポートによって効率的にテストを書く - TDDを実践する際の注意点 | - TDDに興味がある方
- Android開発でユニットテストを充実させていきたい方 - 良いユニットテストとはなにかを考えている方 - テストしやすい実装について知りたい方 - テストを効率よく作成したい方 - Androidの推奨アーキテキチャのクラスやFlowなどのテスト方法を知りたい方 | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
69 | 6 weeks of Compose or How a good Design System is vital in Compose | ddinorahtovar | In this talk, we will cover the pitfalls and wins our Mobile Team encountered in rewriting our mobile application in Compose in just 6 weeks
We will focus, on the pros cons, pitfalls, and problems we encounter, also the learnings we gather and the process that helps us to make this happen! that probably will help everyone that may want to move from XML to Compose in a smooth way We will tackle how a good design system can save you a lot of time if we focus on writing good atoms and good components! | Must know and understand Jetpack compose | 40 minuites | English | Jetpack Compose |
70 | Lifecycles at Scale: with Multiplatform | ddinorahtovar | FLASH NEWS! Kotlin Multiplaform claims another realm - this time focus in Lifecycle!
As Kotlin Multiplatform reach Stable version the time has never been better to understand how Lifecycles works and now that the library has support for it, even better As we know, all mobile applications has a lifecycle - so let's go in a very deep and fulfilling journey focus on the registry for the lifecycle, the owners and observer and how they get affected using Kotlin Multiplaform and how you can take advantages in all the operating systems, and what does it means having lifecycle libraries as we know for all the other OS that are getting supported | Mobile engineers with experience with ViewModel Lifecycle and LifecycleOwners | 40 minuites | English | Jetpack |
71 | Performance in a Compose World | ddinorahtovar | In this talk, we will talk about some of the pitfalls and common mistakes we need to address to make sure our Compose code is not causing us recomposition, or performance problems!
We will focus on how to manage our code in the right way, so we can scope and launch our compose code to production without affecting our user experience | Mobile engineers with knowledge on Jetpack Compose | 40 minuites | English | Jetpack Compose |
72 | Androidを繋ぐOoB | tsuyoshihyuga | Androidは多種多様な、他ハードウェアと接続する技術を持っています。
Jetpackで利用できるようになったUWB(超広帯域無線)ではデバイス間の距離が取得できるようになりました。 しかし、UWB自体には直接デバイス間を接続する機能は無く、別な経路(Out-of-Band)の実装を組み合わせて、UWBを実現する必要があります。 本セッションでは、そんな多種多様なAndroidの接続経路に着目し、その用途とそれぞれの利点や利用方法について説明、考察するセッションになる予定です。 話す内容 - UWB - Bluetooth / BLE - NearBy Connections API - Wifi - etc | Androidと他ハードウェアの通信に興味がある人 | 40 minuites | 日本語 / Japanese | ハードウェア (Hardware) |
73 | From Zero to Hero: Kickstart Your Journey with Kotlin Multiplatform | Abdul | With Kotlin Multiplatform (KMP) gaining momentum and more Android libraries extending their support for it, many developers are eager to dive in but unsure where to start or how robust the ecosystem truly is.
In this talk, I will explain: - Getting Started: Step-by-step guidance on setting up Kotlin Multiplatform. - Ecosystem Strength: Evaluating the maturity and capabilities of the KMP ecosystem. - Native API Integration: Interacting with native APIs across platforms. - Platform-Specific Operations: Techniques for triggering platform-specific functionalities. - Library Compatibility: Strategies for using libraries that don't yet support multiple platforms. We will also have a quick look at Compose Multiplatform | People who
- Know about Kotlin - A bit of knowledge about Android or iOS - Interested in Kotlin Multiplatform | 40 minuites | English | Kotlin |
74 | Glanceを使った効率的なウィジェット開発 〜アプリのリーチを広げよう〜 | George | 昨今、多くのアプリが開発されている中で、ユーザーにあなたのアプリを使ってもらうのは容易ではありません。しかし、ウィジェットを利用すれば、ユーザーにアプリを使ってもらう機会を増やし、アプリの可視性とエンゲージメントを向上させることができます。
本セッションではウィジェットを開発するためのJetpackライブラリであるJetpack Glanceを使用し、以下のトピックを説明します。 ・基本的なGlanceの実装 ・設定すべきファイルとそれらの役割について ・ウィジェットの大きさ ・設定方法と値の決め方 ・基本的なUIの実装方法 ・Column、Row、Textなどの要素 ・レスポンシブル対応 ・画像を表示する方法 ・ローカル画像 ・リモート画像 ・更新の方法 ・定期的に更新する方法 ・ユーザーアクションに基づいて更新する方法(例:タップ、アプリ内での操作) ・構成Activityについて ・構成アクティビティの実装方法と導入するべきケース ・動作の仕組み ・ライフサイクル ・SDKがウィジェットを管理する方法 ・ウィジェットとアプリのプロセスの関係 ウィジェットはユーザーにとって非常に便利ですが、開発コストの懸念から敬遠されがちです。このセッションでは、参加者がGlanceの機能を深く理解し、ユーザー体験を向上させる具体的な戦略と技術を身につけることを目指します。 | ・ウィジェットの開発に興味がある方
・Remote Viewは使ったことがあるが、Glanceは使ったことがない方 ・開発コストを懸念して、ウィジェットの開発を避けたことがある方 | 40 minuites | 日本語 / Japanese | Jetpack |
75 | Bridging Platforms: Harnessing Native APIs and Platform-Specific Libraries in Kotlin Multiplatform | Abdul | As Kotlin Multiplatform gains more popularity, many people are wondering how to utilize platform-specific native APIs, such as accessing the camera or reading NFC tags.
This is just one aspect. Another consideration is using existing libraries like AWSCognito, which currently support multiplatform but are limited to Android and Desktop. So, what if you want to use AWS Cognito in a KMP application targeting iOS? Do you have to completely rewrite your code? The answer is no. By leveraging the expect and actual mechanisms in Kotlin, we can utilize existing libraries even if they don't yet support Kotlin Multiplatform. In this session, I will cover: - A brief introduction to Kotlin Multiplatform - How to use native APIs like the camera or NFC tags - How to integrate existing native SDKs without a full rewrite | Some familiarity with Kotlin and Kotlin Multiplatfrom would be nice, but it is equally accessible to anyone eager to explore Kotlin Multiplatform | 40 minuites | English | クロスプラットフォーム(Cross-platform Development) |
76 | Intelliji Plugin Development | Abdul | In our development, we often find ourselves grappling with repetitive tasks that eat away at our time. During my tenure at a previous organization, my team and I frequently encountered the laborious chore of creating various models for API responses, domains, UIs, and their corresponding mappers. This repetitive cycle became a significant time sink for us.
Seeking efficiency, I envisioned a solution: automating the process through a plugin harnessing Kotlin to JSON plugin capabilities. However, before I could materialize this vision, I needed to delve into the intricacies of Plugin development. In this session, I'll share my journey into - Plugin development, - offering insights for those just starting out - Understanding the basics to implementing diverse menus and executing a range of actions. - how I automated my model creation | - Some familiarity with Kotlin
- Interested in IntelliJ plugin development | 40 minuites | English | 開発ツール&サービス(Development Tools and Services) |
77 | アプリをリリースできる状態に保ったまま段階的にリファクタリングするための戦略と戦術 | Yuki Anzai | Android アプリには様々な要因でリファクタリングが必要になることがあります。
Java を Kotlin に書き換えたい、メンテナンスされなくなったライブラリをやめて別のものに移行したい、巨大な Activity, Fragment を解体したい、ViewModel を導入したい、Hilt を導入したい、UI を View から Compose に移行したい、何もかも作り直したい... しかし大抵のアプリ、特に巨大だったり歴史が長いアプリではこのようなリファクタリングが簡単にはできない状況になっていることが往々にしてあります。 さらに、リファクタリングのためにアプリのリリースを長期間止めることはビジネス的にも現実的ではありません。 アプリを継続的にリリースしながらこれらのリファクタリングに取り組むには、何をどのような順番でどのように取り組むかという戦略が大事になります。 このセッションでは、私がさまざまなアプリのリファクタリングに関わる中で培った、アプリをリリースできる状態に保ったままどうやって段階的にリファクタリングしていくのか、という戦略の話をします。その上で各リファクタリングで役に立つ戦術・テクニックも紹介します。 | 大きい/歴史のあるアプリのリファクタリングに取り組んでいる方
アプリのリリースを継続しながら段階的にリファクタリングしたい方 | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
78 | サプライチェーン攻撃に備える | RyuNen344 | 近年サプライチェーン攻撃が増加しています。本セッションでは、Gradleを用いたandroidプロジェクトにおけるライブラリの安全な運用と脆弱性管理について以下の内容を中心に解説します。
1. Gradleにおけるライブラリの署名検証 - 依存関係の検証設定方法 - Dependency LockingとTransitive Versionの管理 2. 実際に攻撃に対応するための備え - DependabotやRenovateなどの外部ツールを使ったライブラリの管理と脆弱性通知 - GitHub Actionsを活用した備え方 本セッションを通して、Gradleを用いたandroidプロジェクトの具体的な対策について習得することをゴールとします キーワード: Gradle, PGP, signature, SLSA, SBOM | Gradleを用いたプロジェクトで外部ライブラリを安全に使用したい方
android開発におけるサプライチェーンリスクに関心を持つ方 | 40 minuites | 日本語 / Japanese | 開発ツール&サービス(Development Tools and Services) |
79 | 複雑な構成をしたアプリで Jetpack Compose の Navigation を導入した話 | nagayan | Jetpack Compose や Compose での Navigation が登場してから早 3 年が経過し、多くの Android アプリケーションで使用されるようになりました。しかし、複雑な構成をした多機能なアプリケーションでは導入には時間がかかるため、なかなか取り入れることができない人も少なくはないと思います。
私が担当しているニュースアプリにおいて、多階層構造を構築し、Jetpack Compose の Navigation を導入しました。今回はその経験を以下の3点に分けてお話しします。 ・既存の構成と Navigation を導入するまでの問題点について ・多階層構造の設計について ・遷移対象の画面が多くなる場合の工夫点 この発表が Navigation の導入になかなか踏み出せなかった方達へ少しでも参考になれば幸いです。 | ・Jetpack Compose や Compose の Navigation について知りたい方
・Navigation が導入をしたいが、ハードルが高くて困っている方 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
80 | 10数年にわたるAndroidアプリアーキテクチャの変遷 | kgmyshin | 2024年現在Androidアプリアーキテクチャの話題は公式からガイドも発表されたのもあり、ある程度の落ち着きや成熟を見せています。
今日に至るまでに、Androidアプリ開発においてソフトウェアアーキテクチャの歴史はさまざまな変遷を遂げてきました。 私自身その時その時で当時ベストプラクティスだったアーキテクチャを実際に採用してきましたし、またソフトウェアアーキテクチャに関わる本なども執筆しておりました。 このセッションではその変遷がどういうものだったのかについて説明します。 このAndroidアプリ開発におけるソフトウェアアーキテクチャの変遷は、GUIアプリケーションにおけるソフトウェアアーキテクチャの変遷をこの約10年間で早送りしてきた歴史に感じています。 現状のアーキテクチャを知っていれば「いままで何を課題と感じて何を解決してきたのか」を知ることができますし、過去すでに解決した課題に陥ることも少なくなります。 ■ 目次案 1. 何もなかった時代(もしくは思い思いのMVCを実装していた時代) 2. MVP 3. MVVM 4. Android Clean-Architecture あるいは レイヤー化アーキテクチャ 5. Redux / Flux 6. Compose時代 7. これから | * Androidアプリ開発者
* Android Developers に アプリアーキテクチャガイド がない時代を知らない人 | 40 minuites | 日本語 / Japanese | アプリアーキテクチャ (App Architecture) |
81 | Creative and complex user interfaces with Compose UI | Chris Horner | While most of the time following Material recommendations on Android makes sense, Compose UI allows us to be more expressive than ever before.
In this session we will recreate complex user interfaces from video games to showcase how to really stretch Compose's APIs. Topics will include: - Drawing custom shapes - Animating path data - Non-standard shapes in LazyColumn/LazyRow - Custom effects inside LazyColumn/LazyRow - Remaining usable and accessible when not using Material | This talk is intended for intermediate level Android developers who have used Compose UI before to build basic interfaces. | 40 minuites | English | Jetpack Compose |
82 | Design Systems on Android: From Implementation to Migration | Chris Horner | Cash App has recently begun migrating to a new design system. This presented multiple challenges: it was built from the ground up with Compose UI and is rolling out inside a ten year old codebase.
This talk will cover: - How to work closely with designers and Figma when building a custom design system - When to adopt Material and when to diverge - Learnings on designing APIs of design system components - Tips for migrating large and legacy parts of your app to a new design system (and Compose UI!) | Intermediate level Android developers who have some experience utilising Material to build their UIs. Also those interested in hearing how a large and old codebase deals with design system adoption and migration. | 40 minuites | English | アプリアーキテクチャ (App Architecture) |
83 | Media3でYoutubeみたいな要件を叶える技術 | ko2ic | 動画アプリを開発する際にデファクトスタンダードアプリであろうYoutubeと同じような動作や仕様を求められることが多いのではないでしょうか?
Youtubeみたいなアプリを作るのはそれなりに難易度が高いですが、Media3になってから簡単になった部分もあります。 たとえば、Youtubeのプレミアムユーザではバックグランド再生ができますが、これは、昨年正式リリースしたMedia3であれば、MediaSessionServiceとMediaControllerを使えば容易に実装可能で、プレミアムユーザと無料ユーザもコード上で綺麗に書くことができます。 動画アプリではそれ以外にもPIPやダウンロード機能、ショート動画やシークバーなど考えることがたくさんあるかと思います。 このセッションでは、Youtubeみたいな動画アプリをどのように作るのかをできるだけ説明し、動画アプリ作成のハードルを下げればと考えています。 | * 動画アプリを最初から作りたい人
* ExoPlayer時代の知識のままの人 * Youtubeみたいな体験を求められている動画アプリ開発者 | 40 minuites | 日本語 / Japanese | Jetpack |
84 | PDF Viewer作成の今までとこれから ~ Android 15で進化したPdfRenderer~ | Hunachi | 皆さんはAndroidでPDF Viewerを作成するというとどういったイメージをお持ちですか?
「PDF Viewerを自前で作るのは高コストなのでサードパーティ製のライブラリを使うべきだ」、「メモリのパフォーマンスが悪そう」というイメージをされているかもしれません。 しかし、サードパーティ製のライブラリではお金がかかり続けるかもしれませんし、仕様によっては自前でPDF Viewerを作らなくてはいけない事もあります。 そこでこのセッションでは、PDF Viewerを作成した経験を元に、AndroidでPDF Viewer作成する方法やTipsについて紹介します。 また、PDF Viewer作成の際に使用するPdfRendererに、Android 15より新しい機能が多く追加されました。この新しい機能の使い方・考えられる活用方法についても紹介します。 このセッションで話すこと ・Androidの標準APIを使って、基本的なPDF Viewerを作成する方法 ・Composeを使いPDF Viewerを作成する方法 ・PDF Viewerを作る上でパフォーマンスの問題とその解決案 ・PdfRendererのAndroid 15からの新機能 このセッションで話さないこと ・xmlを使用してPDF Viewerを作成する方法 ・PDF Viewerライブラリを使用してPDF Viewerを作成する方法 | ・PDF Viwerの導入を検討中の方
・電子書籍・漫画アプリを開発していてCompose化を進めたいと思っている方 ・PDF関連APIの最新動向をキャッチアップしたい方 ・PDF Viwerの実装方法に興味がある方 | 40 minuites | 日本語 / Japanese | 開発ツール&サービス(Development Tools and Services) |
85 | Deeplinking Demystified | Maxime Labat | Deep links, while being a common and usually important point-of-entry for every application, is often considered a side feature of most applications.
It's likely that a lot of developers have been relying on Firebase Dynamic Links or other third party services for deep linking to their application without really considering how those deep links are working. With Firebase Dynamic Links being phased out, developers might be looking for a way to replace existing deep links with other solutions. In this talk, I will introduce the different types of deep links supported in Android (using custom schemes, using Android App Links) and what kind of situation each type is best fit for; what are deferred deep links and how to implement them; explain about common deep link development pitfalls; also, to have a full picture on how services like Firebase Dynamic Link are implemented, necessary set-up on web (frontend and backend) as well as (if time allows) iOS implementation will also be touched upon. | People who
・Use deep links in their app using a third party service (especially Firebase Dynamic Links) ・Are interested to challenge implementation of deep links by themselves ・Need deep linking as part of their application ・Want to understand how deep links work within the Android system | 40 minuites | English | アプリアーキテクチャ (App Architecture) |
86 | 宣言的データフローでシームレスに情報を伝達して宣言的UIのメリットを最大化しよう | usuiat | MVVMアーキテクチャを利用したComposeアプリでは、ViewModelでUiStateを定義し、FlowでComposeに渡すパターンがよく使われます。
しかし、そのパターンにどんなメリットがあるのか、理解できていますか? 本当に宣言的UIのメリットを活かしきれていますか? ComposeはUIの作りやすさが注目されがちですが、状態管理が容易でバグが発生しづらいことも大きなメリットです。そしてこのメリットは、UIのみならずアプリ全体に恩恵をもたらします。 このセッションでは、宣言的UIのメリットを最大化するための「宣言的データフロー」について、Composeの具体的なコードを示しながら説明します。 宣言的UIは、下記の特徴を持ちます。 - 入力が決まれば表示が決まる - 入力が変化したら自動的に表示が更新される この特徴をアプリ内のデータの流れに当てはめた手法を、宣言的データフローと定義します。Composeアプリにおける宣言的データフローは以下で構築します。 - イミュータブルな状態定義 - Flowによるデータ伝達 宣言的データフローを活用すると、アプリが以下の特徴を持つようになります。 - 情報源からデータを取得した時点でUIの表示が決まる - 情報源から取り出したデータが変化したら自動的にUIの表示が更新される ここまでくれば、ModelとViewModelとComposeがシームレスにつながり、必要な情報がComposeツリーの末端まで滞りなく行き渡ります。コードの見通しが良くなり、状態管理が容易で、バグが発生しづらくなります。 このセッションを通じて、アプリ全体の流れを俯瞰できる知識を提供します。宣言的UIとComposeの素晴らしさを一緒に再確認しましょう。 | ComposeアプリにMVVMやUiStateを利用しているが、いまいちメリットを理解しきれていない人
Composeアプリの設計について理解を深めたい人 | 40 minuites | 日本語 / Japanese | アプリアーキテクチャ (App Architecture) |
87 | Road to Single Activity | yurihondo | 近年、Jetpack Composeを採用するプロジェクトが増加していると思います。
弊社U-NEXTのプロジェクトもその一例であり、以前はAndroidViewを利用してUIを構築していましたが、Composeを導入し、Navigation Composeを活用して画面遷移の仕組みを含むUIアーキテクチャを刷新しました。 しかし、その後の運用でいくつかの問題に直面しました。 具体的には、弊社アプリではNavigation Bar/Railを採用し、大きな機能ごとにタブ(Top-level Destination)を分け、NavGraphもその単位で分割しています。 しかし、各機能が密接に連携する仕様上、それらを跨ぐ画面遷移が頻繁に発生します。 さらに、そういった画面にはDeep linksによって呼び出されるものも含まれ、画面遷移は非常に複雑です。 これまでは、このような画面を共用するActivityに切り出すことで解決していましたが、Local Compositionの再設定やActivityごとにNavGraphの用意が必要になるなど、運用面でのコストが問題となりました。 そこで、こうしたケースに対して共用するActivityを用いた解決方法をやめ、Navigation Composeをフル活用したUI周りのアーキテクチャの刷新をもう一段階進め、Single Activity化を目指しました。 このセッションでは、弊社プロジェクトの事例を基に、Navigation Composeの利用方法を主役に以下のポイントについて詳しく紹介させていただきます。 - AndroidViewからComposeへのUIアーキテクチャの段階的な移行方法 - 複雑な画面遷移の仕様を持つアプリの開発例 キーワード - Navigation Compose - Nested NavGraph - Common NavGraph - Type safe navigation - Default argument - Multi back stack management - Top-level Destination’s back stack management - Navigation Bar/Rail control with WindowInset consideration - Screen Transition by Deep links - Compose Destinations (OSS) | - Android ViewからComposeへ移管するにあたってNavigation Composeの導入ノウハウを知りたい方
- Navigation Bar/Railの複雑なBackStack管理方法の事例を知りたい方 - Navigation Composeを用いた複雑な画面遷移の実現方法を知りたい方 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
88 | 複数プラットフォームで複数種類の定期購読に対応する | yurihondo | 弊社のアプリは、ひとつのソースでAndroid向けとFire OS向けのビルドに対応しており、サブスクの購入などのために持っているアプリ内課金の機能についても、複数プラットフォーム(Google Play Store、Fire Store)に対応しています。
アプリ内課金の手続きは、プラットフォーム毎になどは異なるため、うまく抽象化&モジュール分割をしてひとつのコードとして扱えるようにしています。 特に、 Fire Store向けの購入処理については、QuickSubsといった特殊な購入方法にも対応できるように設計しております。 さらに、複数プラットフォームで複数種類の定期購入の商品にも最近対応を行っており、アプリ内課金についてのノウハウがたまってきました。 このセッションでは、 - 複数プラットフォーム向けのアプリ内課金を一つのソースで実現する方法 を各プラットフォームを比較しながら紹介しつつ、 - Fire OS向けの特殊な購入のハンドリング方法の紹介 に触れ、 - 複数プラットフォームで複数種類の定期購入する機能を実装した時のノウハウ をお伝えします。 キーワード - Play Billing Library - Amazon IAP API - Amazon QuickSubs | - 複数プラットフォーム(Google Play Store/Fire Store)のアプリ内課金方法を知りたい方
- 特にFire Storeのアプリ内課金について深く知りたい方 - 複数の定期購読の実現例を聞いてみたい方 | 40 minuites | 日本語 / Japanese | 開発ツール&サービス(Development Tools and Services) |
89 | 大規模コミュニケーションアプリにおける画像アレンジ機能の実装 | phicdy | 当コミュニケーションアプリでは、ユーザが複数の画像をキャンバスに追加し、ジェスチャーを用いて画像の位置、角度、サイズを調整することで、チャット内で豊かな表現を可能にする機能を実装しました。この機能は非常に有用である一方で、アプリやサーバ内で扱う画像データの量が膨大に増えることにより、アプリ内のメモリ消費量の増加やサーバのストレージ費用の増額などの課題が発生しました。
このセッションでは、これらの問題に対してどのような技術的な選択を行ったか、得られた知見、具体的な実装例について詳しく説明します。 発表内容 1. 大規模なデータ量に対応したデータフローとデータ構造の設計 - ユーザー間で画像データを送信する際の選択肢とその評価 - 最終的に選ばれたソリューションとその選択理由 2. 画面内に表示するAPNG画像の増加を考慮した画像ライブラリの選定 - メモリ効率の良い画像ライブラリの選定理由とその効果 - 選定したライブラリがどのようにメモリ効率を向上させるかの解説 - ライブラリ置き換え時に遭遇した問題とその解決策 3. ジェスチャーによる画像操作の具体的な実装方法 - ScaleGestureDetectorを利用したジェスチャーによる画像の拡大、回転を実現するためのコーディング手法 - カスタムViewのonInterceptTouchEvent()/onTouchEvent()によるタッチイベントの検出と処理方法、およびそれを画像操作にどう変換するかの詳細 | - 画像アレンジ機能に興味のある方
- 大規模なデータ量を扱う技術選択に興味のある方 - ジェスチャー機能による画像操作に興味のある方 - APNG画像を取り扱うライブラリに興味のある方 | 40 minuites | 日本語 / Japanese | その他(Other) |
90 | 極力作業しない Android アプリのリリースワークフロー | tick-taku | 本セッションは Android アプリのリリースプロセスを効率化するためのワークフローを紹介します。
背景としてアプリのリリースは基本的にエンジニアが行っていることが多いと思いますが、手動でのリリースプロセスは時間がかかりヒューマンエラーも起こりやすく、それらがリリースの遅延や品質低下を引き起こします。またスクラム開発などを採用しているチームでは毎週リリースしていたりすると、リリースに必要な作業時間が多い場合かなりの負担となります。昨今注目されている Four Keys の観点からも開発のパフォーマンスを向上させるため、リリース作業の時間を短縮しヒューマンエラーを防ぐ必要があります。 今回発表する内容は、リリースフローにおけるバイナリのビルドやストアへのアップロード、リリースノートやリリース時 QA の管理などを GitHub Actions や Bitrise を用いて自動化しリリースプロセスのリードタイム短縮のためどのようなワークフローを構築したかを紹介します。 本セッションでは以下の様な内容を話す予定です。この発表は Android アプリのリリースプロセスを自動化・効率化したいデベロッパーやチームリーダーに聞いてほしいです。 - GitHub Actions や GitHub CLI を使った Android アプリのリリースに伴うタスクの自動化について - Bitriseを使ったCI/CDパイプラインの構築 - Notion API を活用したリリース前QAの管理方法 - リリースノートの運用方針など | Android アプリのリリースプロセスを自動化・効率化したいデベロッパーやチームリーダー | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
91 | 今さら聞けないCompose Modifier | Yuichi Ishijima | Jetpack Composeではレイアウトを装飾・拡張するためのさまざまなModifierが提供されており、みなさまも初めてJetpackComposeを使用するときから当たり前のように使用していると思います。
だからこそModifierをなんとなく使っていませんか?Modifierの役割や使用方法を理解することで、より柔軟で洗練されたレイアウトを作成することができます。 本セッションではModifierの基本的な使い方から、あまり使わない応用的なものまで説明します。 予定カテゴリ ・Modifierとは ・paddingなどの基本的なModifier ・特定のスコープでのみ使用できるModifier ・Modifierの順番について ・描画やセマンティクスなどに関する普段あまり使わないModifierについて ・カスタムModifierについて実例 | ・Jetpack Composeを使ってアプリ開発をしている方(したい方)
・今まであまり深く考えずにModifierを使っていた方 ・Modifierをもっと活用したい方 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
92 | 海外就職というキャリアの選択肢 | tetsu | コロナ禍により、多くの国内外の企業がテレワークを導入し、勤務形態が相対的に柔軟になりました。また、日本人が海外に出稼ぎに行く時代となり、そう考えているAndroidエンジニアも増えています。
本セッションでは、スピーカーの経験を基に、海外に挑戦したいAndroidエンジニアに向けて以下の内容を紹介します。 ・Why ・海外を選ぶ理由とキャリア形成 ・グローバルな視点でAndroid開発の利点 ・How ・心構えと前提条件 ・仕事を見つける方法 ・組織ステージの相性や特徴 ・必要なスキルや経験(特にAndroid開発におけるもの) ・通用しないもの ・条件を満たさない場合の策、または就職以外の選択肢 ・What ・スピーカーの体験談 ・苦労したことと得たもの ・避けるべきパターン | ・海外でのAndroid開発に興味がある方
・キャリアに悩んでいる、もしくは転職を考えているAndroidエンジニア ・ワーキング・ホリデー制度の利用を考えている方 ・海外採用に関わる方 | 40 minuites | 日本語 / Japanese | @Experimental ソフトスキル(@Experimental Soft skills) |
93 | クロスデバイスな認証フローの難しさ : ID連携/パスキーのプロトコルから見る脅威と対策 | ritou | ここ数年、スマートフォンとPCや施設のデバイス上で動作するアプリケーションを連動させるユースケースが増加しています。DroidKaigiに興味を持たれている開発者やサービス関係者の皆さんならば、その意義を容易に想像できるでしょう。この動きは決済分野にとどまらず、私が専門とするDigital Identityの分野にも広がっています。
具体的には、以下のような例があります。 - 手元のスマートフォンを用いてPC上のアプリケーションにログインするケース(PCのマイナポータルへのアクセスやパスキーのハイブリッドトランスポートなど)。 - スマートフォンに保存されている情報を別のアプリケーションに提示して本人確認を行うケース(マイナンバーカードのスマホ用電子証明書やモバイル運転免許証など)。 これらのユースケースでは、主に以下の手段が用いられます。 - スマートフォンに保存された2次元バーコードを提示する方法 - スマートフォンと他のデバイス間での近距離無線通信 これらの手段はあくまでデータの受け渡しを行うための仕組みであり、データの取り扱いはアプリケーションの設計に依存します。FIDO2(WebAuthn)、OAuth/OIDC、Verifiable Credentialsといったプロトコルやフレームワークでは、安全に実装するための検討と工夫がなされています。しかし、安全な実装と使いやすいUXという本来両立しなければならない両者のトレードオフ、技術仕様だけではカバーしきれないユーザーアクションにより、これらの仕組みには「完全に安全」とは言えない部分もあります。 私は2022年のDroidKaigiにて、パスキーの解説とともに、手元のスマートフォンを用いた認証フローを紹介しました。 https://speakerdeck.com/ritou/chromedeti-yan-dekiru-ren-zheng-notamenobiao-zhun-hua-shi-yang-no-xian-zai-towei-lai-at-droidkaigi-2022 ここから2年弱が経ち、特にパスキーについてはパスワード認証に代わる安全な方法として実際の導入が進んでいます。この流れを阻む意図はありません。ID連携やパスキーの導入が進み、「当たり前」となるためには、プロトコルやユースケースレベルでの脅威と対策を整理し、認識する必要があります。その上で、開発者が自身の要件に対して十分な安全性を実現するために何をどこまで行う必要があるかを判断できるのが理想です。 本投稿ではここまで紹介した「手元のスマートフォンを用いて...」という、いわゆるクロスデバイスな認証フローにおける脅威と対策について見ていきます。 このクロスデバイスな認証フローを実現するにあたって選択肢となるOAuth 2.0, OIDC, Passkeyといったプロトコルについてのセキュリティ面の検討がIETFで行われています。 https://datatracker.ietf.org/doc/html/draft-ietf-oauth-cross-device-security このような標準化活動で行われた検討や考察も参考にしながら、開発者が「ここまでできる」「これはこうすることで対策できる」「ここから先はまだ無策」といった線引きをできるようになり、安全な設計/実装の手助けになるような内容を目指します。 | モバイルアプリケーションやスマートフォンと連動するアプリケーションの設計、開発に興味のある開発者に聞いてほしいです。
また、ID連携、パスキーといった認証認可の分野に興味がある、ぐらいの開発者にとっても単純なプロトコルの解説とは異なる観点の整理となるため、参考になることが多い講演となるでしょう。 | 40 minuites | 日本語 / Japanese | Security / Identity / Privacy |
94 | スクリーンショット容量にもう悩まない!、Visual Regression Testingの課題と解決方法2024最新版 | Shun Miyazaki | UIテストを実施したいけど、なかなか手を出せない、、なんて悩みはありませんか?
AndroidのUIテストは実装コストがそこそこ高く、やりたいけどできていないという人が多いのではないかと思います。 そんな人におすすめしたいのが、Visual Regression Testing(以下、VRT)です。 Visual Regression Testing(以下、VRT)とは、 事前にアプリ外観のキャプチャを保存しておいて、見た目の変化を自動検出するリグレッションテストのことで、 見た目のテストであれば、VRTでコストをかけずにカバーできます。 AndroidでVRTを実現する方法は、いくつか種類がありますが、 私が所属しているプロジェクトでは、PaparazziとShowkaseを採用しています。 本セッションでは、まずPaparazziとShowkaseによるVRTの導入方法を説明したあとに、 VRT運用時に直面する、スクリーンショット容量問題の解決策について話します。 VRTでは生成したスクリーンショットを保存しておく必要がありますが、 問題になるのは、どこに保存するか?です。 一番簡単なのは、プロジェクト内に保存する方法ですが、 その場合、スクリーンショットが増えてくると、プロジェクトのデータ量が肥大化してしまいます。 (Github Repositoryのサイズは最大10GBなので、将来的なリスクもあります) スクリーンショット保存用のGit Branchを作って運用する方法もありますが、 Repositoryの容量を圧迫する問題は以前としてあります。 解決策の一つは、 プロジェクト内に保存するのではなく、外部ストレージを利用する方法です。 私が所属しているプロジェクトでは、 外部ストレージに、信頼性があって比較的コストの安いAmazon S3を採用しました。 VRTとS3の連携方法は、 Webだと先行事例がたくさんあるのですが、 Androidでは事例が少なく、手探りでの開発でした。 特にマルチモジュールを採用していると、 VRTで生成される画像やレポートは、モジュールごとに生成されるので、 S3と連携するためには工夫が必要です。 こちらの解決策についても解説します。 本セッションを通じて、 VRTの導入〜運用までの実践的な知識を得ることができます。 | これからVisual Regression Testingを導入したい人
Visual Regression Testingの運用を改善したい人 | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
95 | 3年目のフルJetpack Composeアプリの運用から得た学び、経験、すべて | nakamuuu | Jetpack Composeを全面採用したAndroid版『B/43』(2021年末リリース)はまもなくリリースから3年を迎えます。開発を本格化したのはJetpack Composeがまだ正式版に至っていない2021年春のことで、すでに3年半が経過しています。
新たなUIフレームワークを黎明期に取り入れ、生産性を下げずに開発を進めるにはさまざまな試行錯誤や工夫がありました。私たちが黎明期に苦しんだ課題も、現在のJetpack Composeの成熟によって解消されているものがあります。 このセッションではフルJetpack Composeアプリである『B/43』の運用での学びを、画面遷移、UI実装、サービス固有の技術課題…などなど多様な観点で紹介します。Jetpack Composeの導入に前のめりに取り組んだ立場から、これから導入を本格化する方にとって有用なヒントをお伝えできることを目指します。 | ・フルJetpack Composeアプリならではのメリットや課題に関心のある方
・Jetpack Composeの導入を進めるにあたって生産性の担保に課題を感じている方 ・UIフレームワークとはじめとした黎明期の技術に対する向き合い方に興味のある方 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
96 | Unleashing the Potential of Jetpack Glance 〜可能性と制約を踏まえたApp Widget開発実践〜 | nakamuuu | 2023年9月に正式版が公開されたJetpack Glanceにより、App Widgetの開発体験は大きく向上しました。しかし、Jetpack Glanceを用いる場合もレイアウト実装や更新戦略などにおいて、App Widget特有の数多くの制約を受けます。
本セッションではJetpack Glanceを用いたApp Widgetを実プロダクトに導入した経験を元に、ウィジェット開発における知見や手法、ハマりどころを紹介していきます。直近のライブラリの更新やウィジェット向けのデザインガイドラインの公開も踏まえて、高品質なApp Widgetを開発する上で意識すべきポイントにも触れていきます。 Jetpack Glanceによりもたらされた可能性と制約を正しく捉えた上で、参加者がウィジェット開発における実践的なノウハウを獲得できることを目指します。 | ・実プロダクトへのJetpack Glanceの導入に関心のある方
・Jetpack GlanceでのApp Widget開発における知見や制約を理解したい方 | 40 minuites | 日本語 / Japanese | Jetpack |
97 | 起動時間で差をつけろ!アプリ起動パフォーマンス改善! | yanmar | このセッションでは、Androidアプリの起動時間を短縮し、ユーザー体験を向上させるための具体的な方法を解説します。
■アプリの起動時間とは - 起動プロセスの全体像 - アプリ起動に影響を与える要素の詳細 ■パフォーマンス検査 - Macrobenchmarkを使用した検査方法 - Perfettoを使用した検査方法 ■パフォーマンス向上 - ベースラインプロファイルによるコード実行速度改善 - 起動プロファイルを使った起動時間の短縮 - App Startupライブラリによる起動シーケンスの簡素化 - コードレベルでの最適化方法 ■パフォーマンスモニタリング - Firebase Performance Monitoringの設定と運用 このセッションを通じて、アプリ起動時間の短縮に必要な知識とツールの使い方を習得し、実践的な改善策を自分のプロジェクトに適用しましょう! | ■Androidエンジニア
- パフォーマンス改善に興味がある方 - アプリの起動時間を改善したいと考えている方 ■開発プロジェクトリーダーやマネージャー - チームのアプリ品質を向上させたい方 ■QAエンジニア - アプリのパフォーマンス検査とモニタリングに携わる方 | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
98 | Unblocking The Main Thread: Solving ANRs and Frozen Frames | Sinan Kozak | In the realm of Android development, the main thread is our stage, but too often, it becomes a battleground where performance issues arise, leading to ANRs, frozen frames, and sluggish Uls. As we strive for excellence in user experience, understanding and optimizing the main thread becomes essential to prevent these common performance bottlenecks.
We have strategies and best practices for keeping the main thread uncluttered. We'll examine the root causes of performance issues and techniques for monitoring and improving main thread health as well as app performance. In this talk, participants will walk away with practical knowledge on enhancing app performance by mastering the main thread. We'll share proven approaches to eliminate real-life ANRs and frozen frames to build apps that deliver butter smooth experience. | Android developers, Android studio users, coroutine | 40 minuites | English | 開発体制(Development Process) |
99 | Master of Back | tomorrowkey | Androidには「戻る」という概念があり、ユーザー体験を左右する重要な要素です。
画面遷移における「戻る」操作は、アプリの構造を構成するコンポーネントと密接に関わっており、これまで「Activity」「Fragment」「Compose UI」といった異なるコンポーネントが登場し、それぞれで「戻る」の制御に異なるアプローチをとってきました。 本セッションでは、Androidの歴史における「戻る」機能の進化を振り返りながら、現代の開発においてどのように「戻る」を効果的に制御すべきかを解説します。最新のベストプラクティスを紹介し、実践的なコード例を通じて、参加者が自身のプロジェクトに適用できる知識を提供します。 | - 携わっているプロダクトの歴史が長く、ざまざまなアプローチで「戻る」の制御がされており、今後改善をしていきたいと考えている方
- 最近Androidアプリ開発を始め、過去どのように「戻る」が制御されてきたか歴史に関心が高い方 | 40 minuites | 日本語 / Japanese | UI・UX・デザイン (UI・UX・Design) |
100 | 現代のアプリ開発におけるWebViewのベストプラクティス | tomorrowkey | Androidアプリで安全かつ効率的にWebページを表示する手段として、Android Custom Tabsが一般的に利用されています。しかし、より深いWebとアプリの統合を求める場面では、依然としてWebViewの需要が高いのが現実です。WebViewはその柔軟性ゆえに、多くの状態を管理する必要があり、適切な実装方法を知らないとコードが複雑になりがちです。
私達のプロダクトでも同じモチベーションからWebViewを使うことになりましたが、過去に経験したWebViewの扱いの難しさから、要件の実現と保守性を両立するために検討をすすめました。 もともと持っていたWebViewに関する知識をアップデートするために再学習し、WebViewだけでは不足している状態の管理方法について有限オートマトンを使って高い保守性を実現することができました。 このセッションでは、私たちのチームで獲得したWebViewに関する最新のアップデートとデータ管理方法について紹介し、アプリとWebViewをシームレスに統合するための具体的なアプローチを解説します。これにより、参加者はWebViewが持つ可能性を最大限に引き出し、安全で保守性の高いアプリを構築する方法を学ぶことができます。 | - 携わっているプロダクトでWebViewを利用しており、品質向上に関心がある方
- 過去にWebViewで変更容易性と品質維持に苦労したことがある方 - これからWebViewを使ったアプリを作りたいと考えている方 | 40 minuites | 日本語 / Japanese | Android Framework |
101 | 効率的なリリースワークフローの構築: 属人化から標準化へ | tomorrowkey | プロダクト開発におけるリリースワークフローは、チームの成果を迅速かつ安全に世に送り出すための重要な要素です。私たちのプロダクトでは、当初、リリースワークフローが整備されておらず、属人化や多くの手作業、不定型なタスクが横行し、インシデント発生のリスクが高い状態でした。
本セッションでは、リリースワークフローの改善に向けて私たちが取り組んだ具体的な方法を、Androidエンジニアの視点から紹介します。チームの協力体制の確立と技術的な改善策をどのように実施したか、成功例とともに解説します。参加者は、ワークフローの標準化と効率化に向けた実践的な知見を得ることができます。 | - リリースワークフローを手作業で行っている方
- 自動化に興味があるが、なにから手をつければいいか分からない方 | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
102 | フルComposeでSingleActivity対応の動画プレイヤーを作る | tomoya0x00 | Androidアプリで動画プレイヤーを実現する場合、一般的にはJetpack Media3に含まれているExoPlayerで実現することが多いでしょう。
ExoPlayerはUIコンポーネントを含んでいますが、これらは2024年5月時点ではAndroid View版のみが提供されており、Compose版は提供されておりません。 また、動画プレイヤーを作るには色々とActivityを意識した処理が必要となる事がありますが、Activityへの直接の依存はアプリのSingleActivityを実現するにあたり避けたい事です。 弊社のアプリは2024年にフルCompose版の新規開発アプリでリニューアルをおこない、このタイミングで動画プレイヤーもフルCompose化、かつSingleActivity対応に作り直しをおこないました。 このセッションでは、上記の経験からExoPlayer + ComposeでSingleActivity対応の動画プレイヤーを実現するにあたりどのような課題があるか、またそれらをどのように解決すると良いのか、についてご紹介いたします。 お話しする予定の内容 - Media3とExoPlayerとは? - ExoPlayerでの動画再生開始の流れ - プレイヤーUIをComposeで実現するにあたっての課題と対策 - ExoPlayerは動画の描画にViewが必要 - 動画の再生状況はリスナーパターン、再生位置はポーリングで取得が必要 - ExoPlayerの各メソッドはメインスレッドでの呼び出しが必要 - SingleActivity対応の課題と対策 - スクリーンショットの禁止 - システムバーの表示・非表示制御 - 画面をONにし続ける - PinP対応 - その他課題と対策 - Actiivtyの再生成・Configuration Changeのハンドリング | - ExoPlayerを使用したことが無い方
- フルComposeのUIで動画プレイヤーを作りたい方 - 現在ExoPlayerのUI部分をAndroid Viewで実現しているが、これをComposeで置き換えたい方 - リスナーパターンやポーリングで現在の状態を取得する必要がある外部ライブラリを、どのようにしてComposeと統合すれば良いのか知りたい方 - Activityへの依存が多い画面をどのようにしてSingleActivity対応のScreen Composableにするか知りたい方 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
103 | WebView と仲良くする方法 - ネイティブとWebのスキマを埋める | Hiroshi Nishijima | アプリの中に適切な形で WebView を組み込むことにより、アプリのアップデートなく柔軟に変更できる要素を追加することが可能です。
私たちが開発しているニュースアプリでも、ネイティブの要素の中に WebView を取り込むことで、完全ネイティブ実装と遜色ない操作感を維持しつつ、記事の表現に様々な新しい要素を付け加えることをおこなっています。 しかしながら、WebView はアプリとウェブの境界領域であり、純粋なネイティブアプリの開発と少し趣の異なるノウハウが必要になってきます。 このセッションでは、Web 開発とアプリ開発の両面から「ネイティブに馴染ませる」WebView の組み込みノウハウを紹介します。 具体的には、以下の内容を実例を交えつつ取り上げます。 - WebView を使った時のレンダリングの流れ - アプリとウェブのデータの受け渡し方法と、Webコンテンツの読み込みフェーズごとの使い分け - スムーズなスクロールと犠牲になるもの - Web コンテンツ側で気にしないといけないこと | WebView の組み込みで悩んでいる Android 開発者
Web系のエンジニアと協業する Android 開発者 | 40 minuites | 日本語 / Japanese | クロスプラットフォーム(Cross-platform Development) |
104 | マンガアプリでAnalytics-impressionログの改造をJetpack composeでやった話 | sai.choko | Analyticsログはアプリ運用でますます重要になっている。ユーザーの行動分析、A/Bテストを行い、意思決定の重要な根拠となる。
一般的Screen、Impression、Clickなどのイベントを収集し、ユーザーがどの画面を表示してどのような行動を取っているかを分析する。 今回のテーマはその中でImpressionに関して話す。 - Impressionの基本概念を説明、例えば画面上にどんなitemが表示されている - LINEマンガでは旧Impressionのロジックは1秒遅延後に取っていたがその経緯、scrollイベントとの連動を説明 - LINEマンガでJetpack compose時代に入ってから上記のロジックを100% item表示のロジックの変更になった経緯を広告業界の一般的なImpressionの取り方と比較しながら説明する。 - LINEマンガでJetpack composeで実装した100% item表示ロジックとscrollイベントの実装する時の技術的注意点を説明する - 最後はUnit testでマルチセクションを含めたケースもカバーできるように保証する重要性を説明する ビジネス的な観点とanalyticsのあるべき姿を日々考えている大規模アプリで現在も進行中のものを共有となる。 | Androidの開発者
アプリ運用の方 企画の方 Data scienceの方 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
105 | AndroidエンジニアがFlutterでクロスプラットフォームなアプリを開発して感じた違い3選 | Yohei Kariya | Androidアプリを開発していた私が2024年はFlutterでクロスプラットフォームなアプリ開発ばかりしていました。 Flutterアプリ開発とネイティブAndroidアプリ開発、両方をしてみて感じた違いはたくさんありましたが、個人的に興味深かった3つについてお話します。
- 並行処理 - FCMによるプッシュ通知 - バックグラウンドでの動作 並行処理といえばKotlinのCoroutineを使いUIスレッドと他のスレッドで処理を実行しますが、Flutterアプリ開発で使われるDart言語では並行処理はどのように実現されるのでしょうか?FCMと通知エリアのUIでプッシュ通知を実現しますが、iOSの場合はどうなるでしょうか?位置情報を取得したい等の理由でバックグラウンド処理を継続したい時はForegroundServiceで実現できますが、クロスプラットフォーム環境ではどうなるのでしょうか? これらについてお話します。 | Androidアプリ開発経験者で、クロスプラットフォームなアプリ開発をしてみたい/してみようとしている方。 | 40 minuites | 日本語 / Japanese | クロスプラットフォーム(Cross-platform Development) |
106 | Craft Intelligent Experiences: Building Effortless AI Workflows with Firebase Genkit (Beta) | Ayushi Gupta | Imagine transforming your app with AI features without extensive coding or expertise. Firebase Genkit (Beta) makes this a reality! This session unveils a revolutionary framework that empowers you to seamlessly integrate advanced AI functionalities into your app development workflow.
What you'll learn: Introduction to Firebase Genkit and its potential to simplify AI integration Demystifying AI workflows: How Genkit breaks down complex processes Dive into pre-built AI building blocks: libraries, models, and intuitive tools Leverage the power of vector stores and evaluators for efficient AI experiences Uncover Response-Activation-Generation (RAG) patterns for streamlined workflow design Build AI-powered features with minimal code: A hands-on exploration with Genkit Target Audience: This talk is ideal for mobile developers of all levels who are interested in: Leveraging the power of AI to enhance their apps Simplifying and accelerating AI integration within their projects Exploring the future of Firebase app development with built-in AI capabilities Get ready to: Gain the knowledge and tools to craft intelligent user experiences with minimal effort. Discover how Genkit empowers you to focus on core functionalities while incorporating AI features. Explore real-world examples of how Genkit can revolutionize your app development process. By the end of this session, you'll be equipped to leverage Firebase Genkit (Beta) and unlock the potential of AI to create intuitive and engaging mobile app experiences. | Android | 40 minuites | English | Androidプラットフォーム (Android Platform) |
107 | 公式で用意されているJetpack ComposeのModifierの拡張関数全て試す | KSND | Jetpack Composeで開発をしたことがある方なら、Modifierが便利だと感じたことは一度はあるのではないでしょうか。
私は約2年半Jetpack Composeに触れ、日々Modifierの拡張関数を使っています。 ただ、公式で用意されているModifierの拡張関数のほんの一部しか使えていない自覚があり、実際に確認すると公式ドキュメントに記載のある140個ほど(※1)のModifierの拡張関数の内まだ51個しか使ったことがありませんでした。 そこで、「公式で用意されているModifierの拡張関数を全て試すことでModifierをより使いこなすことができるのではないか?」と考えました。 全て試し、便利だったもの・新しい発見があったもの・単純に面白かったものを中心にピックアップし図解を交えて分かりやすく紹介します。 ※1: Deprecatedされたものや、引数が異なる同じ名の関数はカウントから除外しています。 | - Jetpack Composeに興味がある方
- 実際にJetpack Composeで開発した経験のある方 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
108 | Google Play ストアの定期購入のグレード別および月/年払いプランの組み方、プラン変更、無料試用の設定の詳解 | Hikaru Sato | Google Play ストアの定期購入は実装とGoogle Play Console上で色々な設定ができて複雑だったのでその知見と苦労したポイントを紹介させていただきたいと思います。
発表予定の内容 * グレード別と月/年払いプラン(基本プラン)の設定方法 * 無料試用の設定方法 * purchases.subscriptions api の v1 -> v2 への移行(サーバー側実装) * v1との違い * 苦労したポイント * ユーザーが基本プランを変更した時の無料期間、課金の反映のされ方の違い * 実装(交換モードの設定)やGoogle Play Consoleの設定による影響 * App Storeとの比較(Google Play ストアの定期購入のつらみ) * 開発中での確認方法 * ライセンステスターでも1アカウント1回しか無料試用できない部分をどう乗り越えるかなど | * モバイルアプリの定期購入プランを提供している開発者 | 40 minuites | 日本語 / Japanese | 開発ツール&サービス(Development Tools and Services) |
109 | より良いユニットテストを書くための心得 | Sumio Toyama (sumio_tym) | Androidアプリの自動テストについて、皆さんはどのようなことに悩んでいますか?
・とある関数・メソッドに対して、そもそもテストを書くべきかどうか判断できない ・とある関数・メソッドに対して、どこまで細かく(網羅的に)テストすれば十分なのか判断できない ・テストに失敗したときの調査と修正が大変で時間がかかる ・テストコードを後から見直したときに、そのテストの意図が分からず苦労する ・モックライブラリをどこまで使ってよいのか悩む ・失敗するはずのテストがずっと成功していることに気付いてしまった・・・! これらは私や私の周囲で遭遇した悩みごとですが、皆さんにも心当たりがあるのではないでしょうか? 本セッションでは、主にAndroidアプリのユニットテストにフォーカスして、そのような悩みを減らしていくために押さえておきたいポイントを紹介します。 私自身がこれまでテストの書き方をサポートしてきた経験や、DeNA SWETグループの同僚との議論、関連書籍で主張されている内容などから浮かびあがってきた「テストを書くにあたって知っておくと嬉しいポイント」について、たとえば次のようなトピックを紹介します。 ・テストを書き始める前に考えておいた方が良いこと ・書くべきテストと書かない方が良いテスト ・テストコードを書くときに気を付けること ・モックライブラリを使うときの注意点 このセッションを聴いて下さった皆さんが、日々の業務で 「このテストはこう書いた方が良い」 「このテストの書き方は後から問題になるので別の方法を考えよう」 といった判断ができるようになり、テストにまつわる悩みを減らして行けるようになることを目指します。 ※Androidアプリ開発で広く使われているツールやライブラリ(JUnit4、Truth、MockKなど)を前提に説明する予定ですが、ライブラリの使い方そのものについては紹介しません。 ※テスタブルな設計については深入りしません。説明する上でプロダクトコードの設計に触れる必要がある場合は、Now In Androidアプリ[1]や、Androidのアプリ アーキテクチャガイド[2]で説明されているアーキテクチャを念頭に説明します。 [1] https://github.com/android/nowinandroid [2] https://developer.android.com/topic/architecture?hl=ja | ・いざテストを書こうとすると、何をテストするべきか悩んでしまう方
・Androidアプリのテストのより良い書き方を模索している方 ・CIでテストが失敗したときの原因が分からずに苦労したことの有る方 | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
110 | 仕組みから理解する!Composeプレビューを様々なバリエーションでスクリーンショットテストしよう | Sumio Toyama (sumio_tym) | Jetpack Composeのプレビュー関数[1]を使ったVisual Regression Test (VRT)が徐々に広まってきています。
Robolectric [2]・Showkase [3]・Roborazzi [4]が登場したお陰でその実現はとても簡単になったものの、いざ運用を開始してアプリ開発を進めて行くと、次のような思いが出てくるのではないでしょうか。 ・ナイトモード(ダークモード)の色指定ミスを発見したい ・タブレット端末でのレイアウトも確認したい ・様々な言語(ロケール)でレイアウトが崩れていないか確認したい このようなバリエーションのスクリーンショットをVRTに組み込むためには、 各ツールががどのように連携してスクリーンショットを撮っているのか、より深い理解が必要になります。 本セッションでは、次のようなトピックの紹介を通じて、前述したような様々なバリエーションのスクリーンショットを撮る方法を説明します。また、Google I/O 2024で紹介されたCompose Preview Screenshot Testing [5]を使った実現方法も合わせて紹介し、Robolectric + Showkase + Roborazziを組み合わせて使う場合との違いを明らかにします。 ・各ライブラリが提供する機能 ・Robolectric ・Showkase ・Roborazzi ・Robolectric + Showkase + Roborazziを使ったプレビュー関数のスクリーンショット実現の仕組み ・Robolectric + Showkase + Roborazziで様々なバリエーションのスクリーンショットを撮る ・ComposeTestRuleの機能を使って実現方法 ・Robolectricの機能を使った実現方法 ・Jetpack Composeの機能を使った実現方法 ・Compose Preview Screenshot Testingを使う場合の実現方法 ・Robolectric + Showkase + RoborazziとCompose Preview Screenshot Testingの違いと使い所 ※CIの構築や運用については触れません 各ライブラリの仕組みや機能が分かれば、本セッションで紹介する以外のバリエーションに対応することも容易です。 皆さんも本セッションを聴いて、ついつい確認を後回しにしがちな、特定のバリエーションにおけるUIのバグ発見はVRTに任せてしまいましょう! [1] `@Preview`アノテーションが付いたComposable関数。レンダリング結果をAndroid Studioでプレビューできる [2] https://github.com/robolectric/robolectric [3] https://github.com/airbnb/Showkase [4] https://github.com/takahirom/roborazzi [5] https://developer.android.com/studio/preview/compose-screenshot-testing | ・プレビュー関数を使ったVRT(Visual Regression Test)に興味があるが、一歩踏み出せていない方
・より様々なバリエーションのスクリーンショットをVRTに組込みたい方 ・ダークモード、フォントサイズ拡大、タブレット対応などのレイアウト確認で疲弊している方 | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
111 | 実践Google Map on Compose | カニ蒲 | google-map-composeの登場によって、宣言的UIを用いて、Map内でのインタラクションやコンテンツの描画をより直感的に行えるようになりました。
さらに、クラスタリングやストリートビューデータなど、これまでユーティリティライブラリでのみ利用可能だった機能が、Composeでも段階的にサポートされつつあります。 また、昨年よりGoogle Maps Platformでは、Routes APIをはじめとするさまざまな新たなAPIが提供され、デベロッパーがユーザーに提供できるサービスの幅が日に日に広がっています。 本セッションでは、以下のセクションに分けて、GoogleMapの定番化した機能から、モダンな機能まで1からSDK特有の知識や仕様を噛み砕きながら、 Androidでどう開発するか?に重きを置いて、紹介していけたらと思っております。 - 基礎的なピン描画や、マップ特有の設定などの紹介 - 移動アニメーションやジェスチャーアクションに関するTips - GPSで提供される位置情報との連携や注意点など - maps-compose-utilsで提供される拡張的なAPI - maps-util-libとの連携の注意点 - ピンが重なった時の優先配置など、mapの描画に対してあるあるのTips - google maps platform api | ・アプリでGoogle Mapをこれから利用したい方
・Google MapをComposeで利用したい方 ・Google Mapを用いたアプリをこれから実装したい方 ・Google Mapの機能を新たに深堀りしたい方 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
112 | VRTを使ってもっと安心できるAndroid開発体験を目指す | r_wada | HOT PEPPER BeautyのAndroidアプリでは画面のデグレや修正内容を確認するために、VRTを作成し、reg-suitを利用した差分確認を行うことで安定的な開発を実現しています。
このセッションでは実際にreg-suitを利用して行っているVRTの実装方法やそのTips、作成する観点について説明します。 また、先日のGoogleIOでついにComposeのスクリーンショットテストの公式サポートが案内されました。 新しく公開されたComposePreviewSnapshotTestingと既存のreg-suitを用いたテストとの連携についてもコードベースで紹介します。 | Androidアプリの継続的な開発を行っており、VRTに興味がある方
ComposePreviewSnapshotTestingに興味がある方 | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
113 | Jetpack Compose Modifier徹底解説 | wiroha(ゐろは) | Jetpack Composeを用いたUI開発において、Modifierは欠かせない要素です。しかし、普段使わないModifierは知らない方も多いのではないでしょうか?本セッションでは、Jetpack ComposeのModifierを時間の許す限り解説します!
- Modifierの基本概念 / Modifierの基本的な役割と使い方の説明 - Modifier徹底解説 - 約150種類のModifierから可能な限り解説! - ZOZOで使われているModifierランキング ZOZOのプロダクトコードで各Modifierの使用頻度を集計して高いものから順に紹介しつつ、逆に使われていないマイナーなものもフォーカスして説明したいと思います。 具体的なコード例に加え、画像・アニメーションを用いて視覚的にわかりやすく解説します。公式ドキュメントの文章を読むだけではピンと来ない内容も、直感的に理解できるはずです。「Modifierでこんなこともできたんだ!」という気付きを提供します。 本セッションを聞くことで、Jetpack ComposeによるUI開発の効率が向上し、より直感的で魅力的なアプリケーションを構築できるようになることを目指しています。 | ・Modifierでどんなことができるのか知りたい方
・Modifierをこれから活用しようと考えている方 ・UIのカスタマイズ方法を探している方 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
114 | サヨナラ旧OS: BtoB SaaSで古いOSとスマートにお別れする方法 | Hanyu Koji | モバイルアプリ開発では、古いOSバージョンのサポートをどうするかは、定期的に直面する悩ましい課題です。
特にBtoB SaaSでは、顧客企業での端末管理体制が多様で、アップデートが一筋縄ではいかないことが多くあります。 本セッションでは、マニュアル作成・共有システムのTeachme Biz運営における実践から得た、 旧OSサポート終了の意思決定・それを助ける自動化されたデータ管理・顧客とのスムーズなコミュニケーション戦略を共有します。 ■ここで学べる主なことがら - FirebaseとBigQueryでデータを追って、旧OSサポート終了のタイミングを見極める方法 - 顧客のスムーズな移行をサポートする、カスタマーサポートとの連携方法 - 古いAndroid OSの利用を続ける顧客の背中を押すコミュニケーションの進め方 - アナウンスからサポート終了までのタイムスケジュールの設計 本セッションを通じて、顧客企業・開発チーム双方が幸せになるためのサヨナラ旧OSを、トラブルなく進めるための実践的な知見を得ることができます。 | - BtoB SaaSでアプリ開発に携わるエンジニア
- データを活かしてスマートに意思決定をしたい開発リーダー、プロダクトマネージャー - 旧OSのサポート終了に毎年頭を悩ませているすべての方 | 40 minuites | 日本語 / Japanese | 開発体制(Development Process) |
115 | Flutter for Theme | masa-futa | このセッションでは、Flutter標準のThemeがアプリに与える影響や、最新のThemeの状況についてお話しします。
アプリのテーマ管理は非常に重要かつ、Material Designの前提知識が必要です。 ※FlutterではMaterial Designを手厚くサポートしており、Material Designの指針に従い、標準のWidgetやコンポーネントを豊富に提供しています。 例えば、以下のようなケースがあるかと思います。 ・Themeを管理していなかったために、デザイン刷新の手間が増幅した ・Themeを定義しているけど、デザイナーと上手く連携できず or 初期開発者がいなくなり、負の遺産となっている ・テーマを使わずに独自の方法で管理している アプリごとに異なる方針や設計があるため、一概にThemeDataを利用することが適切とは言えません。 しかし、Flutterの標準Themeを理解することで、テーマに対する不安や苦手意識が和らぎ、Material Designに対する理解が深まることでしょう。 このセッションでは、以下のポイントを重点的にお話しします。 ・そもそもThemeとは? ・Themeを考える上でのMaterial Designとは? ・ThemeDataやThemeExtensionなど、テーマの内部構造に関する解説 ・Themeとの効果的な取り組み方について ・その他 この内容は、Flutter開発者だけでなく、Android開発者にも参考になるものです。 ※今回の話題から除外する内容 ・Material Designに関する詳細な内容 ・Android開発に関する内容(このセッションはFlutterに焦点を当てています) | ・Flutterに関する知見があるかた
・MaterialDesign初心者 / 中級者 ・アプリ内でのThemeの管理に四苦八苦している方 | 40 minuites | 日本語 / Japanese | クロスプラットフォーム(Cross-platform Development) |
116 | 巨大アプリのビルド高速化 | Yuki Ando | 普段のアプリ開発で絶対に避けて通れないのがアプリのビルドです。しかし、ビルド時間はアプリの規模が大きくなればなるほど長くなっていきます。ビルド待機時間が長すぎて筋トレすることを考えたことはありませんか?
本セッションでは、プロジェクトのモジュール構成の観点からAndroidアプリケーションのビルド時間をどう短縮するか長い歴史を持つ巨大アプリでの実例を交えつつ解説します。 - ビルド時間の増大による開発体験の悪化 - App moduleの肥大化や単一build flavorによるビルド時間の増大 - Androidアプリのビルド手順の理解と高速化のための知識 - ビルド高速化を行うためのプロジェクト・モジュール構成について - 適切なプロジェクト・モジュール構成を構築するための仕組みについて | - アプリのローカル・CIビルド速度が遅くて困っている人
- アプリのビルド速度が最近気になる人 | 40 minuites | 日本語 / Japanese | アプリアーキテクチャ (App Architecture) |
117 | Android 15と日本語/Japanese support in Android 15 | Seigo Nonaka | 2024年4月に次期AndroidであるAndroid 15のベータ版が発表されました。今回のAndroid 15では多くの日本語ユーザー向けの機能が実装されました。このセッションでは、日本語向けの機能を重点的に、Android 15で追加されたテキスト周りの新規APIの詳細や、使い方、裏側の実装の話をお話しようとおもいます。
The first beta of Android 15 was released in April 2024. There are many features useful for Japanese in this release. In this session, I will explain the details of the new APIs, how to use them, and what is happening under the food about newly added text features in Android 15. | アプリで日本語UIを作っている方/Developers who are making UIs for Japanese people.
最新のAndroidの機能に興味のある方/People who are interested in new features of Android 15 | 40 minuites | 日本語 / Japanese | Android Framework |
118 | Amperを使って様々なKMPプロジェクトを構成 | yoppie | Gradleのプラグインとして開発されたAmperというプロジェクトを構成するためのツールが登場しました。
Amperを使うことでスムーズにプロジェクトを構成することができ、さらに開発者体験も向上します。 本セッションはAmperに関する知見を共有します。 概要は以下です。 - Amperは最近開発されたツールであるため、あまり親しみのない方に向けてAmperを解説 - Amperを用いて様々な種類のKMPプロジェクトを構成するまでの知見を共有 トピックは以下を想定しています。 - Amperの説明 - module.yamlの書き方 - Fleetで利用できるmodule.yamlに関するコードアシスタンス - Kotlin Multiplatformを構成 - Compose Multiplatformを構成 - Gradleを用いた既存のプロジェクトと統合する方法と、移行する方法 | AndroidやKMPのプロジェクトのGradleファイルをもっとシンプルに書きたい方 | 40 minuites | 日本語 / Japanese | 開発ツール&サービス(Development Tools and Services) |
119 | GPIOの制御を通して組み込みAndroid開発の流れを学ぶ | たかっしー | このセッションでは、GPIOと呼ばれるデジタル回路で入出力を制御するための端子をAndroidで制御する例を通して、Androidを組み込んだデバイス開発の一般的な流れを解説するとともに、ノウハウを解説します。
昨今、ARグラスにAndroidが搭載されたり、カーナビにAndroidが搭載されたりと、Androidをデバイスに組み込むことが増えています。 しかし、Androidを用いた組み込み開発に関する情報やノウハウは全くといっていいほど公開されておらず、気軽に開発を行うことは非常に難しくなっています。 そこで本セッションでは、GPIOの制御をAndroidで行う例を通して、以下に示す組み込みAndroid開発の一連の流れを説明します。 1章 概要 1.1 組み込みAndroid開発の概要と用語説明 1.1 AOSPとBSPを用いた実際の開発の流れ 1.2 Platformアーキテクチャに従って開発をする 1.3 セキュリティリスクを減らす 2章 環境構築 2.1 AOSPをビルドするための環境 2.2 必要なパッケージのインストールとビルド 3章 実装 3.1 libgpiodを用いたKernelの実装 3.2 Android.mkやAndroid.bpを用いた繋ぎこみ 3.2 JNIを用いてアプリレイヤーから呼び出す 3.3 署名を行う 3.4 SELinuxを用いてアクセス制御をする 本セッションをきっかけにAndroidを用いた組み込み開発に興味を持ってもらい、開発の第一歩を踏み出してもらえれば幸いです。 | ・Androidをデバイスに組み込みたい人
・Androidを組み込んだデバイスを製品にしたい人 ・組み込みAndroidに興味のある人 ・Android Frameworkに興味のある人 ・低レイヤーに興味のある人 ・Androidを組み込んだデバイスのセキュリティ対策をしたい人 | 40 minuites | 日本語 / Japanese | ハードウェア (Hardware) |
120 | DynamicLinks廃止への対応 〜DeepLinkから紐解いていく〜 | Yoshitaka Suzuki | スマートフォンを触る中で、あるURLを踏んだ時にアプリを起動する、アプリがインストールされていなかったらPlayストアへ遷移する、といった動きをすることがあると思います。
これまで、こういった機能を簡単に実装する方法としてFirebase Dynamic Linksがよく使用されてきました。 しかし、このFirebase Dynamic Linksが2025年8月25日に廃止されてしまうため、使用しているプロダクトは対応が必須になります。 そこで、本セッションではどのような対応方針があるかを、DeepLinkやAppLinks(UniversalLinks)の機能を踏まえた上で紹介いたします。 目次 - そもそもDeepLinkとは? - 実装方法と実際の動き - Custom Url SchemeとHttp Url Schemeの違い - DeepLinkの課題 - そもそもAppLinks(UniversalLinks)とは? - 実装方法と実際の動き - そもそもFirebase Dynamic Linksとは? - 実装方法と実際の動き - DeepLink、AppLinks、Firebase Dynamic Linksそれぞれの機能の比較 - Firebase Dynamic Links廃止にどう対応する? - インフラ構成について - アプリが無い時にPlayストアを起動する方法 - インストールリファラを用いた遅延ディープリンク(Deferred Deep Link)の方法 - ショートリンクを生成する方法とハンドリングする方法 - リンククリック数等の計測をする方法 | - DeepLink、AppLinks、FirebaseDynamicLinksの機能を知りたい方
- FirebaseDynamicLinks廃止に対する方針を知りたい方 | 40 minuites | 日本語 / Japanese | 開発ツール&サービス(Development Tools and Services) |
121 | Compose Compiler Metricsを使ったJetpack Composeのパフォーマンス改善。 | taimu_shimizu | Composable関数は、none,skippable,restartableの三つの状態を持ちます。
本当はskippableで良いのにrestartableになってしまってるComposable関数があなたのコードにも入り込んでるかもしれません。 このセッションではそれらのComposable関数をCompose Compiler Metricsで発見する方法と、その結果を元に改修し、アプリの描画パフォーマンスを上げる手順について紹介します。 | 業務でJetpackComposeを使用してる方 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
122 | 野菜で覚えるcoroutines | taimu_shimizu | ジャガイモは、必要とされる時(料理する時)に取り出されます。StateFlowも、コレクターがアクティブになっているときにのみ、最新の状態を通知します。
coroutinesを触っていると、StateFlowやSharedFlowなど様々な概念が登場する為、それぞれがどのような機能を持ってるのか忘れてしまう事ありませんか? このセッションでは、野菜を使ってcoroutineの説明を行います。 印象的な説明によりcoroutineの概念の違いが驚くほどすっきりと理解できるでしょう。 | 野菜が好きで、coroutinesで出てくるクラスの違いが曖昧な人 | 40 minuites | 日本語 / Japanese | Kotlin |
123 | The Impact of Micro-Optimizations on Large-Scale Apps | Damian Burke | In this talk, we will explore the importance of performance optimization in mobile app development and discuss common performance bottlenecks that can lead to issues such as ANRs and frame drops. We will then look into approaches to identify and address these issues. Attendees will learn best practices for optimizing UI rendering, data processing, memory management, as well as strategies for measuring the impact of micro-optimizations on app performance and perceived performance for users. The presentation will show (adapted) real-world examples of micro-optimizations, and their impact on a global userbase. By the end of this talk, attendees will have a solid understanding of how to identify and address performance issues in their own Android apps, leading to faster, more responsive and more engaging user experiences. | The talk is for Android engineers both with beginner and intermediate knowledge. The presentation will contain introductions into the topics, as well as deep-dives into specifics to share knowledge with everyone. | 40 minuites | English | 保守・運用・テスト(Maintenance / Operations / Testing) |
124 | Dive to Google Play Review | ぶる | みなさん、アプリレビューを意識したことがありますか??
また、レビューが実際にどのような効果をもたらすかご存知でしょうか?? 実はアプリのレビューは、モバイルアプリにとって、一番大切とも言えるアプリの認知に大きく影響を与えます。 そしてレビュースコアを高めて認知を拡大することで、ユーザーの流入数が増えたりなど大きくアプリに貢献します。 最近のAndroidでは、Google Play In-App Review APIを使う方法がよく使われていますが、この方法にも、評価を求めるUIを自作で作る方法にも実はルールがあったりもします。 そこで、このセッションでは以下の層を対象に、実際のコードを用いたり、iOSのレビューとも比較したりしながら、Google Play Storeのアプリレビューを求める際の工夫や注意点などについて発表していきます。 - Google Play Storeのアプリレビュー周りに興味がある方 - Google Play Storeのアプリの評価を上げたい方 - レビュー集めの手法を知りたい方 - Google Play In-App Review APIに興味がある方 - 個人でアプリを作っている方 - スタートアップの企業様、スタートアップで働いてる方 この機会にぜひ改めてアプリのレビューについて考えてみてください。 | - Google Play Storeのアプリレビューに興味がある方
- Google Play Storeのアプリの評価を上げたい方 - レビュー集めの手法を知りたい方 - 個人でアプリを作っている方 - スタートアップの企業様、スタートアップで働いてる方 | 40 minuites | 日本語 / Japanese | 開発ツール&サービス(Development Tools and Services) |
125 | Android開発における画像ライブラリの全て | みっちゃん | Androidアプリ開発において、画像の効率的なロードと表示はユーザー体験の質を大きく左右します。今日では様々な画像ライブラリが提供されていますが、なんとなく使っている方も多いのではないでしょうか。画像ライブラリの裏側の仕組みを理解すれば、もっと効率的にライブラリを活用することができますよ!
本セッションでは、画像ライブラリの基本からその必要性、リクエストの最適化やメモリ管理といった内部の仕組みまでを詳しく解説します。さらに、よく使われる画像ライブラリであるGlideとCoilを紹介し、実際の使い方やその特徴を比較します。初心者から中級者まで、どなたにとっても画像ライブラリについて新しい学びがあるセッションにします! 以下がセッションで予定している内容です。 - 画像ライブラリとは - どうして画像ライブラリが必要? - 画像ライブラリを使うメリット - 画像ライブラリの仕組みを知ろう! - リクエストの最適化 - メモリ管理 - 画像の変換 - よく使われる画像ライブラリの紹介 - Glide - Coil - 実際に使ってみよう! - GlideとCoilを比較 | - 画像ライブラリについてこれから知りたい方
- 画像ライブラリをなんとなく使っている方 - 画像ライブラリの内部の仕組みを知ることでさらにライブラリを使いこなしたい方 | 40 minuites | 日本語 / Japanese | ハードウェア (Hardware) |
126 | 実践!難読化ガイド | みっちゃん | 難読化は、Androidアプリのセキュリティとパフォーマンスを向上させるために重要な技術です。難読化の設定は特定の知識を持ったメンバーに依存しているなど、チーム内でのノウハウが偏りがちではないでしょうか?このセッションでは、Androidアプリ開発におけるコードの難読化について、基礎から応用までを包括的に解説し、チーム内で難読化ノウハウを共有するための実践的な工夫についてもお話しします。難読化知識の属人化を解決したい方や、Androidアプリ開発における周辺知識をキャッチアップし、モバイルエンジニアとしてもう一段階上の成長を目指す方にぜひ聞いてほしい内容です。
以下がセッションで予定している具体的な内容です。 - 難読化とは何か - 難読化が必要な理由 - 難読化の歴史とツール - ProGuardとR8の違い - 具体的な使い方と設定方法 - 特定のクラスやメソッドを難読化の対象から除外する方法 - 特定のクラスやインターフェースを難読化対象外に設定する方法 - 特定のアノテーションを難読化対象外にする方法 - パッケージを難読化対象にする方法 - 特定のライブラリやフレームワークをサポートする方法 - ProGuard設定でよく出てくる記号の意味を知ろう - 困った時の逆引き難読化テクニック - やりたい設定が調べても出てこない! - 難読化あり?なし?ビルド設定で困った時 - ライブラリを公開する時の難読化どうする? - 難読化ノウハウの属人化を防ぐためのチーム内での工夫 - なぜ属人化してしまうのか - どのような工夫ができるか | - 難読化についてそろそろ勉強してみたい方
- 難読化ノウハウが属人化してしまっているチーム - アプリ開発に必要な周辺知識をキャッチアップし、モバイルエンジニアとしてもう一段階上を目指したい初級〜中級のエンジニア | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
127 | Automate Code Reviews with Konsist !! | Ayushi Gupta, Gaurav Bansal |
Code reviews are an essential part of every developer's routine, whether you're getting a PR ready to merge or reviewing someone else's PR. Have you ever found yourself reading or writing comments like these during a code review? "Hey Ayushi, can you use the use case? The current ViewModel is communicating with the repo layer, which isn't ideal." "The UI layer should be as lean as possible; all logic should be moved out." "Didn't we recently decide on the naming conventions for different classes?" These are classic examples of code review smells. As engineers, it's tough to remember every architectural detail of all your projects, especially when dealing with a large multi-module app architecture. So, why not automate these checks with lint rules? In this talk, we'll introduce Konsist—an innovative tool for Android that simplifies the process of writing lint rules by treating them as unit tests, thus eliminating the steep learning curve associated with traditional linters. We will also dive deep into creating lint rules as unit tests and integrating them into CI/CD pipelines for faster development. | Android, Kotlin, CI/CD, Infrastructure | 40 minuites | English | Androidプラットフォーム (Android Platform) |
128 | Jetpack Composeで実現する、シームレスなNFCリーダー連携アプリ開発 | からあげ | 近年、Androidアプリ開発において、Jetpack ComposeはUI開発の主流となりつつあります。本セッションでは、Jetpack Composeを全面的に採用したアプリにNFCリーダー機能を組み込み、製品レベルの品質でリリースした経験を基に、以下の内容について詳しく解説します。
- Jetpack ComposeでNFCリーダー連携を実現する具体的な手法 - NFCリーダーとのデータ送受信 - 非同期処理とステート管理の連携 - エラーハンドリングとRobustな設計 - Jetpack Composeならではの利点と課題 - Composeによる簡潔で宣言的なコードによる開発 - Compose特有の制約とNFCリーダー連携との解決策 - 既存ライブラリとの連携とパフォーマンスチューニング | - Jetpack Composeでアプリ開発に関心のあるエンジニア
- NFCリーダー機能を使ったアプリ開発に興味のあるエンジニア | 40 minuites | 日本語 / Japanese | その他(Other) |
129 | Jetpack ComposeとSingle Activityで実現する、3ヶ月で初回リリースを迎えたクレジットカード明細確認アプリ開発 | からあげ | 近年、Androidアプリ開発において、Jetpack ComposeはUI開発の主流となりつつあります。本セッションでは、Jetpack ComposeとSingle Activityアーキテクチャを組み合わせたアプリ開発を実践し、3ヶ月という短期間でクレジットカード明細確認アプリをリリースした経験を基に、以下の内容について詳しく解説します。
- Jetpack ComposeとSingle Activityで実現する、シンプルなアプリ構造 - Single Activityアーキテクチャによるコードの簡潔化 - Composeによる宣言的なUI設計とデータフローの管理 - Compose Navigationによる画面遷移の統合 - 3ヶ月という短期間でのリリースを可能にした開発プロセス - NFCやカメラなど、初期開発段階では存在しなかった機能要件への柔軟な対応 - Single Activityアーキテクチャの利点と課題 | - Jetpack Composeを使ったアプリ開発に関心のあるエンジニア | 40 minuites | 日本語 / Japanese | アプリアーキテクチャ (App Architecture) |
130 | ここから始める!最軽量VRTの実践でプロジェクトに利益をもたらす | なぐも | Androidアプリの品質保証において、Visual Regression Test(VRT)はUIが意図せず変更されていないか確認する強力な手法です。
VRTを導入することで、自動的に画面の差分を検出し、テストの負担を一部軽減することができます。しかし、どの画面を優先してスクリーンショットを撮るか、CIパイプラインへの組み込みなど、アプリの特性や規模に合わせた方針を決めることは複雑な問題です。 また、CIパイプラインへの組み込みは導入コストが高いことからVRTの導入を踏み出せずにいる方も多いのではないでしょうか? そこで、VRTの効果を実感しやすい方法でローカル環境に導入する方法を紹介することで、VRTのハードルを下げたいと思います。そして、軽量VRTの実践から自然な流れでCIパイプラインへ組み込む流れを提案します。 本セッションでは、VRTの基本概念から始まり、実際の導入プロセス、効果的な方針の策定、さらには公式が提供するスクリーンショットとの使い分けについて解説します。 1. Visual Regression Testってなに? 2. VRTツールの紹介と選定基準 3. ローカルマシンでの導入 4. CIへの組み込み 5. 公式が提供するスクリーンショットとの使い分け | - これからVRTを始めようと思っている方
- VRTが実際のプロジェクトでどう導入されているのか興味がある方 - 画面が壊れていないか手作業で確認を行なっている方 - VRTの費用対効果をなかなか実感できないと感じている方 - VRTの方針について迷っている方 CI/CDの方針について迷っている方 | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
131 | 短期間で結果を出せるチームの作り方 | Yukihiro Mori | 新規プロダクトを新たに開発するとなった時など、短期間でのチーム立ち上げとプロダクト開発を求められることがあるかと思います。
特に新規アプリの開発などでは小規模・短期間での開発が求められるのが一般的です。 本セッションでは、複数のチーム開発の立ち上げを経験してきた筆者が短期間で結果の出せるチームを醸成するためのノウハウを発表できればと思います。 予定している発表概要は下記の通りです。 - アサインの重要性 チームビルディングにおいて最も重要なことはチームにアサインする人材の選定です。 Androidエンジニアとしての技術的な知識・経験などのハードスキルはもちろん重要ですが、それ以上にチームの文化に順応できるソフトスキルはとても重要です。 この章では、そういったアサインする人材の選定を行うための面接などで重視する要素や観点、ヒアリングするためのテクニックなどもお話しできればと思います。 また、人には様々な個性があり、単体で良くてもチームにした時に偏りがでてしまうこともあります。バランスの良いチーム編成をするために、チームに欠けている要素を補えるメンバーをアサインすることも重要です。 全てが完璧なメンバーでチームを構成するのではなく、お互いの個性で補い合って完璧なチームを作り上げるといった発想でのメンバーアサインについても言及します。 - オンボーディングの重要性 短期間で結果を出す上で最も重要なことはメンバーの立ち上がりです。早いうちにチームの当たり前水準にメンバーを持っていくことで、チームのアウトプット量を短期間で大幅に向上させることができます。 オンボーディングの内容をマニュアライズ化し、再現性を上げることで新規メンバーの受け入れコストを最小化し、容易にチームのスケーリングが可能になります。 また、チームの当たり前な業務知識や環境設定をオンボーディングに凝縮することで、新規参画メンバーであってもそこを見返せば、毎回メンバーに質問することなく自律的に解決できるようになります。 - メンバーが自律的に行動するためのドクトリン チームがうまく回る状況を作るためにはメンバーが自律的に判断し行動できる必要があります。 そういった環境を作り出すのはチーム文化によるところが大きいです。とはいえ、一朝一夕で文化を醸成することは難しいです。 ただし、メンバー各々に行動指針や原理原則を伝授することでチーム文化醸成を早めることができます。 この章では、筆者が特に重要視しているドクトリンについて具体例を上げて解説できればと思います。(コミュニケーションは常に対チームで行う, 主語をチームにして物事にあたる, アジリティに繋がる行動を意識する etc...) - チームを回すための障壁を取り除く メンバーに課題を渡したのにアウトプットが思うようにでない場面はないですか? それらは多くの場合、答えが明確でない抽象的な課題が原因だったりします。 メンバーが具体的にどのようにアプローチすれば良いか分からず、迷ったり、調べたりしているうちに多くの時間を費やす結果となってしまい、もっと早くに相談してくれればよかったのにと言った気持ちになるかと思います。 この章では、そういった状況の解決のためのリーダーとしての対応方法をご紹介できればと思います。 例えば、指示の内容を課題から具体的なアクションに変換することで"解決策の見えないイシュー"から"課題解決可能なタスク"に落とし込むことができます。 もちろんリーダーだからといって完璧な解決策がすでに見えている状況だけではないかと思います。 そう言った状況での対応策としてアクションではなくアプローチへの変換についても言及できればと思います。 | 新規プロダクト開発でリーダーを任されている方,チームリーダーのマネジメントを任されている方,これからリーダーになってみたいとお考えの方
| 40 minuites | 日本語 / Japanese | @Experimental ソフトスキル(@Experimental Soft skills) |
132 | ゼロからの成長:iOS・Swiftでの知識を活かしながら、Android・Kotlinでの開発を加速させた3年間の実践テクニック | fumiyasac | 2020年に業務を通じてAndroidアプリ開発やKotlinを学ぶ機会を得るまで、これらの知識は全くのゼロでした。最初は心配と試行錯誤の連続でしたが、効率よく楽しみながらキャッチアップし、得た知識を実務で活かしてきました。
本セッションでは、キャッチアップの過程で得られたヒント、基本理解から応用を可能にするための着眼点や考え方、エッセンスを紹介します。さらに、3年間の経験を経てモバイルアプリ開発に対する私の考え方がどのようにポジティブに変化したかについてもお話しします。 加えて、iOS/Androidのネイティブアプリを並行して開発する際に直面する課題と、それを克服するための戦略についても触れます。SwiftとKotlinの違いを理解し、効率よく開発を進めるためには、違いをネガティブに捉えるのではなく、共通点や相違点を上手に紐解く姿勢が重要です。 本発表では、Kotlinでの実装を中心に、Swift(iOS)との比較を交えながら以下のポイントを解説します: 1. UI実装・レイアウト処理の違いを見極める方法 2. SwiftとKotlinの共通点や類似点を探し出す方法 3. iOSとAndroidで明確に異なるポイントを知るためのヒント これらのポイントを具体的な事例を通して紹介し、似た機能やUI実装を要件から具体化するプロセスやアプローチも解説します。 このセッションの魅力は、全くの初心者がどのようにして3年間で実務経験を積み重ね、効率的にスキルを習得したのかというリアルな体験談にあります。 経験を基にした実践的なアドバイスをお届けし、参加者が自身の開発プロジェクトに役立てられるようサポートいたします。 | 1. 初心者から中級者のAndroidアプリ開発者
Androidアプリ開発やKotlinを学び始めたばかりの開発者や、実務経験がまだ浅い開発者にとって、初学者がどのようにキャッチアップし、実務に活かしていくかを知ることができるためです。 2. iOS開発者でAndroid開発に興味がある人 主にiOSアプリ開発を行っているが、Androidアプリ開発にも興味がある、または両プラットフォームでの開発を並行して行う必要がある開発者に向け、SwiftとKotlinの比較を通じて効率よく学べる方法が提供されるためです。 3. 技術の異なる領域へのスキル移行を検討しているエンジニア 既にiOSアプリ開発の経験があり、Android開発へのスキル移行を検討しているエンジニアにとって、効率的な学習方法や実装のポイントが具体例を交えて紹介されるためです。 | 40 minuites | 日本語 / Japanese | その他(Other) |
133 | JetPack Securityで安全なデータの保存とやり取りを実現する | rs_tukki | 現代のAndroidアプリでは、内部に何もデータを保存しないアプリはほとんどないと言っていいと思います。
単なる文字列から、画像ファイルに音声ファイル、あるいは認証用のトークンなど、あらゆるデータを保存することになるでしょう。 「ウチのアプリはデータを保存しないから」という場合でも、画面遷移時にサイズの大きなデータをやり取りする場合はどこかに保存しておく必要があるはずです。 さて、そうしてアプリ内部に保存したデータは、その気になれば簡単に覗けてしまいますので、 そのアプリ以外から中身が確認できないよう、暗号化を施しておく必要があります。 このセッションでは、2019年に発表され、2021年に正式版となった「JetPack Security」を用いて、保存したいデータを簡単に暗号化する方法を、従来の暗号化手法と比較しながら解説します。 また、暗号化を施しデータを保存するための実装はどのようにすべきか、その設計についてもご紹介します。 # 目次 - JetPack Securityとは - Androidアプリで暗号化が必要な場面 - アプリ内部へのデータ保存 - 画面間での大量データの受け渡し - それまでの暗号化の方法とその課題 - JetPack Securityを利用したデータの暗号化の方法 - EncryptedSharedPreferences - EncryptedFile - アプリ内でJetPack Securityを利用してデータを保存するための設計方針 - data class - repository - 運用中のアプリに新しく暗号化を適用させたい場合どうすべきか | - Androidアプリでの暗号化の方法に興味がある方
- 内部にデータを保存するようなアプリを開発したい方 - 運用中のアプリの暗号化方式について考え直したい方 - Androidアプリ開発やセキュリティについて学んでいる若手エンジニア | 40 minuites | 日本語 / Japanese | Security / Identity / Privacy |
134 | targetSdkVersionの更新期限に間に合わせるためのベストプラクティスを考える | rs_tukki | 現在、AndroidOSの最新バージョンは毎年4月頃にβ版が、7月頃に正式版がリリースされています。
そして、全てのアプリはそれから1年後の8月まで、期限延長を含めても10月までに該当のtargetSdkVersionに更新している必要があります。 更新作業の猶予期間はβ版のリリースからおおよそ1年と4ヵ月ですが、私たち開発者はどのようにこの作業と戦っていく必要があるのでしょうか。 当然、単に数字を1つ上げれば終わりというわけではなく、実際にはそれとともに変わっていく様々な仕様にも対応しなければなりません。 更新作業を後回しにしてしまっていると、意外と影響範囲が大きく本来リリースしたい機能がお届けできない、という事態にもなってしまいます。 今回のセッションでは、先日リリースされたAndroid 15をテーマにしつつ、targetSdkVersionの更新作業をいつから、どのように準備し進めていくべきなのか、弊社の事例を交えつつご紹介いたします。 皆さまが運用しているアプリがスムーズに最新の仕様へ追従するための一助となれば幸いです。 # 目次 - targetSdkVersionとは - targetSdkVersionの更新期限について - Android 15でのアプリの変更内容 - targetSdkVersion更新のアンチパターン - 作業を後回しにしていると何が起きるか - 更新作業のベストプラクティス - 更新の準備はいつから始めるべきか? - 弊社での対応事例 - 更新に向けた影響範囲の調査 - 実際の改修の進め方 - 余談:minSdkVersionはいつ更新するべきか? | - 運用/保守のための開発を後回しにしてしまいがちな方、チーム
- Android 15で適用されるアプリの変更点を知りたい方 | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
135 | クラッシュとの戦い方と防衛術 ~謎のクラッシュを追え!~ | n-seki | 私たちAndroidエンジニアは日々、質の高いコード、プロダクトを作ることを意識して開発をしています。しかし「クラッシュフリーレート100%」はなかなか厳しい目標であり、バグと戦うことは我々エンジニアにとって必要な業務であり、また必要なスキルでもあります。
Android開発においては、クラッシュレポートを送信するなどの「クラッシュに備える方法」については公式ドキュメントが充実していますが、「クラッシュレポートが上がってきた後、どう調査を進めればよいか」という観点から体系的に解説したリソースは少ないように感じます。 クラッシュレポートから問題箇所がすぐに特定できればよいですが、中にはレポートを眺めているだけでは原因にたどり着くのが困難な、デバッグ難易度の高いクラッシュもあるでしょう。 私が携わっているアプリでは長年、このようなデバッグ難易度の高い「謎のクラッシュ」に悩まされてきました。試行錯誤のデバッグの末ついに原因を特定し、クラッシュに終止符を打つことができました。本セッションではこのデバッグ体験を題材に、未知の問題に対してどのように調査を進めていくか、どのように思考を巡らせるかなど、デバッグの方法を可能な限り体系的に解説します。 知識とスキルによってクラッシュと戦えるよう、防衛術を学んでいきましょう! 以下は予定している内容です。 クラッシュに備える - クラッシュレポート - その他のアプリログ クラッシュと戦う(謎のクラッシュを追え!) - レポートとスタックトレースの読み方 - 参照すべきリソース - 調査方法と考え方 - 調査に役立つツール・ライブラリ | - Androidアプリの保守に関わっている/これから関わるエンジニア歴0~3年くらいの方
- バグの調査に苦手意識を持っている方 | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
136 | 今からはじめるKotlin移行 | n-seki | Android開発においてKotlinが第一言語となったのは2019年のことです。いまやアプリやライブラリをKotlinで開発するのは特別なことではなく、私たちは日常的にKotlinを使用しています。
しかし、これは本当に普遍的な事実でしょうか? 2019年より前の多くのアプリはJavaで実装されており、Kotlin言語の恩恵を受けるためにはKotlinへの移行が必要になってきます。KotlinはJavaとの相互運用が可能ですが、既存コードをKotlinに書き換えるには相応の労力が求められます。 さらに、プロジェクトの状況によってはKotlin移行を積極的に進められないケースもあるでしょう。例えば、長年運用されているアプリをKotlinに書き換えることによるバグ発生のリスクや、ステークホルダーの理解が得られずに工数が割けないなど、さまざまな状況が考えられます。事実、私たちが開発しているアプリでは移行対応を段階的に進めたこともあり、Kotlin移行が完了したのはつい3ヶ月前のことでした。 このセッションでは、これからアプリのKotlin移行を検討しているエンジニアに向けて、安全かつ効率的にKotlinへ移行する方法を紹介します。私たちが実際に行った効率的なPull Requestの出し方やスプレッドシートによる進捗管理方法、目標管理まで、Kotlin移行に関する知見と経験を余すところなく公開します。 これらのノウハウにより、皆さんのこれからのKotlin移行が少しでも円滑・効率的に進められるようにサポートいたします。 Kotlin移行、まだまだ間に合いますよ! | - これからアプリのKotlin移行を検討されているエンジニア
- 現在Kotlin移行対応中で、進め方の改善をしたいと考えているエンジニア | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
137 | Dagger Hiltことはじめ | e10dokup | Androidアプリ開発の規模が大きくなってくるにつれ、DI(Dependency Injection:依存性注入)はアプリ設計の中で重要なトピックとなります。DIによって自動テストを実装しやすくしたり、環境ごとの動作の切り替えを実現しやすくしたり、コンポーネントの結合を弱くしたりなど、多くのメリットを享受することができます。
GoogleがメンテナンスするDagger Hiltは、DIをサポートするAndroid用のライブラリであり、Android DevelopersにあるGuide to app architectureでも利用が推奨されています。 本セッションでは、新規に開発するシーンを始め、Androidアプリ開発において必要不可欠なDIへの解像度を上げて実装できるようになることを目的に、DIをする利点や新規アプリを立ち上げる際にどのようにしてDagger HiltでDIを実現するのか、Dagger Hiltのエラーメッセージに対してどういう対応をするべきなのかを解説します。 本セッションで話すこと - DIがアプリ開発にもたらすメリット - Dagger Hilt(と過去のDaggerからの変化)の紹介 - Dagger HiltでAndroidアプリに新規にDIを実装する流れ - Dagger Hiltのエラーメッセージへの対応パターン | - Dagger Hilt等のライブラリを使ってDIをしているが、その利点を知りたい人
- Dagger Hiltのエラーメッセージを読めるようになりたい人 - これから開発するアプリの規模が大きくなってきた人 | 40 minuites | 日本語 / Japanese | アプリアーキテクチャ (App Architecture) |
138 | Understanding Crednetial Manager | Makoto Kato ︎︎ | Android 14からCredential Manager APIが追加されています。PasskeysやPassword認証については、これを包括したJetPackライブラリが提供されています。JetPackライブラリでは何をすることでPasskeysを実装しているのか、またWebブラウザ (Chrome および Firefox のAndroid版)におけるPasskeysの実装においてCredential Managerをどう利用しているのかを通じて、Credential Managerの理解を深めるために様々なことを話します | - Credential Managerを利用した認証プロバイダアプリケーション、またはそれを用いたクライアントアプリを実装したい方
- Credential Managerに対応するJetPackライブラリの実装内部を知りたい方 - WebブラウザにおけるPasskeysの実装が、Credential Manager APIを通してどう実装されているのか知りたい方 | 40 minuites | 日本語 / Japanese | Androidプラットフォーム (Android Platform) |
139 | チームで始めるAndroidアプリのテスト駆動開発 | トニオ(tonionagauzzi) | テスト駆動開発(TDD)は、テストを起点にシステムの振る舞いを変更するプログラミングワークフローです。
TDDという言葉を聞いたことはあるけれど実践したことはない、もしくは実践しにくい、メリットがわからないなどと感じている人が多いのではと思います。 このセッションでは、Androidアプリの開発を行っているチームが最近1年以内にTDDを導入した話を、実際のAndroidアプリのコードを実例として解説します。 TDD導入の背景として、私たちのアプリが数年にわたってリリースされ続けている中で、レガシーコードの問題に直面しました。これにより、新機能開発のコストが増加し、品質保証の手間も増大していました。これらの課題を克服するために、TDDを導入することにしました。 本セッションでは、下記について解説します。 - TDDを導入する目的 - 機能の期待動作を保証するチェックリストや、自動テストを書く習慣を身に付けること - 安全なリファクタリングを実現すること - ボーイスカウトルールに基づいて少しずつレガシーコードを減らすこと - TDDの実践 - 導入方法(リスト→❌レッド→✅グリーン→リファクタリング) - QAエンジニアと一緒にテストを書く - スクラムイベントでTDDサイクルを回す - TDD実践で感じたメリット - 実装に取り掛かりやすい - 実装に自信を持ちやすい - 壊れにくい - テストの整備が進む - TDD実践時の課題と対処法 - テストコードを書く際のハードル - 実際のプロジェクトでの成功事例と失敗事例から得られた学び - チーム全体の認識を揃える難しさ - 手動テストと自動テストの使い分け このセッションを通じて、より効果的な開発プロセスを構築するためのヒントを提供します。 TDDが私たちのプロジェクトでどのように適用されたかを知っていただくことで、皆様の開発の助けになればと思います。 | - Androidアプリ開発者
- TDDに関心がある方 - レガシーコードの改善を目指しているAndroidエンジニア - スクラムチームのメンバー - ソフトウェアテストプロセスの改善に取り組んでいる方 - 開発プロセスの効率化を目指すマネージャーやリーダー | 40 minuites | 日本語 / Japanese | @Experimental ソフトスキル(@Experimental Soft skills) |
140 | 怖くないSubcomposeLayout : feat. TabRow | Saiki Iijima | 「SubcomposeLayoutは便利そうだけど複雑でちょっと怖い…」と思った事はありませんか?
これはそんなあなたへ贈る、SubcomposeLayout の基礎から実践までを網羅したセッションです。 現代の Android デバイスは画面サイズが多様化しており、多くのユーザー快適な体験を届けるために柔軟なレイアウト設計が求められます。また、Androidアプリの品質は日々上がり、より美しいUIが求められています。Jetpack Compose の SubcomposeLayout は、それらのニーズに応える強力な仕組みです。 本セッションでは、SubcomposeLayout の基本と使い方を解説し、弊社アプリで実際に利用されている多様な画面幅に対応する柔軟なTabRowの事例を通してより実践的な利用法を知ることでSubcomposeLayoutの基礎を習得します。 本セッションを終えた頃には多様な画面サイズに柔軟に対応する美しいUIを実現する自信が身につき、SubcomposeLayoutもいささか可愛く感じることでしょう! [期待できる学び] - SubcomposeLayout の基本的な知識と使い方 - 柔軟なレイアウトの具体的な実装方法 [キーワード] - SubcomposeLayout - Layout - Modifier.layout - BoxWithConstraints - subcompose - Constraints - Measurable - Placeable - place - ParentDataModifier - TabRow・ScrollableTabRow | Composeを利用する初〜中級者のAndroidエンジニア
特に下記に当てはまる方 - 柔軟なレイアウト構築に興味のある方 - 複雑なレイアウト構築に興味のある方 - 複数サイズのデバイスに対応する予定のある方 - SubcomposeLayout に興味がある方 - SubcomposeLayout 怖い…な方 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
141 | Image Recognition and Object Detection with MediaPipe on Android | Anant Chowdhary | MediaPipe for Image Recognition and Object Detection
MediaPipe is an open source, cross platform Machine Learning framework. In this presentation we will learn what MediaPipe is and how we can perform some common vision based tasks using MediaPipe on Android. We will also cover the following with real examples: 1) Object Detection with MediaPipe on Android: Efficiently locate objects in real-time on Android devices using MediaPipe. 2) Image Classification via MediaPipe on Android: Identify and categorize images accurately with MediaPipe's pre-trained models. 3) Image Segmentation with MediaPipe on Android: Partition images for diverse applications such as background removal and medical imaging. 4) On-device ML with MediaPipe: Run ML models directly on Android devices for privacy and low latency. | Java, Kotlin | 40 minuites | English | その他(Other) |
142 | 本当に重要なことにフォーカスしよう: Jetpack Composeにおけるキーボードサポート | Chiko | 「生産性の向上には、本当に重要なことにフォーカスすることが不可欠です」と聞きます。これはアプリのUXおいては正しいように思います。特にキーボードやリモコンでの操作をサポートする場合、ユーザーが迷わず直感的にフォーカスを操作できることが重要です。
本セッションでは、Androidアプリ開発者を対象に、キーボードや十字キー操作に最適化されたUI設計のノウハウを解説します。具体的なコード例やデモを交えながら、以下のポイントについて詳しく解説します。 - フォーカスの重要性: なぜフォーカス管理が重要なのか、ユーザー体験にどう影響するのか - フォーカス移動の最適化: ユーザーが迷わず、直感的にフォーカスを移動できるUI設 - 予測可能なフォーカス移動: ユーザーの期待に応えるフォーカス移動の実 - Androidにおける実装方法: Jetpack Composeなどの最新技術を活用した実装方法 | - Androidアプリ開発者 (初級〜中級)
- キーボードやリモコンでの操作に対応したアプリ開発に興味がある方 - Jetpack Composeの経験があるかたであれば、セッションをより楽しめるかと思います | 40 minuites | 日本語 / Japanese | Jetpack Compose |
143 | Jetpack ComposeにおけるShared Element Transitionsの実例と導入方法 またその仕組み | hyoga | Shared Element Transitionsをご存知でしょうか?
Shared Element Transitionsは画面間の遷移において、特定のコンポーネントが滑らかに移動や変化することによって、美しい画面遷移を実現することができる画面遷移の一種です。 これをJetpack Composeで導入しようとすると、LookaheadScopeなどを用いて頑張って実装するしかなかったのではないかと思います。 実際Jetpack Composeに実装が移行したGoogle Play StoreなどのアプリもJetpack Compose対応以降Shared Element Transitionが無くなっており、実装の難易度が高い事が窺えます。 そのような状況で、ついにJetpack ComposeでもCompose1.7.0-betaから実験的な機能として`SharedTransitionLayout`, `Modifier.sharedElement()`などが導入され、Shared Element Transitionを以前よりも手軽に導入することが可能になりました。 早速私達のプロダクトでも導入し始めていますが、とても簡単に書くことができる一方、注意しなければならない点もありました。 このセッションでは、Shared Element Transitionsをどのような場面で使うべきか、 またJetpack ComposeにおけるShared Element Transitionsの使い方、導入方法、その仕組みなどの知識/知見を提供し、みなさんが簡単に導入できる手助けができればと思います。 | - Shared Element Transitionについて知らない人
- Shared Element Transitionを知っているが導入したことがない人 - Shared Element Transitionを導入してみたい人 - 美しい画面遷移を作りたい人 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
144 | Navigator 2.0のスキルアップ ~基本概念の復習と実用的な活用方法~ | いどぬん | Flutter v1.22.0で導入されて以来、Navigator 2.0は様々なプラットフォームに対応する強力なツールを提供してきました。
しかしあまりの複雑さに理解しづらいところがあるかと思います。 このセッションでは、Navigator 2.0の基本概念を解剖するとともに、実践的にアプリに取り入れる方法を紹介します。 セッションのサマリー - 基本概念の復習: Navigator 2.0の基本的な構造とそのコアな仕組みを解説します - 基本的な使い方: Navigator 2.0の基本的な使い方を解説します - 実践的な使い方: ライブラリではないNavigator2.0の取り入れる実践的な方法を解説します このセッションを通じて、Navigator 2.0を使って柔軟でメンテナンスしやすいナビゲーションシステムを構築する手助けできたらと思います。 また公式が提供しているgo_routerなど、Navigator2.0を隠蔽しているライブラリを使っている方も多いかと思います。もしライブラリの内容を理解しきれない方がいらっしゃいましたら、このセッションを通じて、その理解の手助けができればと思います。 | - Flutterに興味がある方
- Flutterのルーティングに興味がある方 - ルーティングライブラリは使ってるけど中身を知らない方 | 40 minuites | 日本語 / Japanese | クロスプラットフォーム(Cross-platform Development) |
145 | Mastering Screenshot Testing for Android Apps | bing-zhu | Screenshot testing helps in verifying that your UI renders correctly across various devices and configurations. Also, can directly display the UI difference after any code changes.
In this talk, we will dive into the world of screenshot testing using popular tools like paparazzi, roborazzi and Google’s experimental plugin: Compose Preview Screenshot Testing. Starting with the basics, we’ll explore the implementation of screenshot tests, how to set up and configure these tools, and integrate them into CI pipeline. I’ll share experience about weird issues our team faced and how to address them, and best practices for testing adaptive layouts, ensuring your app looks great on any screen size. As Compose Preview Screenshot Testing Plugin is still in Alpha phase, I will catch up with the issues/pain point under disucssing, and share an ideal world of screenshot testing. | People who:
* Want to learn about screenshot testing * Are looking for solutions to common screenshot testing issues * Seek a comparative analysis of available screenshot testing tools | 40 minuites | English | 保守・運用・テスト(Maintenance / Operations / Testing) |
146 | AI-Driven Android Development: Insights on Copilot, Gemini, and Advanced Tools | bing-zhu | Google IO 2024 has announced their focus is AI at the core. We will get AI to help us everywhere including Android development of course.
Tools like GitHub Copilot and Google Gemini are at the forefront of this change, providing intelligent code completion, bug detection, and even suggesting new ways to solve coding problems. In this session, I will share my experiences using AI assistants such as Copilot and Gemini, along with other AI tools for PR reviews, code search, and more. I will compare these tools, highlight their unique features, and discuss the best practices for integrating them into your development workflow. You’ll learn about the strengths and limitations of each tool, how they can complement each other, and tips for maximizing their benefits. This talk will cover: * The capabilities of GitHub Copilot and Google Gemini * Practical use cases and real-world examples * How other AI tools can help us in several ways * Best practices for incorporating AI assistants into your daily coding routine | People who
* Developers curious about AI-assisted coding * Those looking to enhance their coding productivity * Engineers interested in the latest AI tools for development * Anyone eager to understand the impact of AI on software development | 40 minuites | English | 開発ツール&サービス(Development Tools and Services) |
147 | モバイルアプリ最適化の道を踏み出す前に知っておきたいコト! | andousan | モバイルアプリの開発をしていると、人材リソースが不足しているなどにより、アプリのパフォーマンス改善よりも新規機能開発やリファクタリングを優先してしまうことがあります。その結果、ユーザーからのパフォーマンスに関する指摘フィードバックが増え、ユーザーの離脱率が上がることになります。
この発表では、アプリのパフォーマンスとはそもそも何か、なぜそれを重視するべきかについて解説します。 なお、開発の観点だけでなく、ビジネス観点からも指標の設定、パフォーマンス測定、モニタリングについてリソース状況に応じたパターンごとにアプリパフォーマンスの改善方法を紹介します。 発表予定の内容 - ビジネス観点でのパフォーマンスの重要性と指標設定 - リソース状況に応じてアプリ最適化方法の紹介 - パフォーマンス測定の落とし穴 - 指標別でのパフォーマンス測定方法、集計・観測方法 - アプリ起動時間、レンダリングのフレームレート、I/Oのパフォーマンスなど - コスト最低限の最適化から、リソースを十分に活用した豪華な最適化まで - ボーナス:フィードバックから問題箇所を特定する方法とその必要性 | - モバイルエンジニア
- QAエンジニア - モバイルアプリのパフォーマンス改善に興味ある方 - 安心してリファクタリングを進めたいテックリーダー - ユーザーからフィードバックが来る前に対処したい方 - アプリのユーザー体験を向上させたいマネージャー | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
148 | Android View から Jetpack Compose へのフルリニューアルを目指して | Yuki Matsuura | 弊社では、Androidアプリの全画面をJetpack Composeに移行することに成功しました。さらに、現在は Navigation Component から Navigation Compose への画面遷移の実装を検討しています。
Android View を 画面単位やコンポーネント単位で移行する作業は、修正による影響範囲は、比較的小さく、取り組みやすいテーマだと考えています。 一方、画面遷移の実装の移行作業は、修正による影響が多岐に渡り、移行作業に踏み切れないアプリも存在すると考えています。 弊社では、アプリを小さい業務フローに分割し、業務フロー単位で画面遷移の移行作業を行っています。 これにより、移行作業に伴う影響範囲を最小限に抑えることができています。 このセッションでは、Android Viewで実装されたプロダクトをJetpack Composeにフルリニューアルするための1つの戦略を共有します。 | - Android View から Jetpack Compose への移行に関心がある方
- Jetpack Compose 時代の画面遷移の実装方針に悩まれている方 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
149 | 2024年版 AndroidでのHTTP通信について考える | Masakuni Oishi | HTTP通信はほとんどのAndroidアプリで使われている重要な機能の一つです。
しかし、大多数のアプリで使われる機能にも関わらず、developer.android.com内のドキュメントにはHTTP通信に関する記述があまり多くありません。 このように、馴染み深すぎて逆に注目されづらいHTTP通信ですが、ここ何年かの間でも重要なトピックがいくつもあるホットな技術でもあります。 - Android OS上での非暗号化通信のデフォルト不許可 - TLS 1.3 - QUIC, HTTP/3 また一方で、KotlinやKMP(Kotlin Multiplatform)の採用により、HTTP通信を利用するプログラム側の環境も大きく変化してきています。 本セッションでは、HTTP通信に関連する最近のアップデートについて紹介し、それらがセキュリティや性能面でどのような改善をもたらすかを解説します。 そして、Androidアプリ開発における、HTTP/3やKMPにも対応する2024年最新のHTTP通信方法について提案していきます。 | - "HTTP/3"や"QUIC"の名前を聞いたことはあるが詳しくは知らない方
- 既存のAndroidアプリをHTTP/3に対応させたいと思っている方 - これから新しくAndroidアプリを作るにあたり、どのようなHTTPライブラリを採用すべきか気になっている方 | 40 minuites | 日本語 / Japanese | Android Framework |
150 | 大規模なコードベースを維持するために | Yuki Ando | 大規模なコードベースは多数のエンジニアのコミットで成り立っていることがほとんどです。同時に複数の機能の開発やリファクタリングなど様々なタスクが平行して進められていると思います。その結果自分の実装やクラス・変更が意図しない使われ方をしてしまったことはありませんか? 特にAndroidではアプリ全体で統一したデザイン・UXを保つべきですが、カスタマイズされたビュークラスが正しく使われなかった結果、意図しないデザインやUXが生まれてしまうことも珍しくないでしょう。また、androidxライブラリやプラットフォームが提供する基礎的なAPIを正しく扱う必要がありますが、間違った使用方法によって非常に気づきにくいバグを埋め込んでしまうこともあります。
Unit Testを作成しCIで稼働させることで変更のマージ前にチェックすることはもちろん大事です。しかし、デザイン・UXの問題やプラットフォームの問題・ランタイムエラーなどはUnit Testで検出することが難しいです。これらの気づきにくい問題を事前に検知・警告することができれば開発におけるストレスが緩和されるのではないでしょうか。 本セッションでは巨大Androidアプリでの知見に基づいて"壊れにくいコードベース"を育てるために必要な知見やノウハウを解説します。 - Github codeownerを活用した自動レビューリクエスト - Botを用いたスモークテストの推進によるランタイムエラーの抑止 - 変更に基づいたレビューアサインや通知 - アプリ全体へのedge-to-edge対応事例の紹介 - Custom annotationとAndroid linterによるクラスの利用検知と警告の表示 | - 中・大規模なコードベースで開発を行っている人
- アプリに気づきにくいバグが混入してしまい困っている人 - 自分の管理するモジュールやライブラリの使用方法を管理したい人 | 40 minuites | 日本語 / Japanese | 開発体制(Development Process) |
151 | Gemini時代到来 - LLMを使った効率的なアプリ開発 | CookieySun | Android Studioは、Googleが提供するAndroid開発の統合開発環境(IDE)です。Geminiは、AIを活用したコード補完と最適化ツールで、開発者の効率を大幅に向上させます。
そのAndroid StudioにJellyfishでGeminiが搭載され、誰でもLLMによる支援を受けられるようになりました。 本セッションでは、Android Studioに搭載されたGeminiを効果的に活用する方法について詳しく解説します。 近年、開発環境におけるAI技術の導入が進み、開発者の生産性向上が期待されています。Android Studioに新たに搭載されたGeminiは、AIコード補完、チャットでの相談、エラー分析などができます。 これらを使ってより高い生産性を得るための手法を解説します。 | Android Studioを使っている開発者
開発効率を向上させたいエンジニア 新しいツールや技術に興味がある技術者 | 40 minuites | 日本語 / Japanese | 開発ツール&サービス(Development Tools and Services) |
152 | Kotlin 2.0が与えるAndroid開発の進化 | daasuu | Kotlin 2.0のリリースにより、Android開発にさまざまな恩恵がもたらされます。このセッションでは、主要な変更のあった点の基礎概念から、その具体的な利点、使用例と進化の背景も紹介し、より多くのAndroidエンジニアがKotlinの新機能を活用できるようにします。
現時点で紹介予定の主要な変更点と利点 ・K2 Compilerへの進化 ・K2 Compilerによって新たにもたらされる利点 ・Android開発におけるK2 Compilerへのmigration方法 ・Compose Compilerの統合 ・最新のCompose CompilerがKotlinリポジトリに統合されました。 ・Jetpack ComposeプロジェクトをKotlin 2.0.0に簡単に移行可能。 ・常に最新のComposeを利用でき、UI開発がよりシームレスで効率的に。 ・AutoCloseableインターフェースのStable化 ・try-with-resourcesのようなリソース管理が簡単に。 ・リソースの適切な解放が容易になり、メモリリークのリスクが低減。 ・アプリの安定性とパフォーマンスが向上。 ・Gradle Pluginの改善 ・Gradle conventionsの非推奨使用が解消。 ・Gradle 8.2以降の警告がなくなり、ビルドプロセスがスムーズに。 ・新しいGradle DSLで、マルチプラットフォームプロジェクトでのAndroid用コンパイラオプションの設定が簡単に。 ・enum classのvaluesのジェネリック関数対応 ・コードの再利用性が向上。 ・型安全性が強化。 ・enumクラスのすべての値を簡単に取得し、扱うことが可能に。 ぜひ最新のKotlinを使った開発のメリットを実感してください。 | Kotlinをより知りたいAndroid開発者 | 40 minuites | 日本語 / Japanese | Kotlin |
153 | 海外ユーザーに触れてほしいAndroidアプリの作り方 | Kohei Yamamoto, zaburen | 海外旅行にあわせて海外のアプリを利用したことはありますか?
より多くのユーザにサービスを体験してもらうために、海外ユーザにも触れやすいアプリを提供する必要があります。 このセッションでは、昨今の海外旅行客の増加にあわせて、日本国内でサービス展開しているAndroidアプリの海外ユーザ対応としておこなった機能開発について紹介します。 具体的には、Androidアプリの多言語化リソースの用意、海外ユーザ専用機能の実装アプローチ、日本以外の電話番号やクレジットカードを利用可能にする対策など、細かい機能単位で解説します。 キーワード ・多言語化 ・国際電話番号 ・不正利用対策 ・reCAPTCHA Enterprise | Androidアプリの海外ユーザ対応に興味がある方 | 40 minuites | 日本語 / Japanese | Androidプラットフォーム (Android Platform) |
154 | 急速なチーム拡大を支える技術とプロセス | tick-taku, mikami, Sho Murata | 急速にチームが拡大すると、多くの課題が生じます。コミュニケーションが難しくなったり、コードの品質管理が複雑になるなど、さまざまな困難が発生します。
特にストリームアラインドチームを採用している場合、専門領域チームのメンバーが異なる課題解決チームに分散して作業するため、プロダクトタスクの進行方法や同期の方法にも課題が生じます。 このような悪影響を最小限に抑えるために、私たちのチームで事前に取り組んだ事例を紹介します。 そして、実際にメンバーが増加した際に直面した課題と、その解決策についても共有します。 以下のような具体的な話題を取り上げ、実際に発生した課題とそれに対する具体的な取り組みについて詳しく解説します。 - 参加メンバーが馴染みやすくなるオンボーディング - Jetpack Compose などのコーディングガイドラインの模索 - LADR を用いたプロダクトタスクの進行方法 - レビューの半自動化 - レビュー体制とリマインドについて - SLOを用いた品質改善タスクの優先度付けの意思統一 | - Androidチームのリーダーやマネージャー
- ソフトウェア開発プロジェクトの管理者 - チームの拡大を計画している企業の技術者 - コード品質や開発プロセスの改善に興味があるエンジニア | 40 minuites | 日本語 / Japanese | 開発体制(Development Process) |
155 | 大規模チーム開発でローカライズ文言リソースの管理にどう向き合っているか | iseebi | タクシーアプリ『GO』のローカライズ文言リソースの管理では、これまで専用のSaaSを導入していましたが、複数のチームにより機能開発が並走する規模の大きい開発チームにおいては十分なコストパフォーマンスを発揮することができませんでした。
よりプロセスに合う方法を求めた結果、新しい文言管理ツールをOSSとして開発し、開発プロセスに組み込んで改善を進めています。 まだ最終的な目標には達していないものの、これまでチームで抱えていた文言リソース管理上の課題の多くを解決することができています。 このセッションでは、複数の機能開発が並走する状況における文言リソース管理と開発プロセスをどのように改善してきたか、今後の展望とともにお話しします。 | 文言リソースの管理に悩んでいる方、より効率的に行えるようになりたい方 | 40 minuites | 日本語 / Japanese | 開発ツール&サービス(Development Tools and Services) |
156 | TalkBack対応とJetpack Composeにおけるアクセシビリティ向上 | Yuichi Ishibashi | 昨今、誰にとっても使いやすいモバイルアプリを開発するために、視覚、色覚、または聴覚に障がいのある方、細かい作業に支障のある方、認知障がいのある方などにとっても便利にアプリを使えるようにする対応が求められています
本セッションでは特にAndroidのスクリーンリーダー機能である「TalkBack」へ対応するために、取り組むことが望ましい内容とJetpack Composeでの実装方法についてお話しします。 発表予定の内容 ・TalkBack対応のために取り組むべきこと ・Jetpack Composeでアクセシビリティ向上につながるModifierの設定 ・アクセシビリティ対応で活用できる開発ツールやテストツール | ・モバイルアプリのアクセシビリティ向上に興味のある方
・TalkBack対応に興味のある方 | 40 minuites | 日本語 / Japanese | Androidプラットフォーム (Android Platform) |
157 | 2024年最新版!Android開発で役立つ生成AI徹底比較 | Nishimy, wiroha(ゐろは) | 現代のAndroid開発において、生産性向上のための生成AIツールが急速に普及しています。生成AIツールには興味があるものの、どのツールをどのように使えば良いか迷っていませんか?本セッションでは、Gemini、GitHub Copilot、ChatGPTという3つの主要生成AIツールを比較し、実際の開発における具体的な活用方法を提案します。 Android開発ならではのシナリオを交えながら、各ツールの強みや適用シーンを詳細に紹介します。コード品質・開発効率向上のためのヒントやノウハウを共有できればと思います。
アジェンダ(予定): ■ 生成AIツールの概要 ■ Gemini、GitHub Copilot、ChatGPTの比較 - 各ツールの機能とAndroid Studioへの統合方法 - Androidアプリ開発での生成精度 - 使いやすさと導入コスト ■ 実際の開発における活用方法 - ドキュメントの生成 - テストコードの自動生成 - 効率的なコードレビューとデバッグ方法 - アプリのパフォーマンス改善 ※生成AIツールの技術は急速に進化しており、本セッションの内容は応募時点のものです。最新情報や新たなツールの登場により、内容が変更される可能性があります。 | ・生成AIを活用して開発効率を上げたい方
・生成AIの違いを知りたい方 ・生産性向上に興味がある方 | 40 minuites | 日本語 / Japanese | 開発ツール&サービス(Development Tools and Services) |
158 | Jetpack Composeならアニメーションはもう怖くない! | Tamaki Hidetsugu / Ralph | Viewベースのレイアウトで「こんな感じのアニメーション実装してね」っていわれた時、あなたの頭の中では何を考えますか?
「どのアニメーションAPIを使えばいいんだろう」「繰り返しループさせるための処理ちゃんとライフサイクルに合わせなきゃ」「Viewの動的追加とか入ると大変だなぁ」 Web上に新旧のAPIの情報が混在していたり、デバッグが大変だったりと、様々な理由であまりいい思い出はないかもしれません。 Jetpack Composeでは、アニメーションに関連するAPIも一新されました。 座標やサイズ・アルファ値といった単一の値だけをアニメーションさせるAPIから、2つのComposableのアニメーション付きトランジションをおこなうAPI、Activity/FragmentにおけるShared Element Transitionと同等のことをおこなうAPIなど、数多くのAPIが用意されています。 Jetpack ComposeではKotlinがベースになっていることで、Coroutineを活用したライフサイクル的にも安全なアニメーション処理を書くことも容易になっています。 そのようなJetpack ComposeでのアニメーションAPIを活用することで、Viewでおこなっていたアニメーションと同じアニメーションを、より宣言的でわかりやすく記述することができます。 もちろん、作ったComposableは既存のViewベースのレイアウトの中に含めることも可能なので、Viewでは実現しにくい複雑なアニメーションをJetpack Composeで記述するという複合技も可能です。 しかし、目指すアニメーションに適合したAPIを選ばないと、同じ動きでも冗長なコードになってしまったり、Recompositionが多く発生してパフォーマンス上の問題が発生してしまう可能性があります。 そのような事態を避けるためには、Jetpack ComposeのアニメーションAPIにどのような物があるのかを正しく知り、それぞれの方法での正しい実装方法、そしてアニメーションの種類によってどのAPIが適合するのかというのを正しく理解することが必要です。 そして、Viewベースのアニメーションでは行いにくかったAndroid Studio上でのパフォーマンスの計測やプレビュー機能、テストを使いこなすことでより頑健で安定したアニメーションを実現することができます。 このセッションでは、Jetpack Composeで用意されているアニメーションAPIとその動作・カスタマイズ方法を紹介しながら、目指すアニメーションに応じたAPIの選び方を紹介します。 また、既存のViewレイアウトにアニメーション付きComposableを含める方法、アニメーションをテストする方法についても紹介します。 | - Jetpack Composeを使い始めた方
- Viewでのアニメーションに苦い経験がある方 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
159 | まだ読んでるだけなの?! Now in Androidの使い倒し方 | Ryo Watanabe | Android開発の知識を身につけても、ゼロからアプリを作る際や開発をリードする際には、多くの課題に直面することがあります。一方で、近年ではAndroidアプリのアーキテクチャや実装のベストプラクティスを示す高品質なオープンソースプロジェクトが増えており、実践で遭遇する課題の解決に役立てられています。中でも、Googleの「Now in Android」は、多くの開発者が参照する優れたプロジェクトの代表例です。
私は、Now in Androidのソースコードを「ただ読んで参考にするだけ」をやめました。そうではなく、プロジェクトをフォークして実装に変更を加えることで、初めて得られる気づきが多くあったからです。このセッションでは、自身の経験をもとに、オープンソースプロジェクトで採用されている技術を「使えるレベルで」吸収する方法について解説します。 加えて、Now in Androidの基本構成を活用しながら独自の機能を追加したり、デザインやナビゲーション、データソースを改変していくことで得られた学びについても、余すことなく共有します。技術的には、以下のようなトピックを取り扱う予定です。 - ビルドバリアントによって、アプリに異なる振る舞いを持たせるには? - デザインシステムとして定義した内容を、漏れなくUIに適用するには? - どのようにモジュールを分割し、依存関係を持たせると良いのか? | - Now in Androidを知っている/読んだことはあるが、まだ実務に活用できていない方
- オープンソースプロジェクトのカスタマイズに興味がある方 | 40 minuites | 日本語 / Japanese | アプリアーキテクチャ (App Architecture) |
160 | AndroidアプリのUIバリエーションをあの手この手で確認する | Nozomi Takuma | Androidアプリの開発では、デバイスの環境に適切に対応するアダプティブなUIを作ることが求められ、それは開発者にとって厄介な課題でもあります。
開発者は次のようなバリエーションを意識してUIを実装する必要があります。 ・フォントスケールや表示スケール ・ライトモード/ダークモード ・多様な画面サイズ ・端末の種別(Phone, Table, Foldable) では、実装したUIが多種多様な環境に対応できていることを確認するために、開発者はどのような手段が取れるのでしょうか? 見たい環境のデバイスを用意して1つ1つ手動で確認することもできますが、コストがかかります。近年では、そのようなコストを軽減するため、UIのバリエーションの確認が簡単にできる便利な機能やAPIが提供されています。 本セッションでは、Jetpack Composeで実装されていることを前提に、UIのバリエーションを確認するための様々な手段とそれぞれの使いどころを紹介します。 具体的には次のようなトピックを紹介する予定です。 ・Android Studioの機能 ・Compose UI Check Mode ・Compose Preview ・Emulator ・UIテスト・スクリーンショットテスト | ・UIを実装する際に環境(フォントスケールや画面サイズ等)のバリエーションの確認ができていない方
・UIを実装する際に環境(フォントスケールや画面サイズ等)のバリエーションの確認が手間に感じている方 | 40 minuites | 日本語 / Japanese | UI・UX・デザイン (UI・UX・Design) |
161 | Android Autoアプリ開発の今 -ナビゲーションアプリ開発から学ぶケーススタディ- | Takuro Negishi | Android Autoは2014年に登場したプラットフォームで、自動車内でのAndroid端末やアプリの操作を車載システムに最適化するシステムです。
Google I/O 2024での発表によると、新車の98%がAndroid Autoをサポートしており、ドライバーにとって当たり前のシステムになっています。 EVの普及などにより車内で過ごすシチュエーションも増え、Android Auto対応アプリの種類は動画・ゲーム・ブラウザなど、これからより多種多様になってきます。 このセッションでは、Android Auto向けのナビゲーションアプリの開発に焦点を当て、基本的なアーキテクチャから始めて、実際の開発プロセスで遭遇する具体的な課題とその解決策を詳細に解説します。 また、Android Autoアプリのガイドライン遵守の重要性と具体的な実装方法についても深掘りします。 本セッションでは「Google Play ベスト オブ 2023 生活お役立ち部門」で大賞を受賞したYahoo!カーナビアプリの、Android Auto対応プロジェクトから得られた実践的な知見を交えてお話しします。 参加者の方は次のようなスキルを身につけることができるようになります。 ・テンプレートを活用した効率的な画面設計 ・モバイルアプリとの同期方法 ・効果的なテスト戦略の策定 ・Googleアシスタントとのスムーズな連携 ・昼夜モードやシミュレーション走行機能などのガイドラインに準拠した機能の実装 Android Auto向けアプリの開発に興味がある開発者、UI/UXデザイナー、プロダクトマネージャーにとって、実際のアプリケーション開発における実用的なアプローチを理解することができます。 発表予定の内容(変更の可能性があります) ・Android Autoの最新動向とその影響 ・Android Auto向けナビゲーションアプリの開発の基本 ・アプリの基本アーキテクチャ ・テンプレートを活用した画面表示とその制限 ・モバイルアプリとの同期方法 ・効果的なテスト戦略 ・Googleアシスタントとの連携 ・ガイドラインの詳細な解説とその適用 ・ガイドラインの紹介 ・昼夜モード ・シミュレーション走行機能の重要性 ・インストルメントクラスタへの対応方法 | ・Android Auto向けナビゲーションアプリの開発に興味がある方
・初級から上級のAndroid開発者 ・Android AutoのUI/UXデザインについて学びたいUI/UXデザイナー ・Android Autoへのアプリ対応プロセスについて理解を深めたいプロダクトマネージャー | 40 minuites | 日本語 / Japanese | Androidプラットフォーム (Android Platform) |
162 | Google/Amazon/Appleの決済システムの違いを踏まえた定期購読課金システムの構築 | 橋詰 明宗, Tatsuki Ishijima, Jianbin | Android / iOSの両プラットフォームでサービス提供しているアプリにおいて、ユーザーに対して定期購読機能を提供する場合、Google Play Billing、App Store SDK、StoreKit Frameworkなどのプラットフォームが提供するSDKの挙動差異を理解し、以下のような差分を踏まえた課金システムの設計・実装が必要です。
- オファーの挙動の差異 - アップグレード / ダウングレード時の挙動の差異 - Grace Period / Account Hold時の差異 - アプリ外決済の挙動の差異 またユーザーは、Google、Amazon、Appleが提供する複数のモバイル端末やTV端末を使ってサービスを利用し定期購読の決済を行うため、サービス内部のユーザーIDや決済情報が、複数のGoogle、Amazon、AppleのIDに紐づいて管理されることも考慮しなくてはなりません。 このように、Android、iOS、Android TV、Fire TV、Apple TVなどの様々なデバイスを利用するユーザーにとって不利益がない、堅牢な課金システムを作るには多様な観点を考慮する必要があります。 ABEMAでは最近、Google、Amazon、Appleの決済システムの違いを考慮した、定期購読を対象とした新たな課金システムを構築しました。本セッションでは、定期購読時に実施しているロジックや、ABEMAの定期購読の商品設計に関する内容、各種オファーの提供方法など、課金システム全般について、Android側の視点を中心に解説します。また、Android側の設計だけでなく、iOS側の設計についても事例を交えてご紹介する予定です。 本セッションにおけるABEMAでの設計事例を通じて、参加者の皆様が自身のサービスにおける定期購読の課金システムをより使いやすく、堅牢にするための知見を提供できれば幸いです。 | ・Google、Amazon、Appleの決済システムの違いを理解したい方
・各プラットフォームの定期購読機能に関連する挙動差異に興味がある方。 ・Google、Amazon、Appleを対象とした定期購読サービスを提供している方 ・自社サービスで複数のプラットフォームを跨いだ課金システムを設計・実装している方。 ・新たに定期購読機能を導入しようと考えている方。 ・定期購読の商品設計やオファー設計方法に関心がある方 ・サービス内での定期購読プランの設計やアップグレード、ダウングレードの管理方法を学びたい方。 ・各種オファーの提供方法やユーザー体験の向上に関心がある方。 ・複数デバイス間での一貫したユーザーエクスペリエンスを提供したい方 ・Android、iOS、Android TV、Fire TV、Apple TVなど、様々なデバイスでのユーザー体験を一貫させたい方。 ・バックエンドとアプリ側の設計に関わるエンジニア ・課金システムのバックエンド設計に携わるエンジニア。 ・AndroidおよびiOSアプリのフロントエンド設計に関わるエンジニア。 | 40 minuites | 日本語 / Japanese | 開発ツール&サービス(Development Tools and Services) |
163 | フルリモートワーク環境でのエンジニアチームのマネジメントで実践していること | androhi | 優れたエンジニアリング・マネージャーになるための知見は、多くの先駆者の方々が記事や書籍として公開して下さっていますが、近年のオフィス回帰の流れもありリモートワークという環境下での知見はまだまだ少ないかと思います。
最近ではGitLab社がリモート組織について実践していることを公開しとても注目され、日本語での書籍化もありました。企業によっては、オフィスとリモートのハイブリッド型を採用しているところもあり、リモートワーク環境下でのマネジメントについては、色々と模索しているマネージャーも多いように感じています。 ZOZOの開発部門では2019年からフルリモートワーク制度を採用しており、エンジニアチームのマネジメントもそれに合わせて日々進歩させております。 このセッションでは、ZOZOTOWNのAndroidアプリ開発においてメンバー全員がリモートワークを採用しているチームのマネジメントを、どのように実践してきたか、開発体制の変遷も交えながら紹介していこうと思います。 主に以下のようなテーマについて、お話する予定です。 ・オンラインでのミーティングや1on1における工夫 ・バーチャルオフィスの活用 ・他部署/他職種の人たちとのオンライン・コミュニケーション ・マネージャー間の連携 ・リモートワークでのチーム運営の課題 ・1部署1チームから2部署3チームへ拡大した際に行ったこと | リモートワークを採用しているチームのマネージャーやそれを目指している人 | 40 minuites | 日本語 / Japanese | @Experimental ソフトスキル(@Experimental Soft skills) |
164 | WebADBを使用したAndroid専用端末化への自動キッティング手法 | Hisamoto Kunimine | 特定の機能に特化したAndroid専用端末は、多くのビジネスシーンにおいて必須のツールとなっています。
しかし、端末を手動でセットアップすることは、時間と労力を多く消費します。 本セッションでは、Android Debug Bridge(ADB)を駆使し完全自動化を目指したキッティング手法を紹介します。 発表内容 - ADBを使用したキッティング方法 - WebADBを使用してWebアプリケーション化 - ADBだけでは実現出来ない自動化の対処方法 | - DeviceOwnerなどMDM機能を持つような専用端末アプリを開発している方
- WebADBを使ってみたい方 | 40 minuites | 日本語 / Japanese | その他(Other) |
165 | タッチイベントの仕組みを理解してジェスチャーを使いこなそう | usuiat | Composeにはタッチイベントやジェスチャーを検出するAPIが用意されています。このAPIを適切に組み合わせれば、簡単にジェスチャーを実装できます。
しかし、独自のジェスチャーを実装するには、タッチイベントの仕組みの理解が必要です。さらに、重なったコンポーザブル同士でジェスチャーが競合する状況では、意図通りにジェスチャーを動作させるための難易度が高くなります。 このセッションでは、タッチイベントの仕組みを説明し、意図通りにジェスチャーを動作させるノウハウをお伝えします。独自ジェスチャーの実装方法や、コンポーザブル間のジェスチャーの競合を回避する方法を説明し、はまりやすい落とし穴も紹介します。 セッションの中では、私が開発して公開しているZoomableというライブラリを実例として紹介します。Zoomableはジェスチャーによる画像のズームを可能にするComposeのライブラリです。独自ジェスシャーを実装し、親のコンポーザブルとジェスチャーが競合しないように工夫しています。主に想定しているのは、画像をPagerの上に配置するユースケースです。画像に対するピンチジェスチャーと、Pagerに対するスクロールジェスチャーの両方が意図通りに動作するように設計しています。 このセッションを通じてタッチイベントについて理解を深めて、ジェスチャーを意図通りに制御できるようになりましょう。 内容: - ジェスチャーの実現方法 - onClickなどの簡単なAPI - detectGestures APIを利用する方法 - ジェスチャー検出処理を自作する方法 - イベントの仕組み - イベントの伝わり方 - イベントを共有・占有する方法 - タップとスクロールを区別する方法 - タッチイベントがキャンセルされた時の対応 - Fling(慣性)動作の実現方法 | Composeのタッチイベントやジェスチャーについて理解を深めたい人
ジェスチャーが意図通りに動作せず困っている人 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
166 | プロジェクト長期運用に耐えるための、Androidアーキテクチャ設計 | Kento Wakamatsu | Android開発において、アーキテクチャ設計は非常に重要です。アーキテクチャは、アプリの各部分の境界とそれぞれの役割を明確に定義するものであり、具体的な原則に沿ってアーキテクチャを設計することで、アプリの保守性、拡張性、堅牢性、テスト容易性が高まり、全体の開発効率が飛躍的に向上します。プロジェクトの運用が長期化すればするほど、開発初期段階で適切なアーキテクチャ設計が行われてきたかどうかがより重要になり、そこを疎かにしてしまうと、技術的な負債が溜まり、開発スピードが格段に低下してしまいます。
本セッションでは、公式が公開しているアーキテクチャガイドに沿って、アプリの推奨アーキテクチャや各レイヤーについて説明した後に、それをプロダクトコードにどのように落とし込むかについて、これまでの経験を踏まえて丁寧に説明します。本セッションで紹介したアーキテクチャをプロジェクトに取り入れることで、適切な開発スピードを長期的に維持することができるようにります。 セッションで話す予定の内容 - 公式が公開しているアーキテクチャガイドに沿って、アプリの推奨アーキテクチャについての紹介 - 各レイヤについての説明(UIレイヤ、ドメインレイヤ、データレイヤ) - UIレイヤでの状態とイベントの管理方法 - イベントとUiStateの分離する方法とメリットについて - UiState更新のロジックを書く場所の工夫 - RecyclerViewでのUiStateやユーザーイベントの処理の仕方 - ドメインレイヤで状態を管理する方法 - データレイヤでのエラーハンドリング方法 - その他、設計で使えるテクニック | Androidのアーキテクチャ設計について学びたい方 | 40 minuites | 日本語 / Japanese | アプリアーキテクチャ (App Architecture) |
167 | Androidアプリ内課金における定期購入値上げの実践と学び | furusin | 近年の物価高騰や市場環境の変化により、Androidのアプリ課金における定期購入の料金の値上げを検討するケースも増えてきています。
しかし、Androidの定期購入を値上げする場合にはオプトインが必要であったりテストが難しかったりと注意点が非常に多いです。特に収益に関わる重要な機能のため開発は慎重に行う必要があります。本セッションでは、Androidアプリ内課金の定期購入料金を値上げする際に必要な対応と注意点を、経験に基づいて詳しく解説します。 さらに、値上げから1年後のユーザー反応や収益への影響を分析し、その結果に基づいて更なる対応を取った経験も共有します。 # セッションの目的: - Android 定期課金の値上げ方法を体系的に学ぶ - 値上げ作業による意図しない解約を防ぐための対策を理解する - 1年後の経験から得られた気付きに基づき、初期段階でできることを学ぶ # セッションの内容: - Android におけるアプリ内課金の復習 - Google Play Billing Library の復習 - Android の定期購入の値上げに伴う必要な作業 - 値下げとの違い - オプトイン(ユーザーの同意)の方法 - 値上げ作業時に注意すべき点 - ユーザーへの説明 | - 収益化戦略に課題を抱えている方
- 定期購入の値上げを検討している方 - 収益化戦略の一環として、アプリ内課金の導入を検討している方 | 40 minuites | 日本語 / Japanese | 開発ツール&サービス(Development Tools and Services) |
168 | Perfect Compose Margin Guide | ロクネム | Jetpack Composeでレイアウトを実装する際に、 ”余白” を表現する方法は無数に存在します。
どのModifierを使うべきか、どのComposableにModifierを付与するべきか、そもそもModifierではなくComposableに用意された引数で設定するべきか、あるいはSpacerのComposableを使うべきか… さまざまな選択肢がある中で我々は都度判断して適切に余白を実装していく必要があります。 そして、一見期待通りにレイアウトが組めたと思っても、よく見ると意図していない余白が入っていたり、保守性の低い実装になってしまっていることが多々あります。 そこで本セッションでは、Jetpack Composeにおいて余白を表現する上でどのような方針で実装方法を選択するのが適切であるか、具体例を挙げながら体系的に説明します。 | ・Composeでレイアウトを組む際に余白の表現で迷ったことがある方
・Composeで保守性の高いレイアウトを組みたい方 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
169 | 最速で原因にたどり着くための実践的Androidアプリデバッグ | e10dokup | 開発中でもリリース中でも、アプリ開発ではバグに直面するケースが多々存在します。バグは自動テストなどによってある程度その数を減らすことは可能ですが、完全にバグをなくす、というのは困難です。デバッグ作業の中で迅速に仮説を立て、原因を突き止めることは非常に重要な要素となります。
しかし、実際の開発現場やチームにおいて、明らかに自分が開発したと記憶しているケースであればそれらはあまり難しくありませんが、現実には以下のような要素でその難易度は上昇するでしょう。 - アプリの規模が大きくなって、自分が実装に触れていない機能が増えてきた - 開発当時のドキュメントなどの背景が抜け落ちており、仕様かどうかの判断がつかない - 開発したのは自分ではあるが時間が経っていて当時の記憶が曖昧になってしまった - 猶予時間が短い、問題がクリティカルなどの都合で焦りが出てしまう 本セッションでは、このような難易度が上がったデバッグ作業での仮説の付け方、原因の突き止めに着目し、開発環境であるAndroid Studioなど、ツールを駆使してこれらを進めていくためのTipsや実例を解説します。 本セッションを通じて、Androidアプリのデバッグ作業の速度を向上させ、現場での作業効率が改善できれば幸いです。 本セッションで話すこと - Androidアプリデバッグに用いるツールの紹介 - Debugger、Profiler、Inspector、etc... - デバッグを行う際の作業フロー例の紹介 - 実際にデバッグ作業を行う際のtips紹介 - サンプルによるデバッグ作業の実例紹介 | - 規模が大きいアプリの開発にジョインした人
- アプリのデバッグ作業に慣れていない、自信がないと感じている人 - 経験則的にデバッグ作業をやっていて、他のメンバーに手法を教えるのが難しいと感じている人 | 40 minuites | 日本語 / Japanese | 開発体制(Development Process) |
170 | Compose時代のDagger Hilt入門 | ロクネム | Dagger Hiltとは、Googleが提供する依存性注入 (DI) のフレームワークです。公式のアプリアーキテクチャガイドにおいても、Androidアプリを開発する上ではこのHiltの使用が推奨されています。
HiltにはJetpack Composeとシームレスに連携できるようにいくつかのライブラリが提供されており、NavigationにおけるViewModelのスコープ管理には既存のAndroid Viewベースのアプリにはない新しい考え方が求められるようになっています。 本セッションでは、Dagger Hiltの基本的な使い方から、Composeのアプリへの統合、そしてNavigationにおけるViewModelのスコープ管理の考え方まで包括的にお話しします。 2021年からFull Jetpack Composeで開発している弊社のアプリにおける実装例をご紹介しながら説明することで、ComposeのアプリでHiltを使用する上でのより実践的な内容を目指します。 | ・Dagger Hiltの使い方を基本から知りたい方
・ComposeにおけるHiltの使い方を知りたい方 | 40 minuites | 日本語 / Japanese | 開発ツール&サービス(Development Tools and Services) |
171 | 大規模アプリにおける持続可能なE2Eテスト運用を実現するためのメルペイにおける取り組み | kenken, kuromame, hidey | E2Eテストの自動化と保守は、アプリの品質を維持し、リリース速度を保つために非常に重要です。メルペイのAndroidチームでは、QAチームが作成したE2Eテストシナリオを基に、ボランティア形式で集まったエンジニアが自動テストの新規実装およびその保守運用を行ってきました。アプリの規模拡大や組織構造の変化に合わせて、運用方法も逐次アップデートしています。
参考資料: ・1週間リリースを支えるAndroid自動テスト運用: https://engineering.mercari.com/blog/entry/20211210-merpay-android-test-automation/ ・1週間リリースを支えるAndroid自動テスト運用のその後: https://engineering.mercari.com/blog/entry/20231023-mmtf2023-day1-3/ ボランティアチームでの運用は一定の成果を得られました。しかしボランティアチームでは、新規の機能開発や既存の機能修正の速度に対して、E2Eテストの修正速度が追いつかない状況になりつつありました。 原因としては保守運用を行うために確保できる時間が安定しなかったこと、またアプリの規模拡大とともに機能が増え続ける中、各機能の仕様を理解しテスト対象の前提条件やユーザーステータスを把握・用意することが困難になったことなどが挙げられます。 我々はこれらの課題を解決するために、以下のような改善策を試行しました: ボランティアチーム内で保守運用を行う時間を確保するための改善 QAチーム内での自動化チームの新設およびタスクの委譲 機能開発チームへのE2E実装タスクの委譲 複数のチームが自律的に保守対応するためのワークフローの整理 これらの施策の一部はうまく行きましたが、一部は期待した効果を得られませんでした。 本セッションでは、メルペイAndroidチームのケーススタディを通じて、大規模アプリにおける持続可能なE2E自動テストの保守運用に取り組んだ挑戦や失敗、そして最終的に現在運用している体制を紹介します。 | ・E2Eテスト自動化に興味のある人
・大規模アプリ開発におけるE2E自動テストの保守に苦戦している人 | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
172 | なるべくAndroidライクにはじめるKMP | yokomii | 先のGoogle I/O 2024にて、Kotlin Multiplatform(KMP)がAndroidによって公式にサポートされることが発表されました。
KMPを用いることで、プラットフォーム間のビジネスロジックを共通化し、開発効率を向上させることが推奨されています。 ネイティブモバイルアプリ開発における新時代の到来を予感させますが、まだ実務での利用経験のない方も多いでしょう。 (私もその一人です。) 本セッションは、そんなKMP初学者の皆様が、これからKMPを始めるための取っ掛かりとして、「KMPをサポートするAndroid Jetpackライブラリ」の実用例をいくつか紹介し、共に学ぶことを目的としています。 現在サポートが公表されている以下のライブラリ群からいくつか紹介予定です。 - Annotations - Collections - DataStore - Paging - Lifecycle - ViewModel - Room | - Androidの開発経験はあるが、KMPは初学者の方
- プラットフォーム間のビジネスロジックの共通化を図りたい方 - 「KMPをサポートするAndroid Jetpackライブラリ」と、その実用例を知りたい方 | 40 minuites | 日本語 / Japanese | Kotlin |
173 | Master of 不具合調査 | Kazuki Chigita | Androidは、多様なメーカーから様々な形にカスタムされたデバイスが発売されています。
ユーザの使用するOSバージョンも様々で、全世界のAndroidユーザのうち99%をフォローするためには、2024年現在においてもAndroid6(minSdkVersion 23)をサポートする必要があります。 このような多様な使用環境にアプリを提供すると、開発時の環境では発見できなかった不具合に、アプリリリース前後に気がつくことがあるでしょう。 問題が発生していることに、ログを通して初めて気がつくこともあるでしょう。あるいはユーザからの問い合わせで発見される不具合もあるかもしません。 不具合調査を進めると、原因は様々です。 特定OSバージョンやデバイスでのみの不具合、LargeScreen Deviceへの考慮漏れ、ライブラリをアップデートした影響によるクラッシュなどなど、 Androidアプリだからこそ発生しやすい不具合もあります。こんな問題に遭遇したときに、どのように対処していますか? このセッションでは、Androidアプリ特有の不具合に焦点を絞り、不具合調査をするためのツールやテクニックを紹介します。 特に不具合の発見、根本原因の調査、修正完了までの一連の流れで抑えるべきAndroidアプリ特有のポイントを紹介します。 それぞれのステップで有効なツール(Firebase Crashlytics、Android Studio Profiler)の使い方にも触れます。 また、継続的に不具合自体の発生数を抑えるための取り組みや継続的なモニタリング手法も紹介します。 このトークを聞くことで、Master of 不具合調査として、Androidアプリの品質向上に貢献することができるでしょう。 <<トークアジェンダ>> 1. 不具合調査のために必要なこと 1-1. OSバージョン、デバイス毎、アプリ性質、実行環境による不具合の差分を理解する 1-2. API内部実装が変わったバージョンを意識する 1-3. ユーザの使用ストーリーを考える 2. 不具合の再現と根本原因の調査 2-1. Androidエミュレータの活用の仕方 2-2. 不具合特定のためのコードリーディング・ツール使用術 3. 不具合の修正とリリース 3-1 quick fixとfundamental fix 3-2 リリース後の不具合のモニタリング 3-3 継続的に不具合発生数を抑えるためにできること | - Androidのバージョン差分に悩むエンジニア
- 不具合を修正してユーザ体験を向上させたいエンジニア - 継続的に不具合発生数を抑えたいエンジニア | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
174 | Revving up your Android app | Daniele Bonaldo | With the increasing demand for connected cars, Android Automotive has become a crucial platform for developing automotive applications. However, developing apps for cars is quite different from mobile development, as it involves designing interfaces that are safe and easy to use while driving, and integrating with car-specific features such as navigation, entertainment systems, and sensors.
In this talk, we will explore the opportunities and challenges of automotive development, and discuss why creating automotive apps is interesting given the current car market. We will cover the key differences between mobile and automotive development. These include hardware limitations, interface design considerations, testing requirements, app distribution, presence or lack of Google services and apps for car categories just introduced by Google. Finally, attendees will learn how to adapt their existing large screen Android apps to make them car-ready and to unlock a new market with huge potential. | Developers with a basic mobile UX understanding. | 40 minuites | English | Androidプラットフォーム (Android Platform) |
175 | Put some 3D sparkles in your 2D app | Daniele Bonaldo | Trigonometry, rototranslations, vectors, matrices... when thinking about 3D modeling and visualization most mobile apps developers start to get worried, but it doesn’t need to be all that scary!
In this talk we’ll see how any developer, even without any prior experience with the topic, can integrate some 3D model and environment into an Android app, blending it seamlessly with the existing UI. We’ll do this thanks to the great Filament library from Google. At the end of the talk the audience will learn: - how a 3D model is made - which formats are supported by Filament - the main components needed to properly display a 3D model into an app - how to harness the powerful Filament lightning system to add more realism to the scene - how to blend 3D components into a Compose-based UI - advanced 3D animations | Android developers with some basic Compose experience. No 3D prior experience needed. | 40 minuites | English | 開発ツール&サービス(Development Tools and Services) |
176 | This session submission has been withdrawn. | ||||||
177 | KMock - a Case Study for KSP on KMP | bitPogo | Did you ever miss some meta-programming capabilities similar to reflection for Kotlin Multiplatform (KMP)? Did you ever wish for preprocessor capabilities ? Have you ever wonder why it took so long to have proper mocking libraries for KMP? Did you ever want to create code for KMP in tandem with annotation?
Kotlin Symbol Processing (KSP) is an answer to that problem. The talk will give you an introduction on how to use it, including a testing approach. Additionally, you learn about some challenges due to KMP, how to implement a way to set up your processors conveniently for your users and limitations you will run into using KSP. | Experts | 40 minuites | English | 保守・運用・テスト(Maintenance / Operations / Testing) |
178 | DI with Koin | bitPogo | What is Dependency Injection, a Service-Locator, and why should I care?
How far can I go with decoupling and what are the pros and cons? Let us dive deep into that topic through the power of Koin! | Beginners | 40 minuites | English | Kotlin |
179 | And Gradle says: sharing is caring - Or why Gradle Plugins are all you need for your Configuration | bitPogo | Have you ever been in dependency hell? Are you tired of copying and pasting your setup from one project to another? Do you wish there would be an easy way to share your configurations, workflows, dependencies? Say no more!
Born out of painful lessons, this talk will give you a crash course in how you can ship your setup easily to different projects by using the power of Gradle (Convention) Plugins, VersionCatalogs, etc. | Advanced users which enjoy Gradle | 40 minuites | English | Kotlin |
180 | Server Composables! Moving your screen logic to the server with kotlinx-rpc | Isuru Rajapakse | We already know that Square's molecule library lets you model complex screen logic to state-flows with Jetpack Compose. But did you know that you can stream these state-flows over WebSockets with kotlinx-rpc? This combination of libraries lets you move your screen logic over to the server and build "Server Composables".
But why? What is the advantage of moving this logic to the server in the first place? Is it worth switching over to WebSockets? Wouldn't we lose our screen state when our network goes down? These are some of the questions that will be answered in this session. First, we will go through how to architect the data flows of your app with Jetpack Compose. Secondly, we will go through how to use Compose to model state to state-flows with Molecule. Thirdly, we will go through how we can move this logic over to the server with kotlinx-rpc. | This talk is intended for Android or Kotlin Multiplatform developers who already have some understanding of how data flow is architectured in mobile apps. This talk will also require previous knowledge of how Jetpack Compose works. | 40 minuites | English | アプリアーキテクチャ (App Architecture) |
181 | Android開発以外のAndroid開発経験の活かしどころ | konifar | 「このままAndroid開発をメインのスキルとして磨いていていいのだろうか」、「マネジメントにも興味がなくはないけれど今の経験が活かせるのだろうか」といった不安を漠然とかかえている方はいませんか。
私は2020年までAndroid開発のプレイヤーとしてたくさんのコードを読み書きしてきました。その後、エンジニアリングマネージャー、QAエンジニアを経て、今はVP of Engineeringとして開発組織全体のマネジメントをしながらサーバーサイドGo / Android Kotlin / iOS Swittのコードを書いています。 社内外のAndroidエンジニアと1on1をしたり採用面談をやってきた中で、冒頭のように「Android開発は楽しいけれどキャリアとしては不安」という声を想像以上に多く聞いてきました。私はそのたびに、「Android開発の知見や経験は他の開発やマネジメントにも活きるし、今のAndroid開発を目一杯楽しんで極めていくのも全然よいと思う」と話してきました。 このセッションでは、実際にAndroid開発に強みを持ちながらiOSやサーバーサイド、QA、マネジメントを経験してきた私の視点から、Android開発経験をどのように活かせてきたのかを共有します。キャリアについて考え悩むのは素晴らしいことである一方で、過度に不安に感じることなく今のAndroid開発を楽しんでいいのだと感じてもらえると嬉しいです。 | Android開発に軸足を置いていることに漠然とした不安を感じている方
Android開発経験が他の領域の開発やマネジメントにチャレンジする時に活きるところがあるのかを知りたい方 | 40 minuites | 日本語 / Japanese | @Experimental ソフトスキル(@Experimental Soft skills) |
182 | Composeでアニメーションを実装する | emusute | 昨今のAndroidではComposeでUI構築することが主流になってきていると思います。UIによってはアニメーションを付与することでより強いインタラクションを与えたり、より表現を強くしたりでき、Composeでアニメーションを構築することも珍しくないです。
しかし、アニメーションの実装は難しく、複雑なアニメーションはできるだけ避けて実装したいと思っている方が多いと思います。 本セッションでは、私自身がComposeで複雑なアニメーションを構築した際に役立った以下のことを話そうと考えております。 - Composeのアニメーションでの登場人物 - デフォルトで用意されているアニメーションを実装も深堀りしていきます - デフォルトで用意されているEasingとEasing curveを作る方法 - デザイナーとのアニメーション認識のズレの最小化をどう解決するか | Composeでアニメーションを実装したい方
Composeはある程度知っているけどアニメーションはよくわからない方 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
183 | Compose for TV を活用したアプリ開発: ハマりどころとその対策 | Tomoyuki Takezaki | Android のモバイルアプリ開発において Jetpack Compose は正式リリースから三年ほど経ち、製品での導入が進んでいます。一方、Android の TV 向けアプリ開発では、今でも主に Leanback ライブラリ (注1) が使われているでしょう。
TV アプリ向けの Jetpack Compose ライブラリ (以下、 Compose for TV) は、2024年05月から beta 版の提供が始まりました。弊社では、このライブラリが alpha 版の時点から、Compose for TV を利用した TV 向けアプリの概念実証を行ってきました。 このセッションでは、Compose for TV を活用する上で、実装が難しかった箇所を解説します。具体的には、画面遷移を伴うフォーカスの取り扱い、Drawer の実装、および独自実装のソフトウェアキーボードについて解説します。また、関連する前提知識についても取り上げます。 このセッションで話すこと - TV 向けアプリを作成する際に考慮すること - 画面の大きさ - 操作性: フォーカスの制御 - デバイスの性能および寿命 - Compose for TV の概観 - 主要な UI コンポーネントの紹介 - TV 向けとモバイル向けの Material ライブラリが別であること - alpha 版と beta 版の比較(注2) - Tips 1: フォーカスの制御 - 画面遷移によってフォーカスが失われないようにする - フォーカスの位置を細かく制御するには - Tips 2: Drawer の実装 - NavigationDrawer の使い方 - Drawer を閉じたときに幅をゼロにしたい場合 - Tips 3: TVアプリにおける文字入力 - OS組み込みのキーボードか、独自実装キーボードか - 独自実装キーボードの実装の難しさ このセッションで話さないこと - Jetpack Compose に関する基本的な事柄 注1: Leanback ライブラリは、旧来から存在する TV アプリ向けのサポートライブラリです。特に、UI に関しては Android View や Fragment に基づく実装が提供されています。 ( https://developer.android.com/jetpack/androidx/releases/leanback ) 。 注2: 発表時点で RC 版や正式版がリリースされている場合、内容に変更がある場合があります。 | TV向けアプリ開発者
Jetpack Compose を利用したモバイルアプリの開発経験があり、TVアプリ開発に興味のある方 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
184 | Adaptive Layoutを導入してあらゆるデバイスに最適な体験を提供する | maxfie1d | あなたのアプリは様々なフォームファクターのデバイスで常に最適な表示を提供していますか?
近年タブレットやフォルダブルなどデバイスの種類が多様化しています。例えばスマートフォンではきれいな表示のアプリでも、タブレットでは洗練されていない表示になっているということがあるのではないでしょうか。 この問題を解決するのがAdaptive layoutです。複数のフォームファクターに対応するのは大変そうですか?でも大丈夫、コツさえつかめばAdaptive layout対応は簡単です! 本セッションではAdaptive layoutの基本的な考え方から実践的な実装方法までを紹介します。 【アジェンダ】 - Adaptive layout の基本 - Adaptive layout の種類 - Adaptive layoutの採用事例 - 2024年のAdaptive layoutのアップデート - Compose Material 3 Adaptiveを使用して既存のアプリにAdaptive layoutを導入する - Activity embeddingを使用する方法 | - 対応デバイスをこれから増やしたい方
- すでに対応しているが体験を最適化したい方 | 40 minuites | 日本語 / Japanese | Androidプラットフォーム (Android Platform) |
185 | 既存のTV 向けアプリに Compose for TV を導入する | Tomoyuki Takezaki | Android のモバイルアプリ開発において Jetpack Compose は正式リリースから三年ほど経ち、製品での導入が進んでいます。一方、Android の TV 向けアプリ開発では、今でも主に Leanback ライブラリ (注1) が使われているでしょう。
TV アプリ向けの Jetpack Compose ライブラリ (以下、 Compose for TV) は、2024年05月から beta 版の提供が始まりました。弊社では、このライブラリが alpha 版の時点から、Compose for TV を利用した TV 向けアプリの概念実証を行ってきました。 このセッションでは、 Leanback ライブラリを利用して作られた画面を Compose for TV を利用して書き換える方法について、トップダウンアプローチとボトムアップアプローチを検討します。また、関連する前提知識についても取り上げます。なお、 Leanback ライブラリに関する詳細な知識は、仮定しません。 このセッションで話すこと - TV 向けアプリを作成する際に考慮すること - 画面の大きさ - 操作性: フォーカスの制御 - デバイスの性能および寿命 - Compose for TV の概観 - 主要な UI コンポーネントの紹介 - TV 向けとモバイル向けの Material ライブラリが別であること - alpha 版と beta 版の比較(注2) - Compose for TV を利用した開発のポイント - 画面遷移によってフォーカスが失われないようにする - フォーカスの位置を細かく制御するには - Leanback ライブラリを利用して作られた画面を Compose for TV を利用して書き換える - トップダウンアプローチ - ボトムアップアプローチ このセッションで話さないこと - Jetpack Compose に関する基本的な事柄 - Leanback ライブラリの詳細 注1: Leanback ライブラリは、旧来から存在する TV アプリ向けのサポートライブラリです。特に、UI に関しては Android View や Fragment に基づく実装が提供されています。 ( https://developer.android.com/jetpack/androidx/releases/leanback ) 。 注2: 発表時点で RC 版や正式版がリリースされている場合、内容に変更がある場合があります。 |
Jetpack Compose を利用したモバイルアプリの開発経験があり、TVアプリ開発に興味のある方 Leanback ライブラリを利用した TV 向けアプリの開発経験者 Leanback ライブラリで作られた TV アプリに Compose for TV を導入したい方 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
186 | Rx メインのアプリが挑む、Apollo Kotlin 2 から 3 へのアップデート | Chinoyatta | RxJavaを使用しているアプリが Apollo Kotlin 2から3への更新時に躓いたことを共有したい
Migration Guide だけではわかりにくかったこと・Rxを使用しているアプリが更新時に気をつけるべきことをわかりやすく解説したい | Androidアプリ開発中級者・RxJavaをアプリに使用している方・Apollo Kotlin を使用している方 | 40 minuites | 日本語 / Japanese | 開発ツール&サービス(Development Tools and Services) |
187 | Fleet + Amperで次世代のAndroid開発環境を手に入れる | maxfie1d | Androidアプリを開発するツールといえば... IDEはAndroid Studio、ビルドはGradleが思い浮かぶのではないでしょうか。しかしながらこの常識がFleet(2021年)とAmper(2023年)の登場によって変わるかもしれません。
Fleetは「20 年におよぶ IDE 開発経験を土台にゼロから構築し、 IntelliJ のコード処理エンジンを採用した」コードエディタです。Amperは「ユーザー体験とIDEサポートに焦点を当てたプロジェクト構成およびビルドツール」です。 FleetとAmperの組み合わせはAndroidアプリ開発だけでなく、Kotlin Multiplatformの開発においても威力を発揮します。 本セッションではFleetとAmperの基本の解説に加え、ライブデモを中心にFleetとAmperを使ったアプリ開発を追体験していただけます。 アジェンダ - Androidアプリ開発ツールの歴史 - Fleet、Amperとは - Fleet、Amperの得意なこと、できないこと - Let’s coding! 一緒にFleet + Amperでアプリ開発してみましょう - Android - Kotlin Multiplatform | - Androidアプリを開発している方
- Kotlin Multiplatformで開発している方 - Fleetを試してみたい方 - Amperを試してみたい方 | 40 minuites | 日本語 / Japanese | 開発ツール&サービス(Development Tools and Services) |
188 | Analyticsライブラリでアプリを汚さないためのレイヤードアーキテクチャ入門 | Kei Tamura | Analyticsライブラリ、UI層から直接呼び出しちゃってませんか?
アプリ開発において、ユーザーの行動データを収集・分析するためのAnalyticsライブラリの導入は非常に重要です。しかし、これを直接アプリのコードに組み込むと、アプリの構造が複雑化し、コードの可読性や保守性が低下するリスクがあります。特に、複数のAnalyticsサービスを使用する場合や、後から新しいサービスを追加する必要が生じた場合、その影響はさらに顕著です。 本セッションでは、こうした問題を回避し、アプリのクリーンな構造を保つための効果的なアプローチとして、レイヤードアーキテクチャを活用する方法について詳しく解説します。レイヤードアーキテクチャは、ソフトウェアの構造を論理的なレイヤーに分割する設計手法で、それぞれのレイヤーが明確な役割を持つことで、システム全体の柔軟性と保守性を向上させます。 「アプリアーキテクチャなにもわからない」「なんとなく理解してるつもりだけど、ちゃんと切り分けられてるか自信がない」そんな方々に向けて、Analyticsライブラリの導入という具体的なケースを通して解説をします。 | アプリアーキテクチャの理解に自信がない人 | 40 minuites | 日本語 / Japanese | アプリアーキテクチャ (App Architecture) |
189 | iOS や Web に負けるな! Compose でテキストの「アキ」を調整 | Daiji256 | このセッションでは、Jetpack Compose を用いて、美しくテキストを表示するために、テキスト中の「アキ」を調整する方法を紹介します。
我々は普段の生活で、多くの日本語の文章を目にします。Android アプリのテキストにおいても、できるだけ美しくあるべきです。 そのために、日本語組版の一般手法をまとめた日本語組版処理の要件[1] にも示されている、文字の間のアキを調整することを試みます。「アキ」とは括弧などの約物前後の空白や、和欧間の空白のことです。アキの管理は、Microsoft Word や LaTeX といったソフトではもちろん対応しており、iOS や Web でも対応が進んでいます。 Android、iOS、Web(HTML + CSS)を比較し Android の現状を確認します。そして、目指すべきテキスト表示を Compose の Text を用いて実現を試み、その方法を紹介します。 [1]: https://www.w3.org/TR/jlreq/ | - テキストにこだわりのある方
- Compose の Text について可能性を知りたい方 | 40 minuites | 日本語 / Japanese | UI・UX・デザイン (UI・UX・Design) |
190 | DaggerからHiltへのライブラリ移行とSDKライブラリのDI戦略 | Tomonori Matsukawa | ANDPADは複数のアプリを提供しており、アプリ間で共通の機能に関しては社内用のライブラリとしてコードを管理しています。このアプリとライブラリの両方でDIライブラリを利用している状況において一部アプリをDaggerからHiltに移行しました。
この移行過程で「アプリ側はHilt, ライブラリ側はDagger」のように、どちらも別のDIを使える状態に依存関係を整理することで後発のDIライブラリへの置き換えに困らないようにすることができました。 このプロポーザルでは、まずHilt初学者に対してHiltの便利な機能を紹介します。次にDaggerからHiltへの移行を検討している方に向けて移行手順と移行後のリリース前に気をつけた方が良い点を共有します。最後に弊社のようにアプリとライブラリという構成にする場合の依存関係の整理方法をお伝えします。 | - Hilt初学者
- DaggerからHiltへ移行を検討中の方 - アプリ間での共通機能をライブラリとして切り出している方 | 40 minuites | 日本語 / Japanese | Jetpack |
191 | Kotlin MultiplatformでSaaS大規模アプリの生産性を向上させる技術的意思決定と組織設計の事例紹介 | Kenji Kitamura | どの開発チームにとっても、開発生産性の向上は重要な課題です。Sansan株式会社では、SaaSの営業DXサービス「Sansan」を提供しています。これまで、SansanのAndroidアプリとiOSアプリは別々に開発してきました。今年、AndroidとiOSのビジネスロジックを共通化し、コードの統一化やOS間の仕様差を解消することで開発生産性を向上させるために、Kotlin Multiplatform (KMP) を導入しました。しかし、大規模なプロダクトにKMPを導入することは、大きなインパクトを伴う変更です。本セッションでは、KMP導入に向けた技術的意思決定のプロセスと、その事例を紹介します。また、自社プロダクトにKMPを導入するための具体的な方法や、KMP導入の効果を最大化するためのヒントを提供します。
# セッション内容 - KMP導入の目的を明確にする - KMP導入の効果を試算する方法 - Android/iOS/KMPの全体アーキテクチャ設計と技術的意思決定のプロセス - KMP導入の効果を最大化するための組織設計 - KMP導入で発生する技術的課題とその解決策 - KMP導入の効果を維持するための取り組み | 既存アプリにKMPを導入し生産性を上げたいと考えているが、変化が大きくてどのように進めたら良いかわからない方 | 40 minuites | 日本語 / Japanese | クロスプラットフォーム(Cross-platform Development) |
192 | あなたの知らないAndroid Keystore | keiji_ariyama | 電子署名・検証、データの暗号化・復号化(またはそれに伴う鍵共有)など、暗号化技術は今日、セキュリティにおいて非常に重要な要素の1つとなっています。
Androidアプリを開発する上で、暗号処理を必要とするシーンは珍しくありません。 たとえば、個人情報やアクセストークンなどの機微な情報をストレージ上にそのまま保管せず、暗号化処理をすることは一般的なユースケースとして挙げられます。また、アプリ側で生成した鍵ペアの公開鍵をシステムに登録し、電子署名を通じて、確かに登録したアプリからのリクエストであることを示すケースもあります。 これら暗号関係の処理をアプリに実装する場合、いくつか注意が必要です。 暗号化処理を独自実装すると、既知の攻撃方法に対して脆弱となる可能性があります。 また、暗号関係の外部ライブラリを使用した場合、意図せずセキュリティレベルを低下させたり、長期的な視点からコードのメンテナンス性を低下させたりする可能性があります。 Androidには暗号化処理と鍵管理を行う「Android Keystore」という仕組みがあります。アプリはAndroid Keystoreを用いることで暗号処理や鍵管理を比較的安全に行うことができます。 また、暗号化鍵や暗号化処理をデバイスに搭載されているセキュリティハードウェア内で行うこともできるオプションも用意されています。 本講演では、次の内容について触れる予定です。 * Android Keystoreとは * AndroidバージョンごとのAndroid Keystoreの差異 * Hardware-backedな鍵のPros&Cons * デバイス認証と鍵のバインド * 電子政府推奨暗号リスト(CRYPTREC暗号リスト)に見る暗号アルゴリズムの選択 * Googleの暗号化ライブラリ「Tink」を通して見るAndroid Keystore * その他Android Keystoreトラブル事例 | 個人情報、トークンなど機微情報をストレージに保管するアプリを現在開発している、将来開発する予定がある、または開発することに興味がある人
電子署名技術を用いるアプリを現在開発している、将来開発する予定がある、または開発することに興味がある人 | 40 minuites | 日本語 / Japanese | Security / Identity / Privacy |
193 | Kotlin Coroutinesでマルチスレッド問題を克服!安全な非同期処理の作り方 | Kenji Kitamura | 現代のAndroidアプリ開発において、非同期処理の効率的な実装は不可欠です。Kotlin Coroutinesは、その簡便さと強力な機能により、開発者にとって魅力的なツールです。しかし、マルチスレッド環境における課題は依然として存在し、また中断可能なSuspend関数により新たな問題も発生します。
このセッションでは、Kotlin Coroutinesを用いた非同期処理の基礎から実践的な解決策までを解説します。初心者でも理解しやすいように、マルチスレッドの基礎から始め、具体的な事例を交えて以下のトピックをカバーします。 - マルチスレッドの基本とデータ保護の重要性 - よくあるマルチスレッド問題 - 問題解決のためのベストプラクティス - Kotlin Coroutinesの効果的な活用法 このセッションに参加することで、マルチスレッド環境で発生する問題に対する理解が深まり、Kotlin Coroutinesを用いた安全かつ効率的な非同期プログラムを自信を持って開発できるようになります。私たちの開発現場で直面した具体的な事例を通じて、実践的な知識を身につけましょう。もうマルチスレッドは怖くない! | マルチスレッド環境で発生する問題の解決に自信が無い人 | 40 minuites | 日本語 / Japanese | Kotlin |
194 | 詳解 Strong Skipping Mode | Yusuke Suzuki, akkey | Jetpack Composeのパフォーマンス最適化を行う際、Recompositionを減らす取り組みをしてきたエンジニアは多いのではないでしょうか。具体的には、Composableのパラメータをstableにする工夫や、ラムダの使用方法を工夫するなどです。また、パフォーマンスに問題がない場合でも、少しでもパフォーマンスが向上するように同様の取り組みをしてきたエンジニアも多いと思います。
しかし、Composeコンパイラ1.5.4から実験的に導入されたStrong Skipping Modeを有効にすることで、前述のような観点でのパフォーマンス最適化の必要性が大幅に軽減されます。この機能は、unstableなパラメータを持つComposableでもRecompositionをスキップ可能にし、さらにunstableなキャプチャを持つラムダを自動的にメモ化します。 このように、Strong Skipping ModeはComposeのパフォーマンス最適化を容易にする非常に有用な機能ですが、Composeに関する深い知識が求められるため、多くのエンジニアにとって理解が難しいと感じられるかもしれません。 そこで、本セッションでは、Strong Skipping Modeの登場経緯からComposeコンパイラの内部実装まで深掘り詳細に解説します。 このセッションを聞くことで、Strong Skipping Modeの登場経緯や内部実装を理解し、パフォーマンス最適化が容易になる原理を理解することができ、さらにComposeの深い理解が得られるようになると思います。 <アジェンダ> - Strong Skipping Modeの登場経緯 - Composeのパフォーマンス改善方法の説明 - Strong Skipping Modeの解説 - 概要・導入方法 - Composeコンパイラでの内部実装の説明 | ・Composeのパフォーマンス最適化に興味があるエンジニア
・Strong Skipping Modeを完全理解したいエンジニア ・Composeに詳しくなりたいジュニアエンジニア | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
195 | Android歴史学:ウィンドウシステムに見るセキュリティ強化の変遷 | Yamaton | ウィンドウシステムは、Androidの基本機能を支える重要な要素です。初期のAndroidバージョンから最新に至るまで、ウィンドウシステムは多くのセキュリティ強化を経てきました。このセッションでは、各バージョンで導入された主要なセキュリティ対策を紹介し、その背景にある脆弱性や攻撃手法、そしてそれがどのように防がれたかを解説します。
具体的には、以下の内容を取り上げます: ・権限管理の強化とその実装方法 ・ウィンドウの透過性制御と制限強化 ・SYSTEM_ALERT_WINDOW権限 ・バックグラウンドアプリに対するオーバーレイ表示制限 ・ウィンドウマネージャーの権限分離 これらのトピックを通じて、ウィンドウシステムのセキュリティに関する知見を深め、Androidの進化の過程を歴史学的な視点で探求します。セキュリティの歴史を紐解きながら、Androidのウィンドウシステムがどのように進化してきたのかを一緒に学びましょう。 | ・Androidのウィンドウシステムについて知りたい方
・Androidの過去に触れて知的好奇心を満たしたい方 | 40 minuites | 日本語 / Japanese | Android Framework |
196 | Dynamic Feature Moduleを使った機能のオンデマンド配信 | rikuyu | 歴史のある大規模なアプリにおいて、アプリサイズの肥大化は避けられない事象です。アプリサイズが極端に大きいとユーザーのインストール率に悪影響が生じるなど様々な問題が発生します。これらの問題は開発が進むことによる機能の増加がその原因の一端となります。これを解決する手段として、Dynamic Feature Module(以下、DFM)が挙げられます。DFMを使うことで、アプリの特定の機能をモジュールに切り出して必要なユーザーにだけオンデマンドで配信することが実現できます。その結果、インストール時のアプリサイズの肥大化を抑えることに貢献します。
本セッションでは、このDFMについて機能の概要からTips等を紹介し、よりユーザーに対して効率的に機能を提供するための手法について解説します。弊チームでは、このDFMを使って開発者体験を損なうことなく、ユーザー体験を向上させるための様々な工夫を行ってきました。このような工夫をはじめとして、私たちが実際のプロダクトにDFMを導入した経験を元に得た知見を紹介します。 <アジェンダ> - DFMとは、そのメリットとデメリット - 既存アプリにDFMを組み込むために - DFMのTips集 | - DFMとは何かについて知りたい方
- DFMの導入を検討している方 - DFMのテスト方法について知りたい方 - bundletoolの使い方 | 40 minuites | 日本語 / Japanese | 開発ツール&サービス(Development Tools and Services) |
197 | Make your Android app into Multiplatform app | Masatoshi Kubode | Google I/O 2024でAndroidでKotlin Multiplatformを正式にサポートすることが発表されました。
Kotlin Multiplatform(KMP)は、Kotlinで書かれた共通のロジックをAndroidだけでなくiOSやWebなど複数のプラットフォームに共有できる技術です。AndroidでKMPがサポートされたことにより、Android用に書かれていたコードを複数プラットフォームへの共通コードとして展開しやすくなりました。 KMPは、共通化するレベルを自由に決めることができます。APIクライアントだけを共通化したり、ビジネスロジック全体を共通化するなど選択肢があります。また、JetBrainsが提供するCompose Multiplatformを使うことでUIまで共通化することも可能です。 これらの技術を組み合わせることで、Androidアプリのコードを活かしながら、アプリをMultiplatformに段階的に進化させることが現実的になりました。 このセッションでは、Googleが公開しているAndroid Sunflowerのコードから、実際にMultiplatformアプリへ進化させる過程を紹介します。その過程でMultiplatformに対応していないライブラリやコードの移行手段や気をつけるべきポイントを交えながら説明します。この手法の利点と欠点や、有効なユースケース、将来性についても話します。 | Jetpack Composeの知識がありAndroid Sunflowerのコードを理解できるくらいの知識は必要です。
Kotlin MultiplatformやCompose Multiplatformに興味があるかた、複数プラットフォームへのアプリ展開を課題を感じているかたなどに聞いてほしいです。 | 40 minuites | 日本語 / Japanese | クロスプラットフォーム(Cross-platform Development) |
198 | Rust でネイティブ開発が簡単になる! | @ishihatta | NDK を使ったネイティブ開発では言語として C/C++ を使うことが一般的ですが、言語レベルでメモリ安全性が確保されなかったり単体テストが面倒だったり学習コストが高かったりとハードルが高いのが実情です。Kotlin や Java よりも圧倒的な実行時パフォーマンスがあることは知っていてもそれらのハードルを嫌ってネイティブ開発に踏み込めない人も多いでしょう。
一方で近年人気を集めている Rust はこれらの問題を解消あるいは緩和する仕組みが取り入れられており Android のネイティブ開発にも大きな恩恵をもたらします。これまでネイティブ開発を敬遠していた方たちにも是非その変化を知ってほしいです。そしてみんなでネイティブ開発しましょう! このセッションでは mozilla が提供している Rust Android Gradle Plugin を利用することを前提に、デモアプリのコードを見ながら主に以下のことをお話ししたいと思います。 - セットアップが容易であること - 実行時パフォーマンスの高さを維持しながらモダンなコーディングができること - 単体テストの実装、実行が容易であること | - NDK を使った開発に苦労している方
- NDK を使った開発に興味はあるけど C/C++ が苦手な方 | 40 minuites | 日本語 / Japanese | Android Framework |
199 | 既存の機能をSDK化する:メルカリのケーススタディ | kuromame, atsumo, Anthony Allan Conda | 大規模サービスにおいて、共通機能のためのSDKを作成することは、ビジネスの成功と開発者の体験向上において非常に重要です。
SDK機能開発の一般的な方法として、独立したリポジトリで開発・維持することが挙げられますが、この方法にはライブラリのバージョン管理やテストなどの保守・運用上の課題が伴います。 実際、メルカリでは上記課題のため、開発したSDKをメインのRepositoryに再統合する必要が何度も生じました。 今回、Flutterを使用して構築された新しいアプリケーション「Hallo」の開発において、メルカリは一部の機能をSDKとしてメルカリのネイティブAndroidアプリケーションから提供することになりました。 そして上記の再統合の経験から、SDKを別Repositoryに分割して管理するのではなく、メルカリのメインのRepositoryから機能を切り出し、SDKとして提供するアプローチを採用しました。 このセッションでは、この決定に至った理由、設計上の考慮事項、設計段階で直面した問題、それらへの対応策、そして実際の実装中の経験について、 アーキテクトチーム、SDK提供元の機能開発チーム、そして組み込み先のチーム(Flutter)の3つ視点から紹介します。 このセッションで取り上げるユニークなAndroidのチャレンジ: - Gradle multi-module featureをMavenアーティファクトとしてエクスポートし、他のアプリにインポート可能にすること - Gradle Kotlin DSLおよびGitHub Actionsを使用して、SDK利用者側のAndroidアプリに継続的な機能更新を配布するCIの設定 - FlutterアプリにネイティブのAndroid機能を統合すること - Androidプロジェクトのための優れたSDK APIの設計 - メインRepositoryから切り出されたSDKの初期化と、Dagger Hilt、Jetpack Compose、認証、Feature Flagなどのネイティブ依存関係の管理 | - ネイティブAndroidおよびFlutterプラットフォームに携わるソフトウェア開発者およびエンジニア
- 統合戦略の強化に関心のあるSDK開発者 - クロスプラットフォーム機能の実装に関する洞察を求めているモバイルアプリのアーキテクトや設計者 - 大規模な開発プロジェクトに携わるプロジェクトマネージャーやチームリーダー - SDKのメンテナンスと配布に関する課題と解決策に関心のある技術愛好家 | 40 minuites | 日本語 / Japanese | アプリアーキテクチャ (App Architecture) |
200 | 分析に裏打ちされたアプリウィジェット開発 - Jetpack Glanceとともに | Yuri Ogura, Miyabi Gouji | Androidでは、アプリの外部でユーザーとコミュニケーションを取る機能として通知とウィジェットがあります。多くのアプリが通知を活用していますが、ウィジェットを実装しているアプリは多くはない印象です。
しかし、ウィジェットは多様な表現の幅を持ち、ユーザーが機能や配置を自由に選択できることが大きな強みです。また、ユーザーにウィジェットを配置してもらうことで得られるアプリへのメリットも数多くあります。一例として、アプリはApp Standby Bucketsによる制限状態から除外されるため、アプリの機能の継続的な提供に寄与します。 本セッションでは実際に弊社で行った、ウィジェット開発施策について ①ウィジェットを開発する動機 ②データに基づく開発施策と効果検証 ③実装(Jetpack Glance)におけるヒントと留意点 の三本立てで共有します。 ①ウィジェットを開発する動機 - ウィジェットの歴史と変遷 - ウィジェットをおくことによるメリット - 事業への貢献 - アプリ機能への貢献 ②データに基づく開発施策と効果検証 - 開発施策 - 現状のウィジェット分析 - 新ウィジェットの開発 - ユーザーへのウィジェット訴求 - 効果検証と意思決定 ③実装(Jetpack Glance)におけるヒントと留意点 - 慣れ親しんだJetpack Composeとの違い - 従来のウィジェットからJetpack Glanceへの置き換え - Android12以上/Android11以下での差分 - ウィジェット設置プレビューのポイント エンジニア目線で課題を見つけ、提案をしていくことがアプリ体験の向上に繋がります。皆さんもウィジェット開発を通してアプリのユーザー エンゲージメントを向上させてみませんか? | - アプリウィジェット/Jetpack Glanceに興味がある方
- 開発者が改善案を提案し実際に施策を実施するまでのプロセスに興味がある方 - 施策の効果検証に興味がある方 | 40 minuites | 日本語 / Japanese | 開発体制(Development Process) |
201 | Activity / Fragment / Jetpack Composeを繋ぐ共通ナビゲーションインターフェースの提供 | Go Takahana | 長く運用されるアプリでは、Activityベース・Fragmentベース・Jetpack Composeベースのナビゲーションの3パターンが共存し、それだけ実装パターンも増え、実装の複雑化・開発効率の低下を招きます。
その理想的な解決方法は、ActivityからFragmenに処理を移動する、もしくはFragmentからJetpack Composeに処理を移動し、ナビゲーションの実装パターンを1つにしていくことです。 しかしながら、全てのプロダクトがその移動作業に十分な時間を割けるわけではありません。 時には現在のソースコードを再利用し、素早くビジネス要求に応えることも必要です。 ただ、それでは実装パターンが1つにならず、課題の解消は遠退くばかりです。 そこで、本セッションでは「Activity / Fragment / Jetpack Compose 共通ナビゲーションインタフェース」を提供し、ゆるやかなSingleActivity化を可能にする方法を紹介します。 ■ 概要 - Androidのナビゲーション原則 - 共通ナビゲーションインタフェースの設計 - FragmentベースのNavigation Componentをベースにした具体的な実装 - ナビゲーションのシナリオごとの単体テスト(Robolectric) - ゆるやかなSingleActivity化ステップ - 特別なナビゲーションの対応 - 任意の順番の画面スタック作成 - ActivityのfinishAffinity()の置き換え - DeepLink | - Androidのナビゲーション原則について知りたい方
- Fragmentベースのナビゲーションから、フルCompose化を目指す方 | 40 minuites | 日本語 / Japanese | Jetpack |
202 | 大規模ネイティブアプリをFlutterアプリにリプレースするための戦略と戦術 | akeybako | クロスプラットフォーム開発において、単一のコードベースで様々なプラットフォーム向けのアプリケーションを開発できるFlutterの認知度が日々高まっています。また、ネイティブアプリからFlutterへの移行を検討する企業も増加傾向にあります。
しかし、大規模なコードベースや多くのユーザーを抱えている大規模なプロダクトにおけるフレームワークの置き換えは、多大な工数やブランドイメージ毀損のなどのリスクが伴います。そうした状況における段階的・漸次的な移行のために、FlutterではAddToAppという機能が提供されています。 このセッションでは、AddToApp導入と、その先にあるFlutterアプリへの移行を実現するための戦略と戦術について解説します。 現在想定している内容は以下の通りです。 - AddToAppとは何か? - ネイティブアプリからAddToAppアプリへの移行プラクティス - AddToAppアプリからFlutterアプリへの移行プラクティス | - ネイティブアプリからFlutterアプリへの移行を検討している方、関心がある方
- AddToAppやFlutterプラグインを用いたネイティブアプリとFlutterの相互運用興味がある方 | 40 minuites | 日本語 / Japanese | クロスプラットフォーム(Cross-platform Development) |
203 | Essential concepts to know when learning Declarative UI | HyunWoo Lee | "Declarative UI" is a hot topic in the mobile UI development ecosystem these days. Declarative UI toolkits provided by the OS, such as Jetpack Compose and SwiftUI, are replacing the traditional imperative approach to UI development.
Moreover, the cross-platform market is getting bigger by the day, and as long as you know the different types of declarative UI toolkits such as Flutter, React Native, and Compose Multiplatform, you can deliver market-ready products on any platform. But does the usage look different for each toolkit? No. The syntax and specific usage of each toolkit may vary, but the overall concepts behind them are similar or identical. In this session, we'll take the essential concepts covered in declarative UI and see how they're implemented in Jetpack Compose, SwiftUI, and even React Native if you can afford it, so that you can quickly learn the different declarative UI toolkits. - What is Declarative UI? - What is different between imperative-fashioned way and declarative-fashioned way? - Re-draw UI and state(Recomposition/Re-render): Core concept of Declarative UI - Prevent inefficient construction of objects: Memoization - How to pass objects in UI Nodes?: CompositionLocal(Context) - Various ways of state management in each toolkits - Future of state management in Android: Introduction to Server State Management(tanstack-query from React/riverpod from Flutter) | - Those who wants to create products that support multiple platforms with Jetpack Compose and other declarative UI toolkits(such as SwiftUI, React Native)
- Those who are not yet familiar with the concepts that exist within declarative UI - Those who are still developing UIs in the imperative paradigm and want to quickly adapt to developing screens in the declarative paradigm | 40 minuites | English | クロスプラットフォーム(Cross-platform Development) |
204 | レガシーコードと向き合う | こまたつ | レガシーコードというとあまりいい印象が無い人も多いかと思いますが、新しいものはいずれは古くなっていくものです。
2008年に1.0が出たAndroidも16年目ということで、年季の入ったコードベースを抱えているチームも多いことでしょう。 このセッションでは私が最近joda.timeをjava.timeに置き換えた体験談をベースに、現在の環境下でコードを新しい状態に更新していくうえでのコツや注意点のほか、将来レガシー化した際に更新しやすい設計とは?というところまで踏み込んで話したいと思います。 レガシーからの移行がつらい!で終わらない、今日から使えるレガシーコード対策をお持ち帰りください。 | Android StudioとKotlinを用いたネイティブアプリ開発を前提とした内容です。 | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
205 | 2024年のナビゲーション・フォーカス対応:Composeでキーボード・ナビゲーションをサポートしよう | Tiphaine (ティフェン) | Androidユーザーは画面を触れずにアプリケーションの操作ができます。状況によってキーボード、リモコン、またはゲームコントローラーなど、様々な外部デバイスが使えます。
もしかしてこういった状況をサポートする経験をお持ちかもしれませんが、Composeでの実装は試したことありますでしょうか? 開発時に考慮しなければ、キーボード・ユーザーの体験が悪くなったり、もしくはアプリの機能が完全に使えなくなることもありますので、Composeが普及してきている今改めて開発者の理解の更新が必要です。 本セッションでは、まずフォーカス・ナビゲーションの概念など基礎知識をしっかり理解してから、 画面に触れないナビゲーションをサポートする時に気を付けるべきポイントのチェックリストと、XMLでの解決方法を一緒に確認します。 最後にComposeの世界で今までの概念がどう変わるか、そしてチェックリストの問題とどうやって向き合えるかを紹介します。 Composeに移行してもすべてのユーザーをサポートできますように! | - ナビゲーション・フォーカス知らない方、大体理解したい方
- これからキーボード・ナビゲーションをサポートをしようと考えている方 - 既存のキーボード・ナビゲーション対応をどうやってComposeでできるか知りたい方 - すべてのユーザーに最高の体験を作りたい方 後半はComposeの知識が求められます(初心者レベルで大丈夫です) | 40 minuites | 日本語 / Japanese | UI・UX・デザイン (UI・UX・Design) |
206 | GraphQLの魅力を引き出すAndroidクライアント実装 | Kurumi Morimoto | GraphQLは、APIスキーマの表現力の高さとデータ取得の柔軟性により、多くの開発者の注目を集めています。しかし、既存のAndroidアプリのアーキテクチャにGraphQLを単に組み込むだけでは、GraphQLの良さを十分に感じることはできないでしょう。処理の実態にそぐわないUseCaseやRepositoryクラスを宣言したり、GraphQL Fragmentの分割の粒度やファイルの配置場所を誤ると、かえって開発効率が低下してしまいます。
GraphQLの魅力を引き出すには、特性を活かしたアーキテクチャ設計と宣言的UIの活用が大切です。 本セッションでは、新規プロダクトにGraphQLを全面採用し、2年ほど運用した中で蓄積されたADR(Architecture Decision Records)を紹介します。GraphQLクライアントライブラリは、Apollo-Kotlinを使用しています。 内容は以下を想定しています。 ・GraphQLとスキーマ駆動開発 ・Apolloクライアントで実現するレイヤードアーキテクチャ ・Jetpack ComposeとGraphQL Fragment Colocation このセッションを通じてGraphQLの特性を理解し、スキーマ駆動開発を加速させるノウハウを習得しましょう。 | - AndroidアプリでGraphQLを利用することに興味がある方
- すでにAndroidアプリでGraphQLを利用している | 40 minuites | 日本語 / Japanese | アプリアーキテクチャ (App Architecture) |
207 | たすけて!ViewModel / Help me! ViewModel | mhidaka | Composeを使いたい、最新のアプリ設計を学びたい、チームで開発に集中したい、そんな人のためのアーキテクチャ解説セッションです。
モダンなUIフレームワークComposeとViewModelを組み合わせたCompose時代に最適な設計ノウハウをお伝えします。 Androidアプリ開発者なら誰もがViewModelの設や実装方針に迷った経験があるはずです。初めて触れるとき、チーム開発で設計方針をディスカッションするときなどViewModelが議論の中心にいることも少なくありません。本セッションではFull-Composeなアプリの開発実務やコミュニティから集めた疑問や知見を元に絶対押さえておくべきプラクティスを紹介します。 特に陥りやすい次の状況を解決することを目的に新時代のスタンダードを提示します。 - 慣れていないため「これはどうやってハンドリングするのがベストプラクティスなんだろう?」と迷んでしまう状況 - 試行錯誤で「この実装で良いとおもったけど後から考えるとこっちのほうがよかったな」などのやりがちな失敗 例示するソースコードはGoogleのComposeサンプルから取り込みコードベースでの理解を促進し、後半では高難易度なUI仕様、ビジネス要件、複数のViewModelといったアプリが持つ複雑性との付き合い方・考え方までサポートします。これらを通じて公式ガイドラインを読むだけでは得られないノウハウ、推奨アーキテクチャの解釈など設計に必要な視点を提供します。 セッションで予定している内容(変更する可能性があります) - ViewModelの責務とアプリ設計の基本 - ViewModelとUI Viewの責務を分割する基準 - ViewModelとUIの初期化を理解する - Compose時代のUIStateとロジック - ViewModelにおけるエラーハンドリングとビジネスロジック - ViewModelのテスト戦略 | - アプリ開発の初学者の方
- Composeを使いたい・使い始めた方 - チーム開発での設計ガイドラインを知りたい・作りたい方 アプリ開発の初学者から業務利用、チーム開発に携わる方を対象としており、Composeフレームワーク等への特別な知識は不要です。 | 40 minuites | 日本語 / Japanese | アプリアーキテクチャ (App Architecture) |
208 | 端末スペックから逆算して考えるユーザ体験 | akkey, Yusuke Suzuki | みなさんは日頃のアプリ開発において、安定して動作することを保証する最低端末スペックを定義していますか?開発効率という観点から、高スペックな端末を所有している開発者も多く、ついつい低スペックな端末での動作確認を怠ってしまっているという方も少なくないかもしれません。
そこで本セッションでは、サポートするスペックの定義と運用の方法を始めにご紹介し、後半では外食チェーン店で普及し始めている「注文タブレット」を例に低スペックな端末を意識した仕様決めと実装方法についてご紹介します。 まず、注文タブレットは最低限の機能のみを搭載した比較的安価な端末であることが多いです。なぜなら、数多くの店舗に注文タブレットを整備するには多額の初期費用が必要になるからです。では、低スペックな端末にはどのような特徴があるのでしょうか。もちろん、端末によって様々ですが、タップの感度が悪かったり、タップ位置の誤差が大きいといった問題が最も表面化しやすいでしょう。こうした端末の制約を考慮したうえでアプリを設計・開発することが我々には求められるのです。 つまり、アプリを設計・開発するうえで「サポートする端末スペック」という指標は非常に重要だと言えます。 本セッションを聞いていただくことで、スペックの低い端末でアプリをご利用いただいているユーザに対しても最高の体験を届けるノウハウを持ち帰っていただけます。また、ユーザ体験を向上させるためのヒントを得ることができるでしょう。 | ・パフォーマンスを意識した設計と開発に興味がある開発者
・利用者層の広いアプリを開発されている方 | 40 minuites | 日本語 / Japanese | UI・UX・デザイン (UI・UX・Design) |
209 | Privacy Sandbox on Android | Junya Haseba | 昨年2月に、Android向けのPrivacy Sandboxのベータ版が公開されました。
Android向けのPrivacy Sandboxは、広告IDなどの識別子を利用することなく、ユーザーのプライバシーを保護しながら効果的なデジタル広告配信を行うことを目的とした仕組みです。 本セッションでは、現在提案されているPrivacy Sandboxの各種機能、特にSDK Runtimeについて、これまで存在した問題をどのように解決しようとしているのかに焦点を当ててお話しします。 SDK Runtimeは、サードパーティの広告SDKを別のプロセスで実行する仕組みです。プロセス間の通信は可能ですが、SDKが直接アプリのメモリを参照することはできなくなるため、これまでよりも高いセキュリティを提供することができます。 <概要> - これまでの広告SDKの仕組み - これまでの仕組みの問題点 - SDK Runtime導入後の仕組み - なぜSDK Runtimeで問題が解決されるのか - その他のPrivacy Sandboxの機能 - Topics - Protected Audience API - Attribution Reporting | - Privacy Sandboxに興味がある方
- SDK Runtimeに興味がある方 | 40 minuites | 日本語 / Japanese | Security / Identity / Privacy |
210 | いまから追い上げる、Jetpack Composeトレーニング | nyafunta9858 | 2020年8月26日にJetpack Composeのアルファ版リリースがアナウンスされてから、4年の月日が流れました。多くのプロダクトでJetpack Composeの導入が進んでいることかと思いますが、既存のAndroid Viewから完全移行するためにはまだまだ長い道のりが待ち構えていると感じているかたも少なくないかと思います。
また、リアクティブプログラミングモデルが採用されているため馴染んでくるのにもある程度の知識が必要であったり、従来のUI開発とは勝手が異なるためになかなかキャッチアップが捗らない、といったかたもまだまだいらっしゃるのではないでしょうか? 本セッションでは、実際に業務で起こりえそうなシーンをイメージしつつ、想定受講対象者が以下のゴールを達成する支援となることを狙います。 ◆想定ゴール 想定受講対象者が以下の状態となることを目指します - Jetpack Composeを使ったUI開発の基礎固めができている - Jetpack Composeを使った開発に必要な情報ソースに到達しやすくなる - Jetpack Composeを使ったUIのパフォーマンスチューニングができる - Android Viewでやっていたような複雑なUIを開発できる | - Jetpack Composeにこれから触れるひと
- Jetpack Composeをなんとなくで触っている気がしているひと - 従来のAndroid Viewで開発したような複雑なUIをJetpack Composeで開発する想像力を養いたい - Jetpack Composeに関する情報ソースを整理・把握したいひと | 40 minuites | 日本語 / Japanese | Jetpack Compose |
211 | Debugging Your Application in the New era / Compose時代の効率的なアプリデバッグ | mhidaka | Composeアプリでは、これまでのアプリ開発とは異なる技術要素を扱っています。本セッションではComposeアプリの不具合を特定し、素早く修正するデバッグ手法を中心に解説します。
パフォーマンス解析などCompose特有のクセ、実際に不具合が起きたときのデバッグ手法、そして不具合を起こさない予防的な設計アーキテクチャやテストなど変化に強いアプリ開発トピックを解説します。 - UIの不具合を解決する / ComposeのUI構造とデバッグ手法 - アプリの挙動を理解する / 不具合発生時のアプリの解析方法、デバッグツールの導入 - パフォーマンスを改善する / パフォーマンスと品質を両立するための開発手法、ツールの紹介(Android Studioの機能を含みます) - 変更に強いアプリ開発 / Compose friendlyな設計思想や単体テストによる実施方法 現在浸透しつつある宣言的UIフレームワークのComposeはアプリ設計そのものに変化を迫ってきています。単純にUI部分を入れ替えて移行完了というわけにはいかず、 実際にRepositoryやUsecaseのインターフェイスにはCoroutinesやFlowが多用されはじめました。リアクティブプログラミングと相性が良い設計を取ることで、変化に強いアプリ開発を実現できます。 デバッグは手を動かして学び、改善する絶好の機会です。アプリ開発でComposeの力を存分に発揮し、真の生産性を引き出しましょう! | - アプリ開発の初学者
- デバッグ手法について知りたい方 / 便利なツールを知りたい方 - 不具合に合いたくないのに合ってしまう方 | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
212 | The real case of offline-first app: Farmer App in Ghana | Arief Rahman | In Japan almost every places has access to the internet and the internet is very fast, but not in Ghana, especially in farmer community!
So in order for us to help them in many ways such as maximize their income, building an offline-first app for those community is a must. So in these session i'm gonna talk about how we help farmer community in Ghana while having offline-first app, including: - Registering themselves in the app - Registering their activity - Notify them - Mapping their farm - And problems that we had and how we tackled it. | For all the level who:
- Want to learn how to build an offline-first app - Were building an offline-first app and want to see the approach we take | 40 minuites | English | アプリアーキテクチャ (App Architecture) |
213 | KSPの導入・移行を前向きに検討しよう! | shxun6934 | RoomやDagger、GlideなどのライブラリーをAndroidアプリに導入する際、Kotlin Symbol Processing(以降、KSPとする)を用いることが推奨されるようになりました。
また、Android Lintでも「KaptUsageInsteadOfKsp」という項目で警告が出るようになり、Kaptを使用している場合はKSPに移行するように促されるようにもなりました。 ですが、ライブラリーがKSPをサポートするようになったのは、ここ最近の話なので、KSPの導入や移行を実際に行なった方は数少ないのではないかなと思います。 なので、本セッションでは、KSPと何か・kaptとは何かをメリット・デメリットを交えて振り返りつつ、導入・移行をするにはどうすればいいかを解説できたらと思います。 また、Kotlin 2.0がリリースされたことで、KSPの2系もリリースされる予定です。そのKSPの2系でどのような変化があるかも少しだけ解説できたらと思います! --- - KSPと何か - kaptとは何か - kaptからKSPに移行メリット - 導入・移行方法 - KSP 1系から2系の変化 | - KSPをよく知らない
- KaptからKSPに移行を考えている - KSPの良さがいまいちよくわからない | 40 minuites | 日本語 / Japanese | Kotlin |
214 | Let's make our compose stable | Arief Rahman | Jetpack compose has helped us to create a UI much simpler and nowadays people are shifting from xml layout to jetpack compose because it offers many benefits in day to day development.
Here in this session i wanna talk how to enhance the benefits of compose by talking about how recomposition works and how to enhance our app performance by stable, immutable or strong skipping mode. | People who:
- Learning jetpack compose - Are in the middle of migration to compose - Are using compose | 40 minuites | English | Jetpack Compose |
215 | What's New in Kotlin 2.0.0 and Kotlin Language Roadmap | mhidaka | 本セッションはKotlin 2.0の新機能を紹介します。言語の進化はアプリ開発をより楽しく、便利にしてくれる重要な変更ですが言語のリリースノートにある「スマートキャストを改善しました」という文章から役に立つシーンを具体的に想像できる人は多くありません。
そこで本セッションでは単純な紹介にとどまらず、新機能がどのように役立つのか解説し、アプリ開発のトレンドへの対応、Kotlin Multiplatformなど背景情報や言語が目指す将来についても触れたいと考えています。 知識として知ることはもちろん、利用シーンを想像することで/変更の背景を知ることで/Kotlinが目指す未来を知ることで、聴講者のみなさんがKotlin言語をもっと好きになれる内容を目指します。 - 待望の新コンパイラ、K2の特徴と開発へのインパクト - スマートキャストの改善と便利な使い方 - 型チェックの強化と効果 - Kotlin 2.0以降に予定されている新機能 - ライブラリー・エコシステム(kotlinx-datetimeベータリリース) - Kotlin言語の将来とAndroidアプリへの影響 | - Kotlin言語に興味がある方
- 言語の裏側を知りたい方 / 仕様について詳しくなりたい方 本セッションは言語の新機能を紹介するためアプリ開発の知識や実務経験は必須ではありません。 | 40 minuites | 日本語 / Japanese | Kotlin |
216 | Baseline Profile の使いどころ | consomme | Baseline Profile は、アプリのコード解釈とJITコンパイルの手順を再秘することで、アプリの実行速度を向上させる仕組みです。
Android Studioでもモジュールを新規作成できる仕組みが搭載されているなど、導入自体は割と簡単に進めることができます。 …しかし、これを見て「コード解釈?JITコンパイル?結局何してくれるものなの??」と思われる方も多いことでしょう。 そして、一体何をやればいいんだろう? そもそも最適化って内部的に何をやっているんだろう…? 本セッションでは、Baseline Profileがそもそもどういうものなのかという点から、モジュールの準備、実際の処理、内部処理、また応用的な話について、実際に使用するコード塔を見ながら解説します。 | ・Androidアプリのビルドの最適化を考えている方
・Baseline Profile の導入を考えている方 ・Baseline Profile の仕組みについて知りたい方 | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
217 | Delight your (multiplatform) users! | Daniele Bonaldo | Since it was introduced, Kotlin Multiplatform offered a great solution to share apps business logic across different platforms. Now, thanks to Compose Multiplatform, it’s possible to create beautiful UIs for apps running on different platforms too. And it even goes beyond mobile!
In this talk we’ll do a quick introduction to Kotlin Multiplatform and Compose Multiplatform, highlighting the main differences compared to Jetpack Compose and the available tools. Attendees will see how easy it is to create UIs that are flexible enough to be displayed not only on different displays but also different platforms. During the presentation we’ll see some powerful techniques to add beautiful and meaningful animations to different kinds of apps, in a consistent way through several platforms. But fear not! This is not just a recap of official documentation or some exhibition of re-used samples: at the end of the presentation attendees will see what can be achieved with a bit of attention to details and the power of Compose! | Android developers with a basic knowledge of Jetpack Compose which are interested in going the extra mile to add some delightful detail to their app | 40 minuites | English | クロスプラットフォーム(Cross-platform Development) |
218 | フィーチャーフラグを使って安全にJetpack Composeに移行する | Mori Atsushi | Android Viewで書かれた多くの機能を持つ画面をJetpack Composeに一括で移行することは、容易ではありません。各機能の移行にも時間がかかり、すべての機能をテストすることも大変です。また変更が多岐に渡る場合、何か問題が発生した際に原因となる変更を特定するのも困難です。さらに、他の機能開発を並行して行いたかったとしても、移行作業がその妨げとなることもあります。
これらの課題を解決するため、できるだけ小さい単位で段階的に移行を進める方法について紹介します。一度のリリースに含める変更を小さくすることで、上記のリスクを軽減することができます。 さらにフィーチャーフラグを活用することで、より柔軟に移行作業に取り組むことができます。フィーチャーフラグは開発者が特定の機能のオンオフを切り替えられるようにするもので、開発中の機能を隠したり、選択した機能のみをリリースすることが可能になります。ブランチでリリースするコードを管理するのに比べ、リリースの順序を変更したり、問題があった場合に機能をオフにするといった柔軟なリリースが可能になり、また他の作業と並行して取り組みやすいというメリットがあります。 一方、Android Viewを使っている場合、UIは基本的にxmlで記述するため、一部だけをフィーチャーフラグで切り替えるためには工夫が必要です。また、フィーチャーフラグを使う場合、一時的に新旧のコード両方を維持する必要がありますが、どのように整合性を保つかというのも課題の一つです。 このセッションでは、Jetpack Composeへの移行を題材に、スムーズかつ機能開発を邪魔しないアプリケーションの保守・改善を行う方法について紹介します。 1. Jetpack Composeへの移行の課題 2. トランクベースとフィーチャーフラグの利点 3. 移行タスクの分割方法 4. フィーチャーフラグを使った具体的な移行手順 | ・既存のアプリをJetpack Composeに移行している人、しようとしている人
・継続的なアプリケーションの保守・改善に関心がある人 | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
219 | Composable関数の可読性を上げる | Mori Atsushi | Jetpack Composeにおいて、Composable関数はUI構築だけでなく、Stateの保持やside-effectsの実行等、多くの役割を果たします。長期に渡ってアプリケーションを開発し続けるには、それらのCopmosable関数の可読性を高く保つことが重要です。
例えば、Composableの命名やプロパティーの並び順などは、公開されているAPIガイドラインで定められているので、それに従うのが良いでしょう。また、長くなったComposable関数は適切に分割する必要があります。 本セッションでは、Composableを小さく保つための手段として、複数の状態をStateクラスに切り出したり、UIコンポーネントと状態を管理するComposableを分割する方法について提案します。複数のアプローチを知りそれらを状況によって使い分けることで、理解しやすくメンテナンス性の高いコードを実現することができます。 予定している内容: * ComposeのAPIガイドライン * Composable関数のルートに複数のUIコンポーネントを置かない * UI Composable関数の分割方法 * 多くのrememberをStateクラスに切り出す * Stateを出力するComposable関数に切り出す | ・Jetpack Composeを使い始めた人
・大きなComposable関数に悩んでいる人 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
220 | Gemini API Developer Competitionに挑む: FirebaseとFlutterを活用したアプリ開発の試み | Tomi Hand | Gemini API Developer Competitionに参加し、Flutterを使用してアプリケーションを開発する挑戦についてお話しします。Gemini API、Firebase、Flutter技術を活用した開発プロセスの詳細、直面した課題とその解決方法、そして現在の進捗状況を共有します。これからコンテストに参加される方や同様の技術を使用したい方にとって、実践的な知識と洞察を提供するセミナーです。 | - クロスプラットフォームに関心がある方
- 開発プロセスや課題解決の実例に興味がある方 - Gemini APIに関心がある方 - Flutterに興味がある方 | 40 minuites | 日本語 / Japanese | クロスプラットフォーム(Cross-platform Development) |
221 | FlowからStateFlowへの変換:戦略と最適な活用法 | Tomi Hand | KotlinのFlowデータをStateFlowに変換する戦略と方法を紹介します。
特に、この変換において重要な役割を果たす「SharingStarted」コンポーネントに焦点を当てて詳しく解説します。 セッションのハイライト - FlowとStateFlowの違いと基本的な理解 - StateFlowへの変換の理由 - FlowからStateFlowへの具体的な変換戦略 - SharingStartedの詳細な分析 - ケーススタディと問題解決 このセッションを通じて、参加者はFlowデータをStateFlowに変換する技術を効果的に習得し、活用するための知識を深めることができます。 | - Kotlin Flowの初心者
- SharingStartedを使用していますが、まだ完全には理解していない方 | 40 minuites | 日本語 / Japanese | Kotlin |
222 | Navigation Composeを使いこなす | Kenji Abe | Jetpack Composeで画面遷移を実現するためにNavigation Composeを使用することが多いと思います。
ただし、Navigation Composeは一見は簡単に使用できるように見えますが、注意しなければいけないことが少なからずあります。また、他にもメンテナンス性などを考えた実装を心がける必要もあります。 このセッションではNavigation Composeについての実践的な解説をしていきます。 予定内容 - Navigation Composeの基礎 - 画面遷移のカスタマイズ - 引数や戻り値の受け渡し - NavigationBar等との統合 - 実装上の注意 - 正しい実装方法 | Jetpack Composeを使ってる方
Navigation Composeを使ってる方 Navigation Composeの導入を考えてる方 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
223 | Develop App Faster and Smarter with Gemini, Your AI-Powered Companion | Kotaro Kamashima | In this session, I will explore how Gemini, an AI-powered companion integrated into Android Studio, can revolutionise your app development workflow. Gemini is designed to enhance productivity by offering AI code completion, error explanations and fixes, and an interactive chat interface for getting answers to your development questions.
Join me to discover how Gemini can transform your coding experience, making it faster, smarter, and more efficient. I will demonstrate real-world examples and provide tips on integrating Gemini into your daily workflow, ensuring you get the most out of this powerful tool. | * People who are Android developers of all levels looking to enhance their productivity and streamline their development process.
* People who are beginners wanting to learn more about AI-assisted coding. * People who are experienced developers seeking to optimize their workflow. * People who want practical knowledge applicable to various stages of development. | 40 minuites | English | 開発ツール&サービス(Development Tools and Services) |
224 | Block Storeを使った再ログイン円滑化 | napplecomputer | Androidにはアプリのデータをバックアップする仕組みが用意されています。
アプリがバックアップ機能を利用すると、ユーザーが機種変更をした際やアプリを再インストールした際にアプリのデータを引き継ぐことができます。 一方でバックアップ機能は使いこなすことが難しく、バックアップ機能を一切使っていないアプリも少なくありません。 本セッションではAndroidのバックアップ機能を解説しつつ、タクシーアプリ『GO』の再ログインの課題をバックアップ機能の一つであるBlock Store APIを用いて改善した事例を紹介します。 本セッションに含まれる内容 - Androidのバックアップ機能の解説 - バックアップ機能の種類と特徴 - Restoreのタイミング - タクシーアプリ『GO』の再ログイン円滑化事例紹介 - 課題 - 検討内容 - Block Store APIを使った再ログイン円滑化 - Block Store APIを使ってみての所感 | - アプリのバックアップ機能に興味のある人
- Block Store APIに興味のある人 - 円滑な再ログインに興味のある人 | 40 minuites | 日本語 / Japanese | Security / Identity / Privacy |
225 | AndroidエンジニアのためのBluetoothパケット解析入門 | Kenta Harada | IoTデバイスとBluetoothで接続するタイプのAndroidアプリで一番困ることは接続性の問題です。
接続性問題を解決するにはAndroid Framework、アプリ、IoTデバイスのどのレイヤーに原因があるのか切り分ける必要があります。 そこで必要になってくるのがBluetoothプロトコルアナライザーと呼ばれているデバイスです。 このデバイスを使うと実際に空中を飛んでいるBluetoothパケットを取得することができます。 本セッションでは、Bluetoothプロトコルアナライザーを使ったパケットの取得方法、Androidの開発者オプションで取得できる HCIスヌープログについて解説します。さらに実際のパケットをWireSharkで確認しながら解析する手順のデモを行います。 お話する内容 - Bluetoothプロトコルアナライザーとは? - AndroidのBluetoothチップとプロトコルスタックの構成について - Bluetoothパケットのエアログ、HCIスヌープログの取得方法のデモ - Wiresharkを使ったパケットの解析方法と実際にあった不具合の紹介 - パケット解析を効率的に行うためのTips | Bluetooth機器と接続するアプリを開発している方
Bluetoothのパケット解析手法に興味がある方 | 40 minuites | 日本語 / Japanese | ハードウェア (Hardware) |
226 | Let's Dive into Cross-Platform Mobile App Development with Compose Multiplatform | Kotaro Kamashima | In this session, we will explore building a cross-platform mobile application from scratch using Compose Multiplatform.
Beginning with an introduction to its basic concepts, we will then dig into practical implementation, covering key features including: * Setup and Installation * Project Structure and Configuration * Declarative UI Design * Navigation and Routing * State Management * Network and Data Management * Platform Integration * Testing By the end of this session, you will have a thorough understanding of Compose Multiplatform development, empowering you to begin creating your own projects. | * People who are Android developers interested in exploring Compose Multiplatform.
* People who are curious about the process of sharing code and resources across different platforms | 40 minuites | English | クロスプラットフォーム(Cross-platform Development) |
227 | リードエンジニアとして活躍する:開発経験が浅い状態からの挑戦 | Kotaro Kamashima | 本セッションでは、開発経験が浅い状態でもリードエンジニアとして活躍する方法について自身の経験をもとに皆さんに共有します。
私自身、エンジニアに転職してからわずか1年でリードエンジニアになりました。当時、開発経験が浅い状態でプロジェクトやチームに貢献することに苦心しましたが、リードエンジニアのポジションは大変ながらもやりがいがあるポジションであることを痛感しました。 以下のトピックについて触れます。 * どのようにしてリードエンジニアのポジションに到達したか * 開発経験が浅い状態での挑戦と克服した困難 * チームメンバーとのコミュニケーションと連携の重要性 * 成長と学習の過程で得た教訓やベストプラクティス * リーダーシップの発揮方法とチームのモチベーション維持 | * これからリードエンジニアを目指す方
* チーム内でのリーダーシップやコミュニケーションスキルを向上させたい方 * チームメンバーとの連携やチームモチベーションに興味がある方 | 40 minuites | 日本語 / Japanese | @Experimental ソフトスキル(@Experimental Soft skills) |
228 | チーム開発を快適にするツールと開発ドキュメントの紹介 | kazy(Kazuki Yoshida) | 本セッションでは、数人から数十人規模のAndroidアプリ開発をスムーズに進めるために効果が高かったツールや開発ドキュメントについて紹介します。何か一つでも皆様の日々の開発にお役立てていただければ幸いです。
下記の内容の発表を予定しています - チーム開発で速度が出ない・やり辛い主な要因 - 実装者による実装方法のブレをなくすためには - 社内開発ドキュメントの紹介 - ドキュメントとして明文化すべき要素について - 息苦しくならないバランスと開発規模について - コードレビューの負担を減らす取り組み - formatterやlinterの導入 - プルリクエスト毎のapk配信 - テンプレートを活用した読みやすいプルリクエストの書き方 - 開発人数に応じたブランチ戦略 - 動作確認を手軽にする開発者モードの用意 - CI/CDを活用して属人化を減らす取り組み - リリース作業の自動化 - リリース後の監視やご意見・レビューの自動収集ツール - その他の運用面での取り組みの紹介 - メンバーの困り事を拾い上げる雑談の場 本セッションで扱わないこと - チームビルディングの手法 - 個人のモチベーション管理などのピープルマネージメント | - チーム開発がなんとなくやり辛いと感じている方
- チーム開発、開発フローの効率化に興味がある方 | 40 minuites | 日本語 / Japanese | 開発体制(Development Process) |
229 | リスト表示のUI/UXを極める | chuka | 『リスト表示』はほとんどのアプリで実装されている、非常に一般的なUIです。
しかし、『リスト表示』と一口に言っても、SNSのような縦並びのリスト、写真アプリのようなグリッド、ショッピングアプリで見かけるバナーカルーセルなど、多種多様な表現形式があります。 それに加えて、スクロールに応じて追加の情報を表示したり、アニメーションで表示を切り替えたり…『リスト表示』に付帯するUXも多岐に渡ります。 本セッションでは、よく見かける『リスト表示』にフォーカスを当て、その画像や動画と併せて実装方法を紹介します。 Compose Foundation 1.7.0-alpha06以降追加された、LazyなComposableに実装可能なアニメーションや、Shared Element Transitionなどにも触れつつ、『リスト表示』のUI/UXを追求します。 | - Jetpack Composeでのリスト表現に興味のある方 | 40 minuites | 日本語 / Japanese | UI・UX・デザイン (UI・UX・Design) |
230 | Preview機能を活用して効率的なUI開発を実現する | Ritsuki Otsuka | Jetpack ComposeのPreview機能は、UIコンポーネントをリアルタイムで確認し、迅速に反復しながらデザインを改善できるため、UI開発の効率を劇的に向上させることができます。しかし、Preivew機能を十分に活用できていない、または効果的に使いこなせていないと感じている開発者も少なくはないのでしょうか。
このセッションでは、Jetpack ComposeのPreview機能に焦点を当て、その活用法を詳しく解説します。初心者からある程度経験のある開発者まで、全ての参加者がPreview機能を駆使してUI開発を効率化するとともにより高品質なアプリ開発を進められることを目指します。 扱う内容(予定) - Compose Previewの基本的な使い方 - Android StudioのPreview機能 - Interactive Mode / Compose UI Check / MultiPreview Template / Preview Gallery Mode / etc... - PreviewParameterで様々な状態をシミュレートする - デバイスの種類に応じたPreviewの表示 - Previewを使ったAnimationデバッグ | - Jetpack Composeを使用している開発者
- Compose Previewをあまり活用できていないと感じている開発者 - Compose Previewを使いこなしてより効率的なUI開発を目指している開発者 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
231 | 困難塗れのWebView開発の激闘:2年間の挑戦と革新 | tee_brian | 苦労に塗れたWebViewApp開発の2年間でした。Documentが多くないWebView開発に正面から向き合った経験をお伝えできればと思います。
リリース済みのWebを投影するWebViewの開発は、一見シンプルに思えるかもしれません。しかし、私たちのチームが直面した現実は全く違いました。Web側の工数が限られる中、ネイティブチームで全ての変更を吸収しなければならない状況。そして、複数のサービス(ドメイン)をまたぐWebをホストするという過酷な課題。 このセッションでは、そんな中で私たちが経験した数々の困難と、それを乗り越えるために採用したベスト(?)プラクティス(ワークアラウンドも含みます)を共有します。また、その後の新規WebサービスのWebViewアプリ開発での成功事例を通じて、効率的なデバッグ方法、パフォーマンスの調査、そしてiOSとの足並みを揃えるための戦略を詳しく解説します。 参加者は、WebViewを効果的に活用するための実践的な知識を得ると共に、私たちの激闘の歩みを追体験することができます。 話す内容: ■ リリース済みのWebサービスを投影するWebViewアプリのDifficulties □ 詰まりどころとワークアラウンド ■ 新規WebViewアプリ開発におけるいくつかの良かった事例 □ デバッグについて、パフォーマンスについて □ iOS(WebKitでの開発)と設計を揃えること □ WebとAppとのProtocolについてのプラクティス | WebViewアプリの開発をしている方・する予定がある方
WebViewアプリの苦労を見て、やっぱりNative!と思いたい方 | 40 minuites | 日本語 / Japanese | Android Framework |
232 | Androidアプリ開発を支えるガイドラインの作り方 | Yusuke Katsuragawa | Androidアプリ開発ではチームが効率的に協力し、高品質なコードを生み出すことが重要になります。高品質なコードを生み出し続けることを支える活動は複数ありますが、その中の一つにガイドラインの策定があります。
ガイドラインの策定は労力がかかる活動の一つですが、チームの大規模・チームメンバーの変更といった、チーム環境の変化に順応して、開発を進めるために必要な活動です。 ですがガイドラインの策定を進めるにあたり、以下のような問題点があり、うまくガイドラインの策定を進められていないと、感じているチームも多いのかなと感じています。 - Androidアプリ開発のガイドラインとして、何があればよいか検討できておらず作成が進んでいない - ガイドラインの作成が後手後手になっており、コードに問題が出てからガイドラインを作成して、不要なリファクタリングが発生している - ガイドラインを作成してみたものの、定期的に更新できていない、または属人化していて更新できていない。 本セッションではAndroidアプリ開発チームがガイドラインの策定におけるこのような問題を改善する、効率的にガイドラインの作成する方法の紹介します。またコード品質を向上させアプリ開発を成功させるためのガイドラインの記述内容を紹介します。 - Androidアプリ開発において、なぜガイドラインは必要なのか? - ガイドラインを作成する背景と目的 - ガイドラインを作成するメリットとデメリット - Androidアプリ開発において、最低限欲しいガイドラインとはなにか? - プロジェクトガイドライン - モジュール構成 - ビルドフレーバー - ビルドするまでの手順 - レビューガイドライン - 誰がどのようにレビューするのか? - どのような目的でレビューするのか? - コーディングガイドライン - Kotlinという言語をどのように記述するのか? - Jetpack Composeをどのように記述するのか? - UnitTest・InstrumentedTestをどのように記述するのか? - アーキテクチャガイドライン - Activity・Fragmentをどのように実装するか? - ViewModelをどのように実装するか? - UseCase・Repositoryをどのように実装するか? - Local Data Source(SharedPreference・Database)をどのように実装するか? - Remote Data Source (REST API)をどのように実装するか? - 開発を進めながら、効率的にガイドラインを作成するにはどうすればよいか? - どのような環境(VSCode・Formatter・Linter・Mermaid・DrawIO)で執筆するべきか? - ドキュメントをどのように作成(文章構造・作成フロー)するか? - ドキュメントをどのようにレビューするか? - ドキュメントをどのような体制で更新するか? | Androidアプリ開発におけるガイドラインの策定に興味がある人、もっとうまくガイドラインの策定を進めたい人 | 40 minuites | 日本語 / Japanese | 開発体制(Development Process) |
233 | Debugging: All You Need to Know | red_fat_daruma | Debugging: All You Need to Know
Debug スキルの習得はバグの原因特定、問い合わせ対応、開発生産性の向上といった代表的な行為に必須です。またチーム開発において、日頃の個々人への作業依頼には暗黙的に Debug 作業が含まれています。 その一方で、デザインドキュメントやコードレビューといったチーム開発手法の中で、Debug に関する方法まで踏み込むことは多くありません。 このような背景から、Debug スキルとは「チーム開発において期待されるスキル」でありながら、「個々人が独学で習得しなければいけないスキル」といえるでしょう。 これは初学者にとって大きな障害となるだけではなく、中級者以上の開発者にとっても見えない障害となっていることがあります。特に手癖や古典的な方法(Print Debugging)で解決できてしまうと、新しい手法やより効率的な手法を調べる機会を損失します。 本セッションでは Android Studio(IDEA) の built-in Debugger や Debug 用オプション等を使った Debug テクニックについて解説します。Debugger を使った conditional breakpoints はもちろん、いかにして Coroutine や suspend function の絡んだコードを Debug するかといった内容を順を追って説明します。 サンプルコードには Jetpack Compose などを用い、Androidアプリ開発における場面を想定して解説する予定です。 Debugging is mandatory for you to identify debugs, to support customers/stakeholders, to improve the development productivity and so on. And also, the modern team development expects some debugging skills for individuals. However, standard team development process like code-reviews and design documents would not approeach to debug skill improvements. In this way, debugging skills are mandatory for your teams but also need to learn them alone. This could be an obstable for both of beginners and experts. In particular, experts may lost oppotunities to investigate/learn better debugging approachs if problems can be soleved by classical ways that are familiar with them. I will talk about debugging skills/techniques by using Android Studio (IDEA)'s built-in debugger, debug options and etc. Conditional breakpoints and coroutine debugging will be covered. You can learn them through samples codes shown in Android app devleopment like Jetpack Compose stuff. Keywords: Print debugging, debugger, coroutine debugging, breakpoints | 初学者からエキスパートまで幅広く。特に Debugger を使ったことがない人、早く実装を終わらせて休憩したい方にオススメです | 40 minuites | 日本語 / Japanese | 開発ツール&サービス(Development Tools and Services) |
234 | Setting Sail with Compose Multiplatform 🏴☠️ | Isuru Rajapakse | Ahoy! Navigatin' in Android be a mighty contentious matter. But navigatin' in Compose, arrr, that be an even stormier sea! Now that we be havin' Compose Multiplatform, it be high time to unfurl the tattered sails and set sail on the ol' debate once more, arrr!
Afore we hoist the sails, we'll be learnin' the ropes and all' basics of navigation. We'll be learnin' about some of the challenges in navigation, like stacki' screens, passin' arguments, scopin' and retainin' instances and restoring booty-ful state. Then we be settin' sail on a grand adventure to the vast open seas! First, we be sailin' through the familiar waters, navigatin' the treacherous but familiar waves o' the Androids using androidx-navigation-compose. But we ain't stoppin' there! We be chartin' into deeper waters and new horizons, where we'll be explorin' libraries such as Decompose, Voyager and Circuit - and unravel mysteries o' Compose Multiplatform navigation! So lets hoist the sails, and let's set forth on this quest for knowledge and booty! Yo-ho-ho! | This session is an introductory overview of exploring different options for a navigation library in the Compose Multiplatform ecosystem. The audience will be able to take away the advantages and disadvantages of different navigation libraries for Compose Multiplatform, and how they can find the right library for the right project
This requires requisite knowledge of Jetpack Compose. | 40 minuites | English | Jetpack Compose |
235 | LeanbackからCompose for TVへ:Android TVアプリ開発のUI設計の変化 | amegane | 近年、スマートテレビ・コネクテッドTVの普及に伴い、Android TVの市場が急速に成長しています。それに伴い、テレビ向けのアプリの需要も高まっています。テレビ向けのアプリはリモコンで操作するため、ユーザーの操作に制約があります。そのため、モバイルアプリとは異なるUI・UXの設計を行います。
これまでAndroid TV向けのUIライブラリとしてLeanbackが使われてきました。このライブラリはテレビ向けのUIを作成するための多くのコンポーネントとテンプレートを提供しており、テレビ向けのインターフェースを迅速に実装できます。しかし、UIの設計に対する制約が強いことや、コストのかかる実装などの課題を抱えていました。一方、今年5月にBeta版が公開されたAndroid TV向けのUIライブラリであるCompose for TVでは、Leanbackが抱えていた様々な課題を改善・解決するとともに、よりモダンなUIの設計や実装が可能になりました。 本セッションでは、LeanbackとCompose for TVの比較を行い、それぞれの特徴や実際のコードについて紹介します。まず、TV向けアプリのUIの特徴や注意点について解説します。その後、LeanbackとCompose for TVの性質や設計などを実際の開発経験も踏まえながら説明します。さらに、Compose for TVがAndroid TV向けアプリのUI開発にどのような変化をもたらすのか、具体的な例を交えて紹介します。また、Compose for TVを使うことで生まれる新たな可能性と、Android TV向けアプリのUXを向上させるためのベストプラクティスについても議論します。 | ・Android TV向けアプリの開発に興味がある方
・Android TV向けアプリのUI/UXに興味がある方 ・Leanbackを用いたAndroid TV向けアプリを開発したことがある方 ・Compose for TVを用いたAndroid TV向けアプリ開発に興味がある方 | 40 minuites | 日本語 / Japanese | UI・UX・デザイン (UI・UX・Design) |
236 | 自信を持ってFlowを扱う | kazy(Kazuki Yoshida) | Kotlin Flowは、最近のAndroidアプリ開発において欠かせないツールとなりました。Flowは非常に便利ですが、その多様な利用用途から実態がわかりにくいこともあります。LiveDataの代替として状態管理に使われたり、suspend関数のように非同期処理のインターフェースとして利用されているだけに見える時もあります。
本セッションでは、Kotlin Flowが作られた背景や目的を紐解き、Flowの魅力を最大限に引き出す実装パターンや、避けるべきアンチパターンを紹介します。これにより、皆さんが自信を持ってFlowを活用できるようになることを目指します。 発表内容は以下を予定しています。 - Flowが作られた目的 - Kotlin CoroutinesとFlowの関係 - Reactive Streamsの歴史とFlow - 非同期処理をFlowで扱うメリット - Experimental APIを使ったFlowの頻出実装パターン - 状態管理をFlowで行う - Flowとエラーハンドリング - 宣言的なFlowだけでアプリの状態を管理する | - アプリ開発で一度でもFlowに触れたことがある方 | 40 minuites | 日本語 / Japanese | Kotlin |
237 | カスタマイズされたQRコードを表示する | Notchy | QRコードは、1つのQRコードを読み取ると、毎回同じ読み取り結果となります。しかし、1つの文字列を表現するQRコードは、何通りも作ることができます。すなわち、QRコードはある程度カスタマイズが可能です。例えば、QRコードの色やドットの形を変えたり、中央に小さなアイコンを表示したりしても、全く問題なくQRコードを読み取ることができます。
実際に身の回りのQRコードを見てみると、さまざまな色や形にカスタマイズされた、多様なデザインのQRコードがあることがわかります。 そこで本セッションでは、Android端末で、QRコードのデザインをカスタマイズして表示する方法について紹介します。具体的には、次のようなカスタマイズについて、技術的な実装方法を解説します。 - QRコードの形を変える - 中央に画像を埋め込む - 画像の色をもとに、自動でQRコードの色を変える QRコードのカスタマイズを通じて、次のような知識を深めることができます。 - 複雑な図形を描画する方法 - Material You や Dynamic Color の技術的な実現手法 QRコードのカスタマイズを通して、自由にUIを構築するための方法を共有できれば幸いです。 | - Androidアプリで複雑な図形を表示したい方
- UIのカスタマイズに興味のある方 - Material Youの具体的な実装方法に興味のある方 | 40 minuites | 日本語 / Japanese | UI・UX・デザイン (UI・UX・Design) |
238 | Androidデバイスを保守カメラとして用いる | たかっしー | CameraXは、Android端末のカメラを操作する際に強力なライブラリである。
しかし、メモリやGPUのリソースが限られている端末や、サポートされていない外部カメラを搭載した端末でCameraXのライブラリを使う際には、注意が必要となる。 本セッションでは、AndroidOSを搭載したデジタルサイネージを用い、正しく広告を投影しているかを遠隔で撮影して確認できる保守システムを例に挙げ、メモリやGPUなどの制限のある環境下で外部カメラを制御する方法について解説を行う。 | - CameraXをAndroid端末に組み込みたい人
- CameraXを用いて保守システムを作成したい人 | 40 minuites | 日本語 / Japanese | ハードウェア (Hardware) |
239 | Contextを理解する | Okumura | Androidアプリの開発においてContextは重要な概念ですが、なんとなく使っているという方もいるのではないでしょうか。
このセッションではContextの基本的な概念と実際の利用方法について解説していきます。 - Contextとは? - Contextってなんで必要なの? - Contextの種類と使い分け - Contextの取得方法による違い - Contextの危険な使い方 - ケーススタディ etc... Contextを正しく理解し、より品質のよいコードを書けるようになることを目指します。 | Android開発に興味がある方
Android開発初学者の方 Contextをなんとなく使っているという方 | 40 minuites | 日本語 / Japanese | Android Framework |
240 | IoT機器としてのAndroidデバイスを制御する | たかっしー | IoT機器としてAndroidデバイスを使用する際に用いる技術について解説を行う。
IoT機器の主な制御方法として、クラウドやBLEを用いた制御方法がある。しかし、通常のAndroidアプリ開発の実装方法とは大きく異なっているため、はまりポイントは少なくない。 そこで本セッションでは、クラウドやBLEを用いてIoTデバイスを制御する方法について実際の例を挙げながら順を追って解説する。 まずIoTデバイスの制御ならではのコンポーネントである、コンポーネント間通信の方法やBroadcastReceiverなどを解説し、それらを組み合わた実際のリアルタイム性の高いシステムについて紹介を行う。 次に、実際のサービス開発でセキュリティを担保するために、IoTデバイスがトークンの更新処理をOkHttpのInterceptを用いて自動で行うコードついて、解説を行う。 最後に、BLE通信のようなコールバックを多用するコードにおいて、flowやcoroutineを用いて適切なアーキテクチャに分離する方法を提案する。 | - IoT端末としてAndroidデバイスを使用したい人
- 複数のAndroidデバイスを制御する方法を知りたい人 - コールバックが多発する際のアーキテクチャを知りたい人 | 40 minuites | 日本語 / Japanese | ハードウェア (Hardware) |
241 | Onboarding React Native with Expo | mrtry | 近年、単一のコードベースから複数のOSで動作するアプリケーションを開発することができるcross-platform development frameworkに注目が集まっています。
このセッションでは、React Nativeをベースにしたフレームワーク/プラットフォームであるExpoについて紹介します。 Expoは他のcross-platform development frameworkと比較し、以下のような一歩踏み込んだ抽象化をしているのが特徴です。 - Sandbox環境の提供 - コードベースはJavaScriptだけでAndroid/iOSの開発が可能 - Document Picker、Audio/Video、QRコード読み込みなど、usecaseを満たしてくれるSDKの提供 - Keystore / Provisioning Profileの一括管理 - クロスプラットフォーム対応されたCI/CDサービスの提供 本セッションを通して、Expoでの開発について、プロトタイピングからストアからへのリリースまでオンボーディングできればと思います。 | - cross-platform development frameworkを利用したモバイルアプリ開発に興味がある方
- React Native/Expoについてのキャッチアップ/技術調査をしたい方 | 40 minuites | 日本語 / Japanese | クロスプラットフォーム(Cross-platform Development) |
242 | 実践レガシー環境でのAndroidアプリのダークテーマ/Material Design 3対応 | 関根克典 | このセッションでは、レガシー環境で運用されているAndroidアプリにダークテーマとMaterial Design 3コンポーネントを導入するための実践方法について解説します。最新のデザインシステムに対応することはUXの向上に直結しますが、レガシー環境ではその実現が一筋縄ではいきません。
ここでの「レガシー環境」とは、Material Design 2コンポーネントを使用したAndroid ViewとJetpack Composeが混在する環境を指します。このような環境では、新旧のUIフレームワークが共存しており、様々な困難がありました。どのように課題を乗り越え実現したかを紹介し、同時期に対応を実施したiOSアプリとの比較も紹介します。 セッションでは、以下のトピックをカバーします: 1. ダークテーマの導入:ダークテーマの実装手順を解説し、特にAndroid ViewとJetpack Composeのカラーの統合方法に焦点を当て、対応方法を紹介します。 2. Material Design 3コンポーネントへの移行:検索UIに焦点を当て、新しいUIコンポーネントへの移行手順とそのプラクティス、トラブルシューティングについて解説します。 3. デザイナーとの協働:ダークテーマとMaterial Design 3への移行の際のデザイナーとのコミュニケーション事例について解説し、効果的な協働方法について紹介します。 4. iOSとのダークテーマの比較:AndroidとiOSのダークテーマ実装の違いを比較し、それぞれのプラットフォームにおいて考慮すべき観点を解説します。 このセッションを通じて、参加者はレガシー環境から最新のデザインシステムに対応するための具体的なアプローチとツールについて学ぶことができます。特に、今後ダークテーマ対応やMaterialDesign3対応を予定する開発者にとって、貴重な知見となることでしょう。 | - ダークテーマ対応やMaterialDesign3対応を実装する方法に興味がある方。
- デザイナーとの協働方法にお悩みの方 - iOSとのダークテーマの実装方法の違いに関心のある方 | 40 minuites | 日本語 / Japanese | UI・UX・デザイン (UI・UX・Design) |
243 | 何十億人ものユーザー向けにアプリを構築する挑戦 | Takuya Kodama | 私達はアフリカの小規模農家を支援するためのアプリを開発しており、ユーザーはその環境ゆえの課題をいくつも抱えています。
低速かつ不安定なネットワーク、デバイスのスペックの低さ、バッテリーの充電機会の少なさ、などです。 私達はそのようなユーザーが快適にアプリを使用できるよう様々な対策を行っていますが、それらはすべてのアプリにとって有用なものだと思います。 本セッションではGoogleが推奨する事項を踏まえつつ、実際の現場での具体的な実践を紹介したいと思います。 オフラインでもデータの表示、書き込みがオンラインの時と変わらない体験で行うことができ、ネットワークに接続されたらサーバーにデータが送信されます。これによって不安定なネットワーク環境でも快適にアプリを利用できます。 また、その他にバッテリー消費を抑えるための工夫やスペックの低い低価格端末でも高速なUIを実現する取り組みなど、様々なリソースが不足した環境下のユーザーにも満足してもらえるアプリ開発手法をご紹介できればと思います。 予定内容 - オフラインファーストな設計 - オフラインで動作させるためのRoomスキーマ設計 - ネットワーク接続の最適化 - データコストの削減 - リソースの圧縮 - データ使用量の削減 - バッテリー消費の低減 - UI 応答性の向上 | オフラインファーストアプリの開発に関心がある人
ハードな環境で利用されるアプリ開発に関心がある人 | 40 minuites | 日本語 / Japanese | アプリアーキテクチャ (App Architecture) |
244 | 生成AIとコード生成ツールで実現する効率的なAndroidアプリ開発 | Jo Otsuka | コード生成ツールは、ソフトウェア開発を効率化する鍵となる強力なツールです。これにより、手動でのコーディングを減らし、開発スピードを向上させ、ミスの削減にも繋がります。
近年では、生成AIがコード生成に活用できるようになり、コードレビューやリファクタリングの自動化、テストコードの生成など、開発プロセス全体の品質向上に寄与しています。 ただし、生成AIは予期しない結果を生むことがあります。従来のツールは決まった仕組みで安定したコード生成を行う反面、柔軟性に欠ける場合があるため、どちらもメリットデメリットがあります。 本セッションでは、OpenAPI Generator、Relay for Android Studio plugin、生成AIツールなど、弊社で検討中のものや、すでに活用しているコード生成技術について、弊社での事例を交えつつお話しします。 また、これらのツールの組み合わせや使い分けについても触れ、各技術の強みを生かして生産性を向上させるヒントを提供します。 | ・コード生成ツールに興味がある方
・コード生成ツールをこれから導入しようと考えている方 ・既にコード生成ツールを使用しているが、さらに効率化を図りたい方 ・AIを活用したコード生成に興味がある方 | 40 minuites | 日本語 / Japanese | 開発ツール&サービス(Development Tools and Services) |
245 | Jetpack Compose への移行を見据えたマルチモジュールアプリのナビゲーション設計 | andousan | ここ数年Jetpack Composeに移行するプロジェクトが急激に増えていると思います。しかし、大規模なプロジェクトではJetpack Composeへの移行に時間がかかるため、まだ Android View の利用箇所が残っているプロジェクトが少なからず存在すると思います。
Android ViewとJetpack Composeが共存している状況でアプリナビゲーションの実装がなかなかの挑戦になります。 そのような状況の中で弊社のpixivアプリではBottom Navigationを採用しMulti back stack ナビゲーションの実装について検討することになりました。 この発表ではマルチモジュール構成のアプリで Single Activity化、Jetpack Compose化を考慮したナビゲーションの設計について紹介します。 紹介するテーマ - Multi back stack Navigation の問題 - 考えられるナビゲーション実装の比較 - Jetpack Composeへの移行を考慮した既存のナビゲーションの再設計 - Navigation Fragmentの落とし穴とその対象方法 - Navigation Composeへの移行計画 この発表は限られたコストでJetpack Composeへの移行に際してナビゲーションの準備しておきたい方がご参考にしていただければ幸いです。 キーワード - Safe args - Compose Navigation - Jetpack Navigation Fragment - Multi back stack - マルチモジュール構成でのナビゲーション | - Android ViewとJetpack Composeが共存する環境でのナビゲーション設計に興味がある方。
- Fragment単位のナビゲーションからComposable単位のナビゲーションへの移行に興味がある方 - アプリアーキテクチャの観点からマルチモジュールナビゲーションに興味がある方 | 40 minuites | 日本語 / Japanese | アプリアーキテクチャ (App Architecture) |
246 | Jetpack Composeによる動画ページャー - Media3のHV2種Pagerソースがけ、Pagingを添えて - | nacatl | この発表は、Paging機構で取得する動画をJetpack ComposeのVerticalPagerおよびHorizontalPagerによって表示した際のつまづいた点や意識した点、気づきについてご紹介していきます。
2023年5月、ExoPlayerがさまざまな改善や機能統合をされて、Media3としてv1.0.0がリリースされてから1年強が経ちました。 MediaSessionServiceなどとの統合でさまざまな面が強化され、PinPなどにおける開発面の改善も進んでいる印象です。 一方で、残念ながらと言うべきか、PlayerUIは未だComposeが提供されておらずAndroidViewによる構成のみとなっております。 もともと、複雑な操作やコールバックから通常のViewと異なることを気にする必要があるPlayerの実装なのに、さらにAndroidViewとComposeの組み込みも考えなければいけません。 幸いJetpack ComposeはAndroidViewとの相互サポートが充実しているので、ただComposeにPlayerを組み込む分にはそこまで大きな問題はないでしょう。 この発表では、Paging機構のあるAPIから動画情報を取得し、Jetpack ComposeのHorizontal / VerticalPagerによってページャー表示を行なった経験から、「LazyUI にExoPayerを組み込むトピック」、「AndroidViewとComposeの双方向組み込みみピック」を主に紹介します。 内容としては以下を予定しています - Media3 ExoPlayerの基礎的なCompose実装 - HorizontalPager / VerticalPagerそれぞれのユースケースと共通化 - Playerの状態/Stateの持ち方とPagerへのコールバック - ComposeによるカスタムControllerUI | - Jetpack Compose始めたての人
- ExoPlayerの画面をComposeに置き換えたい人 - RecyclerViewの中に動画をComposeで組み込みたい人 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
247 | FlutterからAndroidへの回帰、そしてJetpack Composeへ | nacatl | この発表は、Android ViewからFlutter、そして今現在Jetpack Composeを書いているエンジニアの視点から、フレームワークからくる設計やアプローチの比較について話します。
2018年のFlutter、2019年のJetpack Composeそれぞれの発表から今日まで、それぞれ宣言的UIのプラットフォームとして発展が続いてきました。 宣言的UIとして同一に語りましたが、それぞれが根本的にマルチプラットフォームやKotlin/Androidネイティブ特化によるサポートといった個別の強みを持っていることで、「宣言的UIとして」技術選択で同じ卓上の話題に上るものではなかった認識です。 ただ、FlutterのコミュニティやDartの言語としての成長、Kotlin Multi Platformの躍進およびCompose Multiplatformの開発により、一方の強みをもう一方も手にしつつあります。 この発表では、そんな2つをプロジェクトで触ってきた経験から比較していきます。 それぞれの開発で何が嬉しかったか、嬉しかったものの輸出入はできないかなどの視点でお話ししたいと思います。 内容としては以下を予定しています - Flutterで宣言的UIを学んだ人間のJetpack Compose感想 - class と function からくる Widget の比較 - 汎用UIの作成比較 - 開発アーキテクチャ - riverpod と Jetpack - DartとKotlin - async await と Coroutines - data class や sealed interface - マルチプラットフォームについて | - Jetpack Compose / Flutter始めたての人
- Jetpack Compose / Flutterを書いていて、他の宣言的UI経験者から見た視点を聞いてみたい人 | 40 minuites | 日本語 / Japanese | クロスプラットフォーム(Cross-platform Development) |
248 | Mastering Android Jetpack Compose Preview | Masatoshi Takada | Jetpack Compose Preview allows developers to see UI changes in real-time, significantly speeding up the development process. In this session, we will dive deep into Compose Preview, exploring its capabilities from the basic concepts to advanced techniques, and learn how to leverage it for efficient UI development.
Session Outline: □ Introduction to Jetpack Compose Preview: - Fundamental concepts of Jetpack Compose Preview - Step-by-step guide to setting up Jetpack Compose Preview in a project - Basic usage - Tips for Preview UI □ Defining Compose Preview Effectively: - Preview parameters - Preview templates - Preview providers □ Advanced Preview Features: - Using LocalInspectionMode - Interactive previews - Theming and styling | Intended Audience:
Android developers (beginner to intermediate) Engineers interested in mobile app development Developers interested in Jetpack Compose | 40 minuites | English | Kotlin |
249 | JobSchedulerからWorkManagerへ移行する | Motoharu Asanuma / 浅沼もっちゃん | Androidアプリ開発において、データ同期、通知管理、定期タスクの実行などを用いたユーザー体験の向上にはバックグラウンド処理が欠かせません。アプリのパフォーマンスとユーザーエンゲージメントを維持するためには、効果的なバックグラウンド処理が必要です。
従来のバックグラウンドスケジューリングAPI(JobScheduler、FirebaseJobDispatcher、GcmNetworkManagerなど)は、実装が複雑な場合が多く、近年のOSアップデートに伴うリソース制限への対応が難しくなっています。特に、Android 14以降ではJobSchedulerの使用に対する制限が強化されています。 これに対し、WorkManagerはこれら従来のAPIに代わる推奨のAPIとされています。WorkManagerはシンプルな実装を提供し、バックグラウンドタスクのスケジューリングと管理を容易にします。さらに、最新のOSアップデートに対応し、リソース制限が厳しい環境でも信頼性の高いタスク実行を保証します。 本セッションでは、以下のアジェンダを通じて実践的なWorkManagerの使用方法について解説します。 ・JobSchedulerの制約とその解決策としてのWorkManagerの利点 ・WorkManagerを利用したバックグラウンドタスクの実装方法 ・具体的な移行手順とコード例 ・近年のOSアップデートに対応したバックグラウンドタスク管理のベストプラクティス | ・Androidのバックグラウンドタスク管理に興味がある方
・最新のOSバージョンに対応したバックグラウンドタスク管理に興味がある方 | 40 minuites | 日本語 / Japanese | Jetpack |
250 | センサーを活用したスマートなAndroidアプリの開発とテスト | Masatoshi Takada | 本セッションでは、Androidデバイスに内蔵されたセンサーを活用したスマートアプリケーションの開発方法について、Jetpack Composeと統合し、さらにユニットテストを用いて品質を確保する方法を詳しく解説します。
センサー技術は、ユーザー体験を向上させ、インタラクティブで直感的なアプリケーションを作成するための重要な要素です。本セッションでは、加速度センサーやジャイロスコープを使用したジェスチャー認識の具体的な実装方法を中心に、センサーのデータ取得、処理、既存プロジェクトとの統合方法を詳述します。また、センサーのユニットテストを行うための手法やツールについても詳しく紹介します。 | ・Android開発者(初級~中級)
・モバイルアプリ開発に興味があるエンジニア ・センサーを利用したアプリ開発に興味がある方 | 40 minuites | 日本語 / Japanese | Androidプラットフォーム (Android Platform) |
251 | Androidの「連絡先」を構成しよう | tsuyoshihyuga | このセッションでは、Androidアプリ開発者が連絡先データを効果的に管理するための戦略とベストプラクティスを探求します。
名前、住所、電話番号など、連絡先を構成する要素は様々です。 しかし名前一つとっても、苗字や名前の他にもミドルネームや敬称、また日本においてはフリガナや結婚後の旧姓など、世界の名前は様々な要素から構成されています。 連絡先の標準と照らし合わせて、Androidではどんなデータが保存できるのか、そのデータ構造に着目します。 また、国際的な環境での連絡先の名前や住所の扱いに焦点を当て、どのようにして異なる文化や言語に対応し、ユーザーエクスペリエンスを向上させるかについて議論します。 このセッションを通じて、多言語、多文化のユーザーを対象としたアプリの開発における課題や解決策について知識を深められればと思います。 | 連絡先アプリを作成予定の方
入力フォームを作る方 1人/1件の連絡先がどのような情報によって構成されているか興味のある方 | 40 minuites | 日本語 / Japanese | Android Framework |
252 | Onboarding Expo Module API | mrtry | React Nativeを用いてモバイルアプリを構築する際に、提供されるSDKや外部ライブラリ対処しきれない場合は、自身でKotlin/Swiftを書いてNative Moduleを実装する必要があります。
ただ、Native Moduleの実装を行うには、あまり整備されていないドキュメントを読んだり、数多くのボイラープレートの作成する必要があり、Native Moduleを実装するまでに多くのオーバーヘッドがあります。 これらの問題を解消、またコストと技術的負債を最小限に抑えるために、ExpoからNative Moduleを実装するためのModule System、Expo Module APIが提供されました。 本セッションでは、Expo Module APIを踏まえたNative Moduleの実装方法について紹介します。 | - cross-platform development frameworkを利用したモバイルアプリ開発に興味がある方
- React Native/Expoについてのキャッチアップ/技術調査をしたい方 - React Native/Expoを利用していて、欲しい機能を提供してくれるライブラリ等を見つけられない方 | 40 minuites | 日本語 / Japanese | クロスプラットフォーム(Cross-platform Development) |
253 | turbineを利用したCoroutines Flowの効率的なユニットテストとその仕組み | ntsk | Kotlin Coroutines Flowはデータストリームをリアクティブに処理する手段として強力ですが、Coroutines Flow独自の性質を理解した上で、時間の経過によるデータの変化を適切にテストする必要があります。本セッションでは cashapp/turbine ライブラリを活用したユニットテスト手法を紹介するとともに、その実装や kotlinx-coroutines-test の仕組みの紹介を通し、Coroutines Flowに対するユニットテストへの理解を深めていきます。 | Coroutines Flow におけるテスト手法や仕組みに興味がある方 | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
254 | KMPでモバイル開発の課題を解決〜新規サービス開発での実践と考察〜 | YuQinta | モバイルアプリ開発は日々進化している状況ですが、Android/iOSの仕様差異、いつまでも定まらないバックエンドなど未だ現場には課題が山積みです。
私はKotlinFest2019でKMPと出会い、その可能性に衝撃を受けました。これまで抱えてきた様々な課題を解決できるのではないか、と。 その後、社内でKMP導入に向けた共有会や技術調査を実施して、新規サービスの開発にてKMPの導入を実現化し、無事リリースまで成し遂げることができました。 本セッションでは、そんな私の体験談を交えながら、 - KMPとは何か - なぜモバイル開発にKMPを推すのか - 実際にKMPでどんな開発が実現できたのか - 宣言的UIとKMPを活用したモバイル開発アーキテクチャ設計 をお話しします。 | - モバイル開発で課題を抱えている人
- KMPに興味がある人 - KMPの導入を検討している人 | 40 minuites | 日本語 / Japanese | クロスプラットフォーム(Cross-platform Development) |
255 | 使って知るCustomLayout. vs DailyScheduler | Saiki Iijima | JetpackComposeのCustomLayoutを利用することで、Row, Column, Boxなどの既存のコンポーネントと比べてより複雑なUIを実現できます。
制約を定め、測定し、任意の位置に配置することで自由自在に要素を配置することが可能です。 …が、そう言われてもいまいちイメージがつきませんよね? 本セッションでは、カレンダーアプリにあるようなDailyのSchedulerをCustomLayoutで実装する方法を通して、CustomLayoutの基本と実践的なTipsを併せて学びます。 [期待できる学び] - CustomLayoutの基礎知識 - CustomLayoutの実践的知識 - DailySchedulerの実装方法 [実装する予定の機能] - 時刻による縦軸表示 - 時刻と対応したイベントの配置・サイズの調整 - 同時刻に複数イベントがあった際の幅の調整 - 時刻へのスナッピング - 遅延Redering - イベントのドラッグ&ドロップ [キーワード] - Layout - Constraints - Measurable - Placeable - place - ParentDataModifier | Composeを利用する初〜中級者のAndroidエンジニア
特に下記に当てはまる方 - CustomLayout初学者 - 複雑なLayout実装に興味のある方 - DailySchedulerを実装する予定のある方 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
256 | バッテリーフレンドリーなアプリを作ろう | Masatoshi Takada | スマートフォンのバッテリー寿命はユーザー体験に直結する重要な要素です。本セッションでは、Androidアプリ開発者が知っておくべきバッテリー効率向上のための最新テクニックとベストプラクティスを紹介します。特に、エネルギー消費の少ないコーディング技術、バックグラウンド処理の最適化、電力消費モニタリングツールの使い方について詳しく解説します。
本セッションでは、バッテリー消費を抑えるための具体的な技術とツールを習得し、自身のプロジェクトに適用できるようになります。 | バッテリー効率を重視したアプリケーション開発に興味がある方 | 40 minuites | 日本語 / Japanese | Android Framework |
257 | エンジニア1年目で複雑なコードの改善に取り組んだ話 | たなむら | リリース当初からアプリの機能を支えてきたプロダクトコードは、プロダクトの成長や設計・技術の進化とともにレガシーコードになっていきます。
エンジニア1年目、私は業務の中で複数のレガシーコードの問題に直面し、その改善に取り組みました。 本セッションでは、私がどのようにレガシーコードに対処し改善してきたのか、そしていつかレガシーとなる自分のコードを改善しやすい形で実装するには何ができるか、これまでの経験から学んだことを共有します。 主な内容は以下のとおりです: - Fluxからクリーンアーキテクチャへのリアーキテクチャが完了していなかったAction, Storeの移行を担当し、その過程をどのように進めていったか - 自分の知らないアーキテクチャ・ライブラリの実装をどのように理解し、対応していったか - コードを改善しやすい形にどのように設計・実装していくか | レガシーコードのリファクタリングに悩んでいる・興味がある方 | 40 minuites | 日本語 / Japanese | 開発体制(Development Process) |
258 | AI時代、私だちはどうすればいいの | DREAMWALKER | AIの急速な発展により、モバイルアプリ開発の現場にも多大な影響が及んでいます。本発表では、特にAndroidモバイルアプリ開発者を対象に、AI時代における新たな技術トレンド、スキルセット、および将来の展望について具体的に考察します。
AI技術の現状と進化のスピード モバイルアプリ開発におけるAIの主な応用例(例:音声認識、画像認識、自然言語処理) AI(+LLM)技術の統合と活用 AI(+LLM)技術の進化と今後のトレンド 人間とAIの協働による新しいアプリケーションの可能性 AIと共に成長するための長期的な戦略 | この発表は、Androidモバイルアプリ開発者を対象としています。特に、AI技術の進展に伴い、モバイルアプリの設計・開発にどのようにAIを統合し活用するかを考えている開発者やエンジニアに向けた内容です。 | 40 minuites | English | @Experimental ソフトスキル(@Experimental Soft skills) |
259 | Catch up! Jetpack Compose | Saiki Iijima | JetpackComposeを利用するプロジェクトも増えてきましたが歴史の長いアプリではAndroidViewを利用していることも多く、これから新たにJetpackCompsoeを導入し始める方や、プロジェクトが変わると同時に突然JetpacComposeを実装しなければいけない状況になる方もまだまだ多いことでしょう。
かくいう私もその一人で、ほんの一年前、転職をきっかけにAndroidViewのプロジェクトからJetpackCompseのプロジェクトに移り、必死でキャッチアップした経験があります。 本セッションでは、0からJetpackComposeでの開発を始めるにあたり、役に立ったドキュメント、チェックすべき情報、押さえるべきポイントなど、JetpackCpomseを業務で実際に利用できる程度に理解する最短距離の道筋を紹介します。 [本セッションのゴール] - 既存のJetpackCompseのコードが理解できる - 単純なレイアウトが基本的なことをPRで突っ込まれることのないレベルに実装できる [キーワード] - Modifier - recompose - remember - derivedStateOf - matchParent - fillMaxSize - 状態ホイスティング | - 簡単なAndroidアプリ開発経験のあるJetpackCompose初学者
- 来週からJetpackComopseで実装をしなければいけない方 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
260 | RAG (Retrieval Augmented Generation) with Mobile Application | DREAMWALKER | In the era of AI, Retrieval Augmented Generation (RAG) represents a cutting-edge approach that combines the strengths of retrieval-based and generation-based methods to improve information retrieval and content generation. This presentation will explore how RAG can be implemented in mobile applications to provide more accurate, context-aware, and user-specific responses. This presentation aims to provide Android mobile application developers with a comprehensive understanding of RAG and its practical applications. By the end of the session, developers will be equipped with the knowledge and tools necessary to implement RAG in their own projects, enhancing their apps with cutting-edge AI capabilities. | This presentation is aimed at Android mobile application developers who are interested in integrating advanced AI technologies into their applications. It will be particularly beneficial for developers looking to enhance their app's functionality and user experience through the use of Retrieval Augmented Generation (RAG) techniques. | 40 minuites | English | クロスプラットフォーム(Cross-platform Development) |
261 | QAフェーズが無かったモバイル開発チームでQAのShift-leftを実現する | Yuki Kuboyama | サービスの機能開発においてQAはとても大切です。
それはモバイル開発においても言わずもがなですが、開発組織の規模によってはQAに潤沢なリソースを割くことができないというのはよくある話ではないでしょうか。 私が所属している開発チームでもまさにそういった状態でしたが、QAにおけるShift-leftという考え方を取り入れてQA組織にQAすべてを依存することなく、開発サイクルにQAフェーズを組み込む取り組みを行ってきました。 このセッションではShift-leftの基本的な考えかたと、チーム内でのQAフェーズの策定や役割分担といった様々な取り組み、並びにこの取り組みで得られた効果などを紹介し、モバイル開発においてShift-leftを実現するためのノウハウなどをご紹介できればと思います。 | - 潤沢なQAリソースが見込めない開発チーム
- Shift-leftとはどんなものか興味がある方 | 40 minuites | 日本語 / Japanese | @Experimental ソフトスキル(@Experimental Soft skills) |
262 | Android 暗号化のすべて | DREAMWALKER | モバイルアプリケーションにおけるデータ保護とセキュリティは、現代の開発において極めて重要です。本発表では、Androidアプリにおける暗号化の基本から高度な技術までを網羅し、安全なアプリケーションの構築方法を解説します。
- 暗号化の基本概念: 暗号化の基本的な原理と種類(対称鍵暗号、公開鍵暗号) - Androidにおける暗号化の仕組み - SHA, MD5, AES, RSA ... etc | この発表は、Androidアプリケーション開発者を対象としています。特に、アプリケーションのセキュリティ強化とデータ保護に関心のある開発者に向けた内容です。 | 40 minuites | 日本語 / Japanese | Security / Identity / Privacy |
263 | タブーを破れ!「UI駆動型」でアプリ開発を成功に導いた話 | YuQinta | テスト駆動開発、ドメイン駆動開発、ユースケース駆動開発など、昨今の開発では設計手法が論じられ、モバイル開発でも導入を検討する事は多いかと思います。
そのメリットはとても魅力的で理想的です。 しかしながら、現実ではかえってそれが開発を苦しめてしまうことも少なくありません。 本セッションでは、実際に開発現場で経験してきた課題と、それらを解決するために「UI駆動型」をいかにして受け入れたのか、具体的な事例を交えてご紹介します。 - モバイル開発の現場でよく直面する課題 - UI駆動というタブーな開発のプロセス - そのデメリットを解決するための、技術選定、アーキテクチャ設計 | - モバイルアプリ開発の現場で課題を感じている方
- より効率的な開発方法を模索している方 - 開発組織を改善したいと考えている方 | 40 minuites | 日本語 / Japanese | 開発体制(Development Process) |
264 | targetSdkVersionのバージョンアップを安全に対応する | Motoharu Asanuma / 浅沼もっちゃん | targetSdkVersionのバージョンアップは、アプリのセキュリティ、パフォーマンス、互換性を向上させるために必要です。Androidは定期的にセキュリティ強化やパフォーマンス改善を行っており、これらを享受するためには、より新しいtargetSdkVersionに対応することが求められます。
targetSdkVersionのバージョンアップを怠ると、アプリはセキュリティの脆弱性にさらされ、パフォーマンスが低下し、新しいOSバージョンとの互換性が失われる可能性があります。また、Google Playのポリシーに違反し、アプリの公開や更新が制限されるリスクもあります。継続的な運用と最新技術の追随のために、targetSdkVersionのバージョンアップは必須といえるでしょう。 しかし、targetSdkVersionのバージョンアップには、アプリの動作に影響を与える変更や制約が含まれるため、互換性の問題が発生する可能性があります。バージョンによっては、権限モデルの変更やバックグラウンド制限、新しい要件が導入されており、慎重な計画とテストによる安全な対応が必要です。 本セッションでは、以下のアジェンダを通じて、targetSdkVersionのバージョンアップに関する安全な対応方法について解説します。 ・targetSdkVersionについて ・バージョンアップに伴う変更点の参照 ・バージョンアップの計画・手順 ・影響範囲のテスト ・リリース後の対応 | ・targetSdkVersionのバージョンアップに興味がある方
・Google Playに公開されているAndoidアプリを開発している方 | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
265 | Flutterアプリの成長を加速する。通知の力を最大限に活用する方法 | SHIHO YOKOI | 本セッションでは、Flutterを使用したアプリ通知の設計と実装に関するベストプラクティスを共有し、開発者がより効果的な通知戦略を構築できるようにすることを目指します。
具体的には、Flutterでの通知の基本的な実装方法から始めて、さまざまなタイプの通知(プッシュ通知、ローカル通知、スケジュールされた通知など)の設計と実装方法を説明します。また、通知のパーソナライズやターゲティング、通知のトラッキングなどの機能についても触れます。 | Flutterを利用する開発者やアプリ開発者、特に通知機能に興味を持つ人々を対象とします。
Flutterの基本的な知識があることが望ましいですが、通知の概念や基本的なアプリ開発の知識があれば、セッションを理解するのに十分です。 | 40 minuites | 日本語 / Japanese | クロスプラットフォーム(Cross-platform Development) |
266 | Accompanistとデベロッパーガイドから考えるJetpack Compose時代の権限ハンドリング | mikami | アプリ開発において、実行時権限を適切に扱うことは非常に重要であり、同時に難しい課題でもあります。ユーザーに権限をリクエストすることでスマホの機能を最大限に活用できます。しかし、権限リクエストのタイミングや説明が不適切だとユーザーはリクエストを拒否する可能性が高くなります。その結果、アプリの機能が十分に利用されないこともあるでしょう。また、権限の状態管理や異なるAndroidバージョン間での互換性の担保など、多くの技術的な課題も存在します。
本セッションではAccompanistライブラリとデベロッパーガイドから考えるJetpack Composeにおける実行時権限のハンドリング手法を紹介します。 前半では、デベロッパーガイドに基づいた権限の概要と実行時権限の特徴、推奨される権限許諾のワークフローについて説明します。後半では、AccompanistのPermissions for Jetpack Composeライブラリの思想や実装に深く掘り下げ、推奨されるワークフローを実装に落とし込むために必要な観点を紹介します。また、権限管理における仕様やデザイン調整の工夫についても取り上げます。最後に、Jetpack Composeにおける権限ハンドリングについて、基本形、OSのバージョンによって対応が異なる権限、特殊な位置情報権限のハンドリングの実装例を紹介します。 想定する内容は次の通りです。 - Androidにおける権限の概要 - 実行時権限の特徴 - 推奨される権限許諾のワークフロー - AccompanistのPermissions for Jetpack Composeライブラリの思想と実装 - 権限許諾のワークフローを実装に落とし込むための観点・工夫 - 基本的な権限をJetpack Composeで扱う方法 - バージョンによって対応が異なる権限の処理方法(通知) - 特殊なハンドリングが必要な権限の処理方法(位置情報) | 権限ハンドリングの実装に課題を感じているエンジニア
Accompanistに残り続けているPermissions for Jetpack Composeライブラリが気になるエンジニア | 40 minuites | 日本語 / Japanese | Jetpack Compose |
267 | MediaCodec再訪: 基礎から理解するAndroid動画エンコード | chun_ryo | Androidの動画エンコードを用いるアプリを開発する際、参考情報を調べてみたところ、ネット上にある動画がらみの技術情報が表面をなぞるだけのものが多いことに気づきました。アプリエンジニアからすれば、動画の細かいことは知らなくてもなんとなく使えればそこで追求をしなくても良い場合が多いためと思われます。
しかし、どの動画コーデックを使うか、そのときにどんなプロファイルを選ぶべきなのかといったことを始め、正しく技術を選択することによって引き出せる性能は間違いなくあります。そしてAndroidの動画エンコードでは最近のOSバージョンでも細かなチューニング機能が追加されています。 最新のMediaCodecの機能も踏まえ、Androidの動画エンコードについて基礎から解説します。 | 動画エンコードについて詳しく知りたい人 | 40 minuites | 日本語 / Japanese | Androidプラットフォーム (Android Platform) |
268 | Kotlin 2.0の先を見据えて:導入が検討されている言語仕様の魅力 | kazy(Kazuki Yoshida) | 今年の5月にKotlin 2.0が正式にリリースされ、多くの注目を集めました。しかし、Kotlinには数年に渡って導入が検討されている便利な文法や言語仕様が数多く存在します。
本セッションでは、これらの言語仕様の紹介と現状の課題点、またコンパイラオプションによって有効にできるものについてはAndroid開発における実用例を交えてご紹介します。 このセッションを通じて、一人でも多くの方がKotlinの仕様策定や今後のロードマップに興味を持ち、Kotlinの開発コミュニティをより身近に感じていただけたら嬉しく思います。 発表内容 - 現在検討されている便利な文法/言語仕様の確認方法の紹介 - 最新情報を確認する方法や、コミュニティとの連携方法について - 特に導入が期待されている言語仕様の紹介 - Context receivers - Explicit Backing Fields - etc..(発表時の動向に応じて調整します) - コンパイラオプションを有効にしてひと足先に新しい文法を試す方法 - 新機能を実際のプロジェクトで使用する際のリスクや注意点 - 不具合報告やフィードバックを伝える方法 | - Kotlinの最新動向を知りたい開発者の方
- プログラミング言語に新機能が入るとワクワクする方 | 40 minuites | 日本語 / Japanese | Kotlin |
269 | 社内PrivateRepositoryのSDKをAndroidアプリに組み込む | oukoda | 複数のプロダクトを持つ企業では、共通の機能を提供するためのSDKを作成し、それを各プロダクトに組み込むことがあります。
このSDKは、社内でのみ利用するため、外部に公開できないことがほとんどです。 このような場合、SDKを管理するためのリポジトリをプライベートにすることが一般的です。 この発表では、Androidアプリに社内のプライベートリポジトリにあるSDKを組み込む方法、 また、CI/CDの環境での設定方法について紹介します。 | - Androidアプリ開発者
- DevOps担当者 | 40 minuites | 日本語 / Japanese | 保守・運用・テスト(Maintenance / Operations / Testing) |
270 | ヘルスケアプラットフォームの今を考える | mitohato14 | AndroidにはユーザーのヘルスケアをサポートするようなAPIや仕組みが存在します。
これはAndroid Healthと呼ばれ、Android上のヘルスケアプラットフォームになります。 https://android-developers.googleblog.com/2024/05/evolving-health-on-android-migrating-from-google-fit-apis-to-android-health.html これまではヘルスケアアプリの開発時にユーザーのヘルスケア情報を扱うためにはGoogle Fit APIsがよく利用されていましたが、ヘルスコネクト登場以降は、Health Connect APIへの移行が推奨されてきました。 そこから時が流れ、ヘルスコネクトがOSの機能として搭載されたAndroid 14が正式リリースされしばらくたったこともあり、Google Fit APIsのサポート期限が設定され、Health Connect APIの利用も必須になりました。 ヘルスコネクト登場以前は、ユーザーのヘルスケア情報は各アプリやGoogleアカウント単位で取得・管理されていました。 各アプリやGoogleアカウントごとにヘルスケア情報を管理しているため、食事管理アプリと運動量計測アプリがあった場合には、それぞれのアプリに食事データと運動のデータが存在することになり、これらのデータを組み合わせた健康管理を行うにはユーザーがアプリをまたいで確認する必要がありました。また、Googleアカウント経由で情報を取得しようにも、Googleアカウントのデータにアクセスするにはセキュリティ上のハードルが高く、審査も大変なため利用は容易ではありませんでした。 これらの問題の解消に向けて、ヘルスケア情報をAndroidデバイス上に保存し、同一デバイス上の各アプリからヘルスケア情報をアクセス・管理できるようになったものがヘルスコネクトです。 前述の例を用いると食事管理アプリと運動量計測アプリのそれぞれがヘルスコネクトを利用していた場合に、食事データと運動データをそれぞれのアプリからヘルスコネクトに対して書き込みを行うことができます。 書き込まれたデータは他のアプリからも読み取ることもできるため、複数のアプリが記録したデータを他のアプリで表示・管理することができます。 ヘルスコネクトではユーザーアクティビティや睡眠、栄養に血液といった様々なユーザーの健康やフィットネスに関する情報をHealthConnect APIを通じてアクセスすることができます。 本セッションでは、Androidにおけるこれまでのヘルスケア情報の取り扱い方の振り返りから始まり、現在利用が推奨されているヘルスコネクトまでの変遷を解説します。 また、ヘルスコネクトを使ってどのようにアプリでヘルスケア情報を扱うことができるか、具体的なコードを交えながらAPIを通じたデータを読み取り・書き込みするための方法も紹介します。 本セッションを通じて、Androidにおけるヘルスケア情報取扱の変遷を理解し、ヘルスコネクトを使った機能の開発及びGoogle Fit APIsから移行できるようになることを目指します。 主な内容 - Google Fit APIsを使ったヘルスケア情報管理方法の解説 - ヘルスコネクト概要 - なぜヘルスコネクトが必要になったのか - HealtConnect APIを使った健康やフィットネスデータの書き込みと読み取り - HealthConnect APIを利用する際の注意 | Androidにおけるヘルスケア事情に興味がある方
歩数や睡眠、心拍などのデータを利用したフィットネスアプリの開発に興味がある方 Google Fit APIを利用中でHealthConnect APIへの移行を検討している方 健康を意識したい方 | 40 minuites | 日本語 / Japanese | Androidプラットフォーム (Android Platform) |
271 | Google Sign-inの移行から始めるCredential Manager活用 | clockvoid | AndroidアプリでGoogle Sign-inを実装するためにはGMS(Google Mobile Service)の一環としてGoogleが提供している、gms.authライブラリを使用してきました。ところが、gms.authは現在Deprecatedになっており、2025年にはGMSから削除される予定となっています。 gms.authからの移行先として、GoogleはCredential ManagerというJetpack APIの中でGoogle Sign-inの仕組みを提供し、マイグレーションガイドも提供しています。
しかし、Credential ManagerはGoogle Sign-inのためだけのライブラリではなく、様々な認証方法をアプリに提供するためのものになっており、使いこなすにはより網羅的な知識が必要になります。 そこで、本セッションでは、Credential Managerの主要な機能とその使用方法を説明します。また、Credential Managerの機能を前提知識として、GMS時代のGoogle Sign-inからのマイグレーションについても、GMSの説明から詳しく行います。 本セッションを視聴することで、Credential Managerを使用してより強力で柔軟な認証機能を提供したり、Google Sign-inをGMSを使用した方式からの移行を円滑に進めるための具体的な知識を持ち帰っていただき、皆様のアプリの開発に活かしていただくことを目指します。 | Androidアプリ開発者
アプリに認証機能を導入したい方 Google Sign-inの裏柄についてより深い洞察を得たい方 | 40 minuites | 日本語 / Japanese | Jetpack |
272 | Compose × WebView におけるベストアプローチ | Miura Yuki | Compose上でのwebviewをプロダクト開発で実装経験はありますか?
現行ではCompose用のWebViewのインターフェースは用意されていないため、ComposeインターフェースのAndroidView上でWebViewを実装する使用する必要があります。 ComposeとWebViewでは根本的なライフサイクルが異なることや、WebView向けの十分なインターフェースが用意されてないことで、以下のような課題に直面するプロダクトも多いのでは無いでしょうか? ・WebViewの適切な破棄タイミングは? ・AndroidViewの外でWebViewのインターフェイスを呼ぶ方法は? ・WebViewにpull to refreshを実装する場合は? ・単体テストコードの書き方は? このセクションでは、Compose × WebViewを使用する時に実際のプロダクト開発で直面した課題や解決方法を紹介します。 | ・Composeに関する前提知識がある方
・Compose × WebViewの開発に興味がある方 ・Compose × WebViewの開発で困った経験がある方 | 40 minuites | 日本語 / Japanese | Jetpack Compose |
273 | 法改正により義務化されたアクセシビリティ対応 | furusin | 2024年4月施行の障害者差別解消法が開催され、Webアクセシビリティの対応が義務化されました。
スマートフォンは今や生活に欠かせない必需品となっており、モバイルアプリにおけるアクセシビリティの対応はますます重要になってきています。 しかし、一言に『アクセシビリティ』と言っても意識すべき事項は多岐にわたり、何をどこまで対応すれば良いのかわかりにくいのが現状です。 このセッションでは •そもそも『アクセシビリティ』とはどんなものがあるのか •最低限としてなにをどこまで対応が必要なのか •具体的な実装例 などをまとめ、わかりやすく解説します。 | •アクセシビリティを学びたい人
•アクセシビリティ対応が必要なのはわかっているが何をしたらいいかわからず困っている人 •アクセシビリティ対応はしているが正しいか自信がない人 | 40 minuites | 日本語 / Japanese | UI・UX・デザイン (UI・UX・Design) |
274 | デザインからアプリ実装まで一貫したデザインシステムを構築するベストプラクティス | しゅーぞー | デザインシステムを効果的に運用することで、
・アプリのUIの品質担保(ヴィジュアルの統一感や一貫した操作性の実現) ・エンジニアやデザイナーにとってより効率的な環境の構築。 といった強力な恩恵を受けることができます。 これらは特に大規模サービスやスケールの過程にあるサービスにおいては非常に重要な関心事です。 効果的なシステムの構築のためにはデザイナーとエンジニアが同じ目線に立って緊密に協力する必要がありますが、「デザインシステム」自体が比較的新しい概念であり、加えて日々ツールが進化の過程にあることもあり、開発からデザインまでを一貫した具体的な手法については悩む場面が多々あります。 このセッションでは、Yahoo! JAPANアプリを例に開発とデザインを一貫した体系的な情報から「Figma」と「Compose」においての具体的なベストプラクティスについてお話します。 【具体的には以下の内容をお話します】 ■ 改めて、デザインシステムを構築する目的と効果。 ■ エンジニアとデザイナーの目線を揃えたチームの構築。 - デザイナーとエンジニアでの関心の範囲や考え方の差異。 - デザイナーとエンジニアとの連携で発生しがちな課題と乗り越え方 ■ Figmaとアプリ実装の緊密な連携とSSOTを担保するための自動化に関する具体的な手法。 - Figmaのデザイントークン管理機能であるVariableとコードの連携、FigmaのDevModeやGoogleの開発したRelayによるCompose実装コードの生成。 ■ 実装とデザインデータでUIのヴィジュアルにズレを発生させないための注意点と具体的な手法。 - UIの階層構造やプロパティの命名に関してのルール、レスポンシブデザインやテキストスタイルにおいてのComposeとFigmaで対応する設定など。 | ・UIの実装と制作に関わる全てのエンジニアとデザイナー
・デザインシステムに興味関心のある方 ・Figmaとアプリの実装/設計での連携に興味関心のある方 | 40 minuites | 日本語 / Japanese | UI・UX・デザイン (UI・UX・Design) |
275 | Firebaseを活用したユーザー訴求 | mitohato14 | Firebaseには様々な機能があり、アプリ開発を強力にサポートしてくれます。
その中でも、特に以下機能を組み合わせて行うユーザー訴求方法を解説します。 - Messaging - Audiences - Events - Custom Definations - A/B Testings EventsやCustom Definationsでユーザーの行動や状態を記録し、Audiencesでそれらの情報をもとにユーザーをグルーピングします。 グルーピングしたユーザー群に対して、Messagingで特定の通知やIn-App Messagingを送信します。 また、A/B Testingsを利用し、どの訴求がユーザーの行動に結びついたか検証してより良いユーザー体験を目指すことができます。 具体的には以下のようなユーザー訴求を実施することが可能です。 - 初日ユーザーに対してのオンボーディング - アプリの設定・権限が不十分なユーザーへの訴求 - 既存ユーザーに対する新機能お知らせ 本セッションではDMMポイントクラブのアプリ開発で実際に運用・活用しているFirebaseを活用したユーザー訴求方法を紹介しながら、どのようにFirebaseの設定を行うことで効果的なユーザー訴求を目指せるかを解説します。 また、それらを実運用したユーザー効果も併せて説明予定です。 DMMポイントクラブでは、ユーザーのリテンションレート(継続率)を高めるために、機能のお手軽さやお得さをアピールしたいと考えていました。 そのために考案された機能を開発して、ユーザーに届けるためには数週間程度の開発が必要だと見積もっていましたが、既存機能とFirebaseの機能を活用することで、1週間程度でユーザー訴求機能を実現することができました。 この機能はFirebase側で表示を調整することにより、アプリリリース無しに表示内容や条件を変更することもできます。 また、この手法を実運用することで他の機能やユーザー訴求にも転用ができるような基盤作りや知見蓄積をすることができたため、今後のDMMポイントクラブアプリ全体にとっても、果的なものとなりました。 これらの実現方法や知見を届け、様々なサービスでも活用し、より良いユーザー訴求を目指せるようになるセッションを目指します。 | ユーザー訴求方法を模索中の方
Firebaseを活用したいと考えている方 Firebaseの機能にどのようなものがあるか知りたい方 | 40 minuites | 日本語 / Japanese | 開発体制(Development Process) |
276 | DMM TVを支えるKMPの話 | mayamito | 2022年12月、DMM TVというサービスがリリースされました。
DMM TVでは、Android、iOS、Android TVの3つのプラットフォームのアプリをKMPを使い1つのリポジトリで開発しています。 本セッションでは、DMM TVの開発におけるKMPの活用事例をお話します。以下の内容を予定しています。 - KMP導入の経緯 - プロジェクト構成 - KMPで共通化している箇所としていない箇所 - 使用しているKMP対応ライブラリについて - 運用していくうえで感じたメリットとデメリット | AndroidアプリまたはiOSアプリの開発経験がある方
KMPに興味があり、実際のプロダクトにおける実例を知りたい方 | 40 minuites | 日本語 / Japanese | クロスプラットフォーム(Cross-platform Development) |
277 | デザインシステムエンジニアはじめました | Horie1024 | より良いAndroidアプリを開発するには、デザイナーとエンジニアが協力することは必要不可欠です。 デザインシステムは、デザインの一貫性を担保すると同時にデザイナーとエンジニアが協働していくための強力なツールとなります。
一方、デザインシステムを適用してデザインされたUIをどうAndroidアプリの実装に落とし込むかについて悩むことは多いのではないでしょうか。 このような経験は今まで多くあり、デザインシステムをエンジニアの観点で整備し、デザインと実装の一貫性を確保する「デザインシステムエンジニア」に個人的に興味がありました。そして、実践する機会があり実際に取り組んでみました。 本セッションでは、Androidエンジニアがデザインシステムエンジニアとしてデザインシステムの実装に関わり、デザインと実装をどうシームレスに繋げていったかをAndroidアプリ開発の視点で紹介します。 | - デザイナーとエンジニアの協業に興味がある方
- デザインシステムに興味がある方 - デザインシステムの実装に興味がある方 | 40 minuites | 日本語 / Japanese | 開発体制(Development Process) |
278 | Expo Routerで構築するFile-based Routing | mrtry | Expo Routerは、React Native向けの画面遷移ライブラリです。
モバイルアプリ的にはあまりなかった、ディレクトリとファイルと配置でNavigatorion Treeを設計するFile-based Routingの形式を取っており、設計や設定が複雑になりがちな画面遷移を簡素に実装することができます。 また、一度の実装でAndroid/iOS/Webを同時に設定できたり、ファイルパスを元に自動でDeep Linkも設定されるなど、画面遷移に関する事柄をシンプルに構成することができます。 本セッションでは、実際のモバイルアプリでの画面遷移を元に実例の紹介や、App Link/Universal Linkへの対応方法、Jetpack Navigationのように画面遷移時に渡すパラメータを型で縛る方法などについて紹介します。 | - cross-platform development frameworkを利用したモバイルアプリ開発に興味がある方
- React NavigationからExpo Routerへreplaceする場合の技術調査をしたい方 | 40 minuites | 日本語 / Japanese | クロスプラットフォーム(Cross-platform Development) |
279 | アノテーション処理を理解しよう | Keita Takahashi | Androidエンジニアにとって@Injectなどのアノテーションは馴染み深いと思います。しかし、アノテーションがどのように処理されているかは意外と知られていないと思います。
このセッションではKSPやkaptなどのアノテーション処理に関連する技術の仕組みや使い方を紹介します。 | アノテーション処理に興味があるAndroidエンジニア | 40 minuites | 日本語 / Japanese | Kotlin |
280 | アーキテクチャの選択と変化 | syam | このセッションでは、複雑なアーキテクチャから、プロダクトや組織に適したシンプルなアーキテクチャへの移行方法について体験をベースに解説します。またモジュール分割やJetpack Composeの導入に伴う変更点についても触れます。
従来のプロダクトのアーキテクチャは4層構造でしたが、ドメインロジックをアプリに持たない性質上、4層アーキテクチャでは、複雑で保守が難しく、コードの再利用性が低下するという問題がありました。これに対し、3層アーキテクチャに変更し、比較的にシンプルで柔軟性が高い状態を実現することができました。 本セッションにより、参加者は以下の点を学ぶことができます: - プロダクトや組織に適したアーキテクチャ移行のプラクティスを学べます。 - モジュール分割を通じて、コードの再利用性や保守性をどのように向上させるアーキテクチャにおけるモジュール分割の必要性について学べます。 - Jetpack Composeの導入により、アーキテクチャがどのように作用するかを学べます。 本セッションを通して、アーキテクチャ設計における一助になれば幸いです。 | このセッションは、アーキテクチャ設計に興味があるAndroidアプリ開発者やレガシーコードを適切なアーキテクチャに作り変えたいと考えている開発者に特におすすめです。 | 40 minuites | 日本語 / Japanese | アプリアーキテクチャ (App Architecture) |
281 | OCR with on-device ML | Takuya Kodama | 私達が提供するアプリでは、業務上のオペレーションとして個人情報の入力や計測器の計測結果を入力してもらうということが発生します。
OCR技術により、IDカードや計測器の表示盤をカメラで読み取ることでこのような入力の補助を行うことができます。 また、私たちのアプリはオフライン環境で利用されることを想定しているため、クラウドベースのAPIなどを使用することなくOCR機能を提供する必要があります。 本セッションでは、複数のツール(ML Kit, TensorFlow Lite, Pytorch mobile)による実現方法やそれぞれの違いについて説明を行い、開発する中で発生した課題や知見について共有したいと思います。 | OCR機能に興味のある方
MLツールに興味のある方 | 40 minuites | 日本語 / Japanese | 開発ツール&サービス(Development Tools and Services) |