SlideShare a Scribd company logo
1 of 34
Download to read offline
SharedPreferences 
Anti Pattern
とあるSさん 
岡野さんは 
System破壊する方法たくさん 
知ってますからね。 
期待してください!
とあるKさん 
期待しておきます! 
Androidの壊し方ってのも 
面白そうですね!w
そんな話 
できるわけねーだろ! 
怒られちゃうから…
About Me 
Shinobu Okano ( 岡野忍) 
SERAKU Co.,Ltd. 
@operandoOS 
Android/ Ruby on Rails 
Dart/ Firefox OS/ Play Framework 
Twenty two years old 
http://hack-it-iron.hatenablog.com/
みんなちがうから、 
世界はたのしい 
Androidエンジニアです
ゆるびぃ会 
http://yuruby.github.io/ 
Community 
女子会みたいなもの 
※女子はいません
Do you use the SharedPreferences?
SharedPreferences 
Anti Pattern 
•getSharedPreferencesが色んなところに書いてある 
•何でもかんでも一つのPreferenceに保存する 
•セキュアじゃないMODE使ってる 
•Key名がベタ書き→定数化してない 
•グローバルな変数格納用に使用される 
などなど・・・
SharedPreferences 
Best Practice 
Utilを作れ!
SharedPreferences 
Anti Pattern 
•getSharedPreferencesが色んなところに書いてある 
•何でもかんでも一つのPreferenceに保存する 
•セキュアじゃないMODE使ってる 
•Key名がベタ書き→定数化してない 
•グローバルな変数格納用に使用される 
などなど・・・
SharedPreferences 
Best Practice 
Key名は定数化
SharedPreferences 
Anti Pattern 
•getSharedPreferencesが色んなところに書いてある 
•何でもかんでも一つのPreferenceに保存する 
•セキュアじゃないMODE使ってる 
•Key名がベタ書き→定数化してない 
•グローバルな変数格納用に使用される 
などなど・・・
SharedPreferences 
Best Practice 
getDefault 
SharedPreferencesは 
極力使わない
SharedPreferences 
Anti Pattern 
•getSharedPreferencesが色んなところに書いてある 
•何でもかんでも一つのPreferenceに保存する 
•セキュアじゃないMODE使ってる 
•Key名がベタ書き→定数化してない 
•グローバルな変数格納用に使用される 
などなど・・・
もう 
Utilクラス 
作るの疲れたぜ
もう 
定数 
作るの疲れたぜ
Garum 
https://github.com/operando/Garum
Annotation@Style 
SharedPreferences
ん? 
どこかで聞いたこと 
あるなー
Active record style SQLite persistence for Android
Active record style SQLite persistence for Android
パクリだ。
So what?
Support Version 
API Level 9 
- 
API Level 21
How to use 
-Initialize- 
publicclassMyApplicationextendsApplication { 
@Override 
publicvoidonCreate(){ 
super.onCreate(); 
Garum.initialize(getApplicationContext()); 
} 
}
How to use 
-Model- 
@Pref(name ="app_status") 
publicclassAppStatusextendsPrefModel { 
@PrefKey 
publicString appName; 
@PrefKey 
publicintstartupCount; 
@PrefKey 
publicbooleanshowNotification; 
}
How to use 
-Support Types- 
int 
long 
float 
boolen 
String 
Set<String>
How to use 
-SupportTypeSerializer- 
Date
How to use 
-Support Modes- 
MODE_PRIVATE 
MODE_WORLD_READABLE 
MODE_WORLD_WRITEABLE 
MODE_MULTI_PROCES
How to use 
-Support Modes- 
deprecatedin API level 17 
MODE_WORLD_READABL 
MODE_WORLD_WRITEABLE
How to use 
-Save- 
publicvoidonSave(View v){ 
AppStatus appStatus =newAppStatus(); 
appStatus.appName="Garum"; 
appStatus.startupCount=10; 
appStatus.showNotification=true; 
appStatus.save(); 
}
How to use 
-Save- 
<?xml version='1.0' encoding='utf-8' standalone='yes' ?> 
<map> 
<stringname="appName">Garum</string> 
<intname="startupCount"value="10"/> 
<booleanname="showNotification"value="true"/> 
</map> 
/data/data/<package name>/shared_prefs/app_status.xml
Thank you

More Related Content

What's hot

STMとROSをシリアル通信させて移動ロボットを作る
STMとROSをシリアル通信させて移動ロボットを作るSTMとROSをシリアル通信させて移動ロボットを作る
STMとROSをシリアル通信させて移動ロボットを作る
mozyanari
 
関西Firefox os勉強会1st発表資料130615fin
関西Firefox os勉強会1st発表資料130615fin関西Firefox os勉強会1st発表資料130615fin
関西Firefox os勉強会1st発表資料130615fin
yosuke_kirihata
 

What's hot (18)

note勉強会@NagatachoGRiD
note勉強会@NagatachoGRiDnote勉強会@NagatachoGRiD
note勉強会@NagatachoGRiD
 
