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
Fontdeck: Realign not Redesign
paulrobertlloyd
83
5.5k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Statistics for Hackers
jakevdp
798
220k
Scaling GitHub
holman
459
140k
Optimizing for Happiness
mojombo
377
70k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
52
2.4k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.4k
Documentation Writing (for coders)
carmenintech
69
4.7k
Optimising Largest Contentful Paint
csswizardry
36
3.2k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
640
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
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は便利だけど現状一工夫必要 - 公式ドキュメントを逐一確認しよう
ご静聴ありがとうございました