Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Androidアプリエンジニアの基礎知識
Search
こやまカニ大好き
February 18, 2019
Programming
16
11k
Androidアプリエンジニアの基礎知識
Cookpad.apk #2 登壇資料
https://cookpad.connpass.com/event/117054/
こやまカニ大好き
February 18, 2019
Tweet
Share
More Decks by こやまカニ大好き
See All by こやまカニ大好き
Androidアプリの One Experience リリース
nein37
0
2.8k
マルチモジュールアプリの画面遷移処理実装
nein37
0
6.3k
クックパッド Android アプリのマルチモジュール化とデモアプリの活用
nein37
1
6.7k
2020年代の WebView 実装 / saikou_no_webview_2021
nein37
2
11k
Androidアプリをいつまでも楽しく開発し続けるための取り組み
nein37
5
2.5k
minSdkVersion=21にしてから1年経った話
nein37
8
2.3k
クックパッドアプリのマルチモジュール化への取り組み
nein37
11
11k
Android のセキュリティよくなってきた話
nein37
3
2.4k
Androidアプリのデザイン整理への取り組み
nein37
1
1k
Other Decks in Programming
See All in Programming
How mixi2 Uses TiDB for SNS Scalability and Performance
kanmo
38
14k
GoとPHPのインターフェイスの違い
shimabox
2
190
PHPカンファレンス名古屋2025 タスク分解の試行錯誤〜レビュー負荷を下げるために〜
soichi
1
210
動作確認やテストで漏れがちな観点3選
starfish719
6
1k
Amazon S3 TablesとAmazon S3 Metadataを触ってみた / 20250201-jawsug-tochigi-s3tables-s3metadata
kasacchiful
0
170
Formの複雑さに立ち向かう
bmthd
1
860
Kubernetes History Inspector(KHI)を触ってみた
bells17
0
230
法律の脱レガシーに学ぶフロントエンド刷新
oguemon
5
740
昭和の職場からアジャイルの世界へ
kumagoro95
1
380
SwiftUI Viewの責務分離
elmetal
PRO
1
240
DROBEの生成AI活用事例 with AWS
ippey
0
130
もう僕は OpenAPI を書きたくない
sgash708
5
1.8k
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
6
240
Unsuck your backbone
ammeep
669
57k
A designer walks into a library…
pauljervisheath
205
24k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Documentation Writing (for coders)
carmenintech
67
4.6k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.4k
How STYLIGHT went responsive
nonsquared
98
5.4k
How to train your dragon (web standard)
notwaldorf
91
5.8k
Making Projects Easy
brettharned
116
6k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
Transcript
Androidアプリエンジニアの 基礎知識 こやまカニ大好き 1
自己紹介 こやまカニ大好き(@nein37) モバイル基盤部所属 社内全Androidプロジェクトの開発効率化と技術サポート minSdkVersion 上げたりモジュール分割したりしてます 2
話す内容 • チームとしてのAndroidアプリ開発 • Androidアプリエンジニアに期待される役割 • 開発効率化のためのベストプラクティス 参考資料:Android開発をする上で知っておいてほしいなと思うこと http://nein37.hatenablog.com/entry/2018/03/19/010720 3
チームとしてのAndroidアプリ開発 以下のような状況を想定しています • 比較的新しい/小規模なサービス • Androidのネイティブアプリを開発中 /開発予定 • チーム内のAndroidエンジニアはまだ少ない さらに進んだ状況に関しては
DroidKaigi 2019 で「アプリをさらに成長させるための技術戦略」 という素晴らしい発表がありました https://blog.shoheikawano.com/entry/look_back_droidkaigi_2019 4
• Android に詳しい • Android アプリを実装できる • Android に関する意思決定をサポートできる Android
エンジニアに期待される役割 5
Androidに詳しい #とは 6
• 古いOSがいつまでも現役 • 端末によって解像度やDPIが異なる • 端末によって挙動が異なる • マテリアルデザイン大変そう といった不安を正しい知識で払拭できる Android
に詳しい #とは 7
• 完全に事実 ◦ 2013年リリースのOSがシェア8%もある • 古いOSにもある程度はバックポート可能 • 新OSで急に挙動が変更されないような仕組みがある ◦ targetSdkVersion
を上げなければある程度大丈夫 • OSごとの挙動の違いは公式ページに詳しく書いてある ◦ https://developer.android.com/about/versions/pie/ → Lollipop (2014〜)くらいまでなら大きな苦労なくサポート可能 古いOSがいつまでも現役 8
• 端末によってディスプレイが異なるのは事実 • この違いを埋めるための仕組みも同時に用意されている • DP+ConstraintLayoutで組んでいれば端末ごとの差異はほぼ解消できる 端末によって解像度やDPIが異なる 9 画像出典 :
The Android Screen Fragmentation Myth
• 問題の切り分けが重要(端末なのか、OSなのか) • 本当に端末ごとの挙動が大きく異なる部分は限られている ◦ Bluetooth、カメラなどのハードウェア周り ◦ WebView(Android 4.4未満) •
WebViewに関しては Android 5.0 から挙動が揃うようになった • クックパッドアプリでは minSdkVersion 21 化して以降 特定の端末のみに依存する問題は激減した 端末によって挙動が異なる 10
• Material Components を利用するとある程度までは導入できる • 完全にマテリアルデザインを再現しようとすると死ぬ ◦ ライブラリがドキュメントの挙動を完全には再現してくれない • マテリアルデザインが導入されたのは
API level 21 から ◦ それ以前のバージョンへのバックポートは完璧ではない。 • Material Theming は一度触っておいたほうが良い ◦ マテリアルデザインっぽいカスタムテーマを作れるデザインツール (公式) マテリアルデザイン大変そう 11
Android アプリを 実装できる #とは 12
サービス開発はリリースサイクルをできるだけ速く回し続けることが重要。 個人の速度だけでなくチームとして速度を落とさない工夫が必要。 • なぜアプリへのアーキテクチャ導入が行われているのかを理解する • テストの種類を理解し実装する • ドキュメントを残す • ライフサイクルやFragment遷移まわりをきちんと理解する
Android アプリを実装できる #とは 13
• どのアーキテクチャであっても関心の分離を目的としている • Fragment/Activity からロジックを分離することでOSから開放される • 他のメンバーの作業時にどこを見ればよいのかがわかりやすくなる なぜアプリへのアーキテクチャ導入が行われて いるのか 14
• ユニットテスト、インストルメントテスト、 Firebase Test Lab • 端末をポチポチ触ってテストする時間を削減できる • CIなどでテスト結果のログを残すことで後の調査の時間も削減できる •
他のメンバーの作業時にテストを実行し挙動をチェックできる テストの種類を理解し実装する 15
• あるいはすでにドキュメントが存在するものを最大限活用する • ちゃんとしたドキュメントでなくてもIssueへのコメントなども後々役に立つ場合が ある • メンバー加入時など作業時間短縮につながる部分は大きい ドキュメントを残す 16
• アプリが複雑化するとネストされたFragmentが頻出するようになる ◦ タブ、ViewPager、 • よく理解しないまま実装すると障害対応などで時間を浪費する • 必要になったときにドキュメントを読む癖をつける ライフサイクルやFragment遷移まわりをきちん と理解する
17
Android に関する意思決定 をサポートできる #とは 18
Androidアプリの運用に関する機能や数字を知り、意思決定に反映することができる • サポートすべきバージョン • 検証端末はどうすれば良いのか • アプリの統計情報はどこを見れば良いのか Androidに関する意思決定を サポートできる #とは
19
• 公式ページに月次のシェア が公開されている(が昨年から止まっている…) • 公式が発表しているOSのバージョンシェアよりもアプリのシェアを見たほうが正 確(Playコンソールで見られる) • 「開発のしやすさ」は速度の根拠になります • 大部分ではAPI
21 が大きな転換点になっている ◦ マテリアルデザイン導入 (によるView属性拡張) ◦ TLS関連(OkHttp も 5.0 未満はサポートを切った ) ◦ VectorDrawable や RippleDrawable など便利系 サポートすべきOSバージョン 20
• ディスプレイ設定や開発者オプションを使うと表示領域サイズやノッチの有無を 変更可能 • スマートフォンの動作確認に関してはPixel3に加え、リリース前レポートや FirebaseTestLabsを活用することで大体カバー可能 • 設定アプリはメーカーごとのカスタマイズが激しいため、シェアが大きいメーカー ごとに1機種ずつあったほうがユーザーサポート目的では良い 検証端末はどうすれば良いのか
21
• Playコンソールのダッシュボードに大量の情報があります ◦ OSバージョンごとのシェア、インストールユーザーの推移など ◦ 最近は日本語のレビュー解析機能も改善されてきました • 統計内容、利用のためのヒントはヘルプページにも書いてあります ◦ Android
Developers の Google Play ページ ◦ 戦略(Strategies) というページも有用 ◦ Playコンソールヘルプ アプリの統計情報はどこを見れば良いのか 22
開発効率化のための ベストプラクティス 23
実はほとんど公式ページに書いてあるので最大限活用する • 公式ページにそのまま Best practices という項目がある • Jetpackを活用することでドキュメント作業を簡略化できる ◦ Jetpackに含まれているもの一覧を知っているだけでも役に立つ
◦ Google Samples に大量のサンプルがある ◦ アーキテクチャに関しても非常に詳しく書いてある • Codelabs を活用することで新しい技術を簡単に学べる ◦ 新しいサービスや機能を実際の挙動を試しながら学べるのでとても効率が良い 開発効率化のためのベストプラクティス 24
他社事例は参考にできることも多い • 公式サイト内のNewsから最新のニュースが配信されている ◦ 開発関連だけでなく各種サービスの成功事例や課金に関するコンテンツも配信されている • 公式サイト内のGooglePlayに最新のGooglePlay活用方法が書かれている ◦ マーケティングに関する事例も多数配信されている 開発効率化のためのベストプラクティス
25
Googleが教えてくれないこと • 具体的なデザインリソース運用方法など ◦ 皆悩んでいるので他社事例を参考にすると良い ◦ 弊社テックブログでも何度か記事にしました 記事1 記事2 ◦
Kyashさんの技術ブログが非常に詳しくて参考になります • BLEとかカメラとかTVとかで端末依存問題があるんですが… ◦ DroidKaigi とかで辛い話知見が聞けます ◦ いつもありがとうございます 開発効率化のためのベストプラクティス 26
Androidはよくわからない怖いプラットフォームではなく、非常に個性豊かな奥行きの あるプラットフォーム。 様々な端末とユーザーに最速で価値を届けられるように頑張っていきましょう。 これからも弊社での事例を中心に開発効率化のための知見を共有していきます。 まとめ 27