$30 off During Our Annual Pro Sale. View Details »
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
57
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.1k
Navigation Componentを実戦投入した際の感動、便利さ、そしてつまづき
nacatl
0
2.7k
nacatl_slide_04_AAC_Navigation_Toolbar
nacatl
0
760
nacatl_slide_02_MapView_in_Recycler_view.pdf
nacatl
1
290
DynamicLinks 知られざる?Firebaseの秘技
nacatl
2
1.2k
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
Producing Creativity
orderedlist
PRO
341
39k
Statistics for Hackers
jakevdp
796
220k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.3k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
159
15k
Writing Fast Ruby
sferik
627
61k
Become a Pro
speakerdeck
PRO
25
5k
Why Our Code Smells
bkeepers
PRO
334
57k
YesSQL, Process and Tooling at Scale
rocio
169
14k
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は便利だけど現状一工夫必要 - 公式ドキュメントを逐一確認しよう
ご静聴ありがとうございました