多人数iOSアプリ開発を考える
多人数iOSアプリ開発を考える多人数iOSアプリ開発を考える
多人数iOSアプリ開発を考える
 
Fluent Feature in F#
Fluent Feature in F#Fluent Feature in F#
Fluent Feature in F#
 
2018年07月11日 岩手県立大学 LT資料
2018年07月11日 岩手県立大学 LT資料2018年07月11日 岩手県立大学 LT資料
2018年07月11日 岩手県立大学 LT資料
 
20140209 fxos名古屋
20140209 fxos名古屋20140209 fxos名古屋
20140209 fxos名古屋
 
検索の工夫
検索の工夫検索の工夫
検索の工夫
 
C#erがF#に這い寄ってみた
C#erがF#に這い寄ってみたC#erがF#に這い寄ってみた
C#erがF#に這い寄ってみた
 
I love ms word!?
I love ms word!?I love ms word!?
I love ms word!?
 
Ros#を使ったROSとxRデバイスの通信
Ros#を使ったROSとxRデバイスの通信Ros#を使ったROSとxRデバイスの通信
Ros#を使ったROSとxRデバイスの通信
 
20140308 わんくまo58-lt-it勉強会の好循環-public
20140308 わんくまo58-lt-it勉強会の好循環-public20140308 わんくまo58-lt-it勉強会の好循環-public
20140308 わんくまo58-lt-it勉強会の好循環-public
 
自作プログラミング言語 Lury
自作プログラミング言語 Lury自作プログラミング言語 Lury
自作プログラミング言語 Lury
 
CombGig2 「Kb」の軌跡
CombGig2 「Kb」の軌跡CombGig2 「Kb」の軌跡
CombGig2 「Kb」の軌跡
 
STMとROSをシリアル通信させて移動ロボットを作る
STMとROSをシリアル通信させて移動ロボットを作るSTMとROSをシリアル通信させて移動ロボットを作る
STMとROSをシリアル通信させて移動ロボットを作る
 
関西Firefox os勉強会1st発表資料130615fin
関西Firefox os勉強会1st発表資料130615fin関西Firefox os勉強会1st発表資料130615fin
関西Firefox os勉強会1st発表資料130615fin
 
暗号化したまま計算できる暗号技術とOSS開発による広がり
暗号化したまま計算できる暗号技術とOSS開発による広がり暗号化したまま計算できる暗号技術とOSS開発による広がり
暗号化したまま計算できる暗号技術とOSS開発による広がり
 
メカジョさんとジュリアたん♡ (Mechajyo and Julia-tan) #JuliaTokyo #JuliaLang
メカジョさんとジュリアたん♡ (Mechajyo and Julia-tan) #JuliaTokyo #JuliaLangメカジョさんとジュリアたん♡ (Mechajyo and Julia-tan) #JuliaTokyo #JuliaLang
メカジョさんとジュリアたん♡ (Mechajyo and Julia-tan) #JuliaTokyo #JuliaLang
 
Pf部第24回資料
Pf部第24回資料Pf部第24回資料
Pf部第24回資料
 
著作権について
著作権について著作権について
著作権について
 

Viewers also liked

Viewers also liked (15)

開発効率アンチパターン
開発効率アンチパターン開発効率アンチパターン
開発効率アンチパターン
 
US進出でのAndroid開発inメルカリ Mercari US App Development
US進出でのAndroid開発inメルカリ Mercari US App Development US進出でのAndroid開発inメルカリ Mercari US App Development
US進出でのAndroid開発inメルカリ Mercari US App Development
 
ABC2016Spring Androidアプリ実装アンチパターン(暫定)
ABC2016Spring Androidアプリ実装アンチパターン(暫定)ABC2016Spring Androidアプリ実装アンチパターン(暫定)
ABC2016Spring Androidアプリ実装アンチパターン(暫定)
 
AndroidのUXアンチパターンについて
AndroidのUXアンチパターンについてAndroidのUXアンチパターンについて
AndroidのUXアンチパターンについて
 
Android wear ui guidelines ( and Circle Design UX )
Android wear ui guidelines ( and Circle Design UX )Android wear ui guidelines ( and Circle Design UX )
Android wear ui guidelines ( and Circle Design UX )
 
Android Wearアプリ開発経験談
Android Wearアプリ開発経験談Android Wearアプリ開発経験談
Android Wearアプリ開発経験談
 
王道的な使い方 Android Wear
王道的な使い方 Android Wear王道的な使い方 Android Wear
王道的な使い方 Android Wear
 
ANCSとAndroid Wear徹底比較
ANCSとAndroid Wear徹底比較ANCSとAndroid Wear徹底比較
ANCSとAndroid Wear徹底比較
 
Effective SQLite For Android
Effective SQLite For AndroidEffective SQLite For Android
Effective SQLite For Android
 
20141120 ぬるぬる動くandroid tips
20141120 ぬるぬる動くandroid tips20141120 ぬるぬる動くandroid tips
20141120 ぬるぬる動くandroid tips
 
