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
nacatl_slide_03_AAC_Navigation_SafeArfgs.pdf
Search
nacatl
November 27, 2019
0
59
nacatl_slide_03_AAC_Navigation_SafeArfgs.pdf
nacatl
November 27, 2019
Tweet
Share
More Decks by nacatl
See All by nacatl
Flutterにおけるアプリ内課金実装 -Android/iOS完全なる統一 -
nacatl
2
6.4k
Navigation Componentを実戦投入した際の感動、便利さ、そしてつまづき
nacatl
0
2.8k
nacatl_slide_04_AAC_Navigation_Toolbar
nacatl
0
770
nacatl_slide_02_MapView_in_Recycler_view.pdf
nacatl
1
290
DynamicLinks 知られざる?Firebaseの秘技
nacatl
2
1.2k
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Reflections from 52 weeks, 52 projects
jeffersonlam
348
20k
StorybookのUI Testing Handbookを読んだ
zakiyama
28
5.4k
Bash Introduction
62gerente
610
210k
Building an army of robots
kneath
302
45k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
28
9.2k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
The Pragmatic Product Professional
lauravandoore
32
6.4k
Making the Leap to Tech Lead
cromwellryan
133
9.1k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
How GitHub (no longer) Works
holman
312
140k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
52k
Transcript
Copyright 2018 Studyplus, Inc. All Rights Reserved. Jetpack Navigation の
SafeArgsでつまずいた話 Yuzuru Nakashima / Studyplus Inc. 2019.11.27 @ あるあるLT Vol.08
自己紹介 ✎ なかてぃる affinity_robots nacatl ✎ スタディプラスのAndroidエンジニア ✎ 趣味: Magic
the Gathering
アジェンダ ✎ Jetpack Navigation ライブラリ ✎ SafeArgsとは ✎ つまづいたこと ✎
解決方法
Jetpack Navigation ライブラリ Fragment画面遷移の改革
Jetpack Navigation ライブラリ - Fragmentによる画面遷移を視覚的に デザインできるライブラリ - Fragment遷移のバックスタックとかも 管理してくれる
Jetpack Navigation ライブラリ
SafeArgsとは What is the SafeArgs?
SafeArgsとは? - Fragment間のBundleによるデータのput/getを 型安全な形でラップしてくれる機能 - getSerializable as? Hoge とか書かずに済む -
~~FragmentArgs という名前の ラッパークラスが自動生成される
SafeArgsとは? <fragment android:id="@+id/YyyFragment" > <argument android:name="myArg" app:argType="~~.~~.~~.Hoge" /> </fragment> <!--
Hoge は Serializable or Parcelable -->
SafeArgsとは? // 遷移元Fragmentの遷移処理箇所 findNavController().navigate( XxxFragmentDirections.actionToYyy( myArg = Hoge() ) )
SafeArgsとは? // 遷移先Fragment // フィールドとしてby navArgs()で取得 private val args: YyyFragmentArgs
by navArgs() // Hoge型として型安全で中身を受け取れる val myArg: Hoge = args.myArg
つまずいたこと Missteps
難読化したらInflateException出た つまずいたこと
難読化したらInflateException出た Didn’t find class ~.~.~.Hoge つまずいたこと
つまずいたこと ピリオドで始めれば相対パスでも書けるらしい… <fragment android:id="@+id/YyyFragment" > <argument android:name="myArg" app:argType=".Hoge" /> </fragment>
難読化しなくてもInflateException出た つまずいたこと
難読化しなくてもInflateException出た Didn’t find class {パッケージ名}.debug.Hoge つまずいたこと
“debug”!? つまずいたこと
つまずいたこと 相対パスで書くと実際に動いてるアプリの パッケージ名の後に書いたパスが付く - Build Variants でSuffixとか付けてると無理 - マルチモジュールで実際のクラスのディレクトリが ~~.app.{モジュール名}.Hoge
とかになってても無理
解決方法 Solutions
解決方法 フルパスで書いて難読化対象から外そう - クラスに @Keep アノテーションつける - proguard-rules.proで -keepnames に定義する
公式ドキュメントにもそう書かれている https://developer.android.com/guide/navigatio n/navigation-pass-data?hl=JA#proguard_conside rations
- SafeArgsは便利だけど現状一工夫必要 - 公式ドキュメントを逐一確認しよう
ご静聴ありがとうございました