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 こやまカニ大好き
マルチモジュールアプリの画面遷移処理実装
nein37
0
6.1k
クックパッド 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.2k
クックパッドアプリのマルチモジュール化への取り組み
nein37
11
10k
Android のセキュリティよくなってきた話
nein37
3
2.4k
Androidアプリのデザイン整理への取り組み
nein37
1
960
Androidアプリのタブレット向けレイアウト
nein37
4
1.1k
Other Decks in Programming
See All in Programming
シェーダーで魅せるMapLibreの動的ラスタータイル
satoshi7190
1
480
.NET のための通信フレームワーク MagicOnion 入門 / Introduction to MagicOnion
mayuki
1
1.4k
Realtime API 入門
riofujimon
0
150
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
0
100
Pinia Colada が実現するスマートな非同期処理
naokihaba
4
220
ピラミッド、アイスクリームコーン、SMURF: 自動テストの最適バランスを求めて / Pyramid Ice-Cream-Cone and SMURF
twada
PRO
10
1.3k
シールドクラスをはじめよう / Getting Started with Sealed Classes
mackey0225
4
640
最新TCAキャッチアップ
0si43
0
140
Quine, Polyglot, 良いコード
qnighy
4
640
聞き手から登壇者へ: RubyKaigi2024 LTでの初挑戦が 教えてくれた、可能性の星
mikik0
1
130
Jakarta Concurrencyによる並行処理プログラミングの始め方 (JJUG CCC 2024 Fall)
tnagao7
1
290
NSOutlineView何もわからん:( 前編 / I Don't Understand About NSOutlineView :( Pt. 1
usagimaru
0
330
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
16
2.1k
Designing on Purpose - Digital PM Summit 2013
jponch
115
7k
Teambox: Starting and Learning
jrom
133
8.8k
Automating Front-end Workflow
addyosmani
1366
200k
The Invisible Side of Design
smashingmag
298
50k
A better future with KSS
kneath
238
17k
Unsuck your backbone
ammeep
668
57k
Building a Scalable Design System with Sketch
lauravandoore
459
33k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
25
1.8k
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
48k
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