ログ管理でウキウキAndroid Life (Log Management in Android)
ログ管理でウキウキAndroid Life (Log Management in Android)ログ管理でウキウキAndroid Life (Log Management in Android)
ログ管理でウキウキAndroid Life (Log Management in Android)
 
Reactive android
Reactive androidReactive android
Reactive android
 
ちょっとGoogle Analyticsの話しようぜ
ちょっとGoogle Analyticsの話しようぜちょっとGoogle Analyticsの話しようぜ
ちょっとGoogle Analyticsの話しようぜ
 
Customizing Theme and Style for Material Design : Droid Kaigi 2016
Customizing Theme and Style for Material Design : Droid Kaigi 2016Customizing Theme and Style for Material Design : Droid Kaigi 2016
Customizing Theme and Style for Material Design : Droid Kaigi 2016
 
コマンドなしでぼくはAndroid開発できない話
コマンドなしでぼくはAndroid開発できない話コマンドなしでぼくはAndroid開発できない話
コマンドなしでぼくはAndroid開発できない話
 

More from Shinobu Okano

More from Shinobu Okano (20)

OnActivityResult - おまえら!もうonActivityResultでswitchとif書く時代は終わりだぞ!
OnActivityResult - おまえら!もうonActivityResultでswitchとif書く時代は終わりだぞ!OnActivityResult - おまえら!もうonActivityResultでswitchとif書く時代は終わりだぞ!
OnActivityResult - おまえら!もうonActivityResultでswitchとif書く時代は終わりだぞ!
 
Kotlinでマッチョする話
Kotlinでマッチョする話Kotlinでマッチョする話
Kotlinでマッチョする話
 
まったりAndroid Framework Code Reading #4
まったりAndroid Framework Code Reading #4まったりAndroid Framework Code Reading #4
まったりAndroid Framework Code Reading #4
 
Lightweight-Stream-APIのあるAndroidアプリ開発
Lightweight-Stream-APIのあるAndroidアプリ開発Lightweight-Stream-APIのあるAndroidアプリ開発
Lightweight-Stream-APIのあるAndroidアプリ開発
 
shinobu.apk #3
shinobu.apk #3shinobu.apk #3
shinobu.apk #3
 
Android + JSON-RPC
Android + JSON-RPCAndroid + JSON-RPC
Android + JSON-RPC
 
Inside Android N
Inside Android NInside Android N
Inside Android N
 
Gradle PluginとCIと俺
Gradle PluginとCIと俺Gradle PluginとCIと俺
Gradle PluginとCIと俺
 
shinobu.apk #2
shinobu.apk #2shinobu.apk #2
shinobu.apk #2
 
まったりAndroid Framework Code Reading #3
まったりAndroid Framework Code Reading #3まったりAndroid Framework Code Reading #3
まったりAndroid Framework Code Reading #3
 
Android Framework Code Readingのしおり ver 1.1
Android Framework Code Readingのしおり ver 1.1Android Framework Code Readingのしおり ver 1.1
Android Framework Code Readingのしおり ver 1.1
 
Kotlinにお触り
Kotlinにお触りKotlinにお触り
Kotlinにお触り
 
DroidKaigiアプリをSpoonで全画面スクショするぞい\(^o^)/
DroidKaigiアプリをSpoonで全画面スクショするぞい\(^o^)/DroidKaigiアプリをSpoonで全画面スクショするぞい\(^o^)/
DroidKaigiアプリをSpoonで全画面スクショするぞい\(^o^)/
 
Gradle PluginとTwitterとズン ドコ キ・ヨ・シ!
Gradle PluginとTwitterとズン ドコ キ・ヨ・シ!Gradle PluginとTwitterとズン ドコ キ・ヨ・シ!
Gradle PluginとTwitterとズン ドコ キ・ヨ・シ!
 
ChromeとAndroidの過去・現在・未来
ChromeとAndroidの過去・現在・未来ChromeとAndroidの過去・現在・未来
ChromeとAndroidの過去・現在・未来
 
Android Dev Tools Knowledge
Android Dev Tools KnowledgeAndroid Dev Tools Knowledge
Android Dev Tools Knowledge
 
shinobu.apk #1
shinobu.apk #1shinobu.apk #1
shinobu.apk #1
 
ChromeとAndroidの 過去・現在・未来 ver 0.1
ChromeとAndroidの 過去・現在・未来  ver 0.1ChromeとAndroidの 過去・現在・未来  ver 0.1
ChromeとAndroidの 過去・現在・未来 ver 0.1
 
5分で資料作ってSlideShareにアップロードする錬金術
5分で資料作ってSlideShareにアップロードする錬金術5分で資料作ってSlideShareにアップロードする錬金術
5分で資料作ってSlideShareにアップロードする錬金術
 
Logcatの話
Logcatの話Logcatの話
Logcatの話
 

Shared Preferences Anti Pattern