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.7k
Navigation Componentを実戦投入した際の感動、便利さ、そしてつまづき
nacatl
0
2.9k
nacatl_slide_04_AAC_Navigation_Toolbar
nacatl
0
780
nacatl_slide_02_MapView_in_Recycler_view.pdf
nacatl
1
290
DynamicLinks 知られざる?Firebaseの秘技
nacatl
2
1.2k
Featured
See All Featured
Optimizing for Happiness
mojombo
377
70k
We Have a Design System, Now What?
morganepeng
52
7.5k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
34
2.2k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Code Reviewing Like a Champion
maltzj
522
39k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
5
520
Faster Mobile Websites
deanohume
306
31k
Why Our Code Smells
bkeepers
PRO
336
57k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.1k
The Cult of Friendly URLs
andyhume
78
6.3k
Building Better People: How to give real-time feedback that sticks.
wjessup
367
19k
Rebuilding a faster, lazier Slack
samanthasiow
80
8.9k
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は便利だけど現状一工夫必要 - 公式ドキュメントを逐一確認しよう
ご静聴ありがとうございました