æµ·å¤åãã®Androidã¢ããªãéçºãã¦ãã @rejasupotaro ã§ãã 4/12ã13ã«Droidcon Italyã¨ããAndroidã®ã«ã³ãã¡ã¬ã³ã¹ãããã¾ããã
ç§ã¯ãã®ã«ã³ãã¡ã¬ã³ã¹ã§ããã©ã¼ãã³ã¹ã®è©±ããã¦ãã¾ããããã®è¨äºã®ååã§ã¯ãã«ã³ãã¡ã¬ã³ã¹ã§çºè¡¨ããããã©ã¼ãã³ã¹ã®è©±ããå¾åã«æµ·å¤ã®ã«ã³ãã¡ã¬ã³ã¹ã«åå ãã¦ã¿ã¦ã©ãã ã£ããã¨ãããã¨ãæ¸ãã¾ãã
ããã©ã¼ãã³ã¹ã®è©±
以ä¸ã®ãããª3é¨æ§æã§è©±ããã¾ããã
- HTTPã¨éä¿¡ãè¡ãç°å¢
- ç»åã®èªã¿è¾¼ã¿ã¨æé©å
- UXãé«ããAPIè¨è¨
以éã®è¨äºã¯ã¹ã©ã¤ãã®è£è¶³ã主ã«ãªãã¾ãã®ã§ãã¹ã©ã¤ããä¸èªãããã¨ã«èªã¿é²ãã¦ããã ãã¨ããå®ããããã¨æãã¾ãã
HTTPéä¿¡ãè¦ç´ã
éä¿¡ã®ä¸èº«ãè¦ã
ã¾ããéä¿¡ãè¦ããã¨ãã§ããããã«ãã¾ãã以å㯠mitmproxy ã Charles ãªã©ã®ãããã·ãã¼ã«ã使ã£ã¦ãã¾ããããä»ã¯ Stetho ã使ã£ã¦ãã¾ãã USBã«ç¹ãã ãã§ç°¡åã«ãããã¯ã¼ã¯ãè¦ããã¨ãã§ããããã«ãªãã®ã§Androidã«è©³ãããªã人ã§ããæåãããããã®ã§ãããããªã¯ã¨ã¹ãã¨ã¬ã¹ãã³ã¹éã£ã¦ãããã¾ããï¼ãã¨ããããã¨ãããããã¨ãã§ããããã«ãªãã¾ããã
Gzipãæå¹ã«ãã
ãµã¼ãã¼å´ã§Gzipãæå¹ã«ãªã£ã¦ããããã¨ãã£ã¦ã¯ã©ã¤ã¢ã³ãå´ã§æå¹ã«ãªã£ã¦ããã¨ã¯éãã¾ãããStethoã使ã£ã¦Gzipãæå¹ã«ãªã£ã¦ãããã¨ã確èªãã¾ãããã
ãã対å¿ãã¦ããªããã°èªåã§ãªã¯ã¨ã¹ããããã« Accept-Encoding: gzip
ãä»ãã¦ãã¬ã¹ãã³ã¹ãããã« Content-Encoding: gzip
ãå«ã¾ãã¦ããã¨ãã«ãã³ã¼ãããå¦çãæ¸ãå¿
è¦ãããã¾ãã
OkHttpã¯ããã©ã«ãã§Gzipãæå¹ã«ãªã£ã¦ãã¾ããHttpUrlConnectionãããã®ä»ã®HTTPã¯ã©ã¤ã¢ã³ãã使ã£ã¦ããå ´åã¯å®è£ ã確èªãã¦ãã ããã ç§ã¯ä»¥ä¸ã®çç±ããAPIãç»åã®ãªã¯ã¨ã¹ãã«OkHttpã使ããã¨ããããããã¦ãã¾ãã
- HTTP/2.0ãWebSocketã«å¯¾å¿ãã¦ãã
- ã³ãã¯ã·ã§ã³ããã¼ãªã³ã°ãããããããã¡ãã»ã°ã¡ã³ãã®ãªã¹ãã¨ãã¦å®è£ ãã¦ãæ¡å¼µããã¨ãã«ã¯ã»ã°ã¡ã³ããã¼ã«ããã¡ã¢ãªãååå¾ãããªã©ãããã©ã¼ãã³ã¹ã«é æ ®ããè¨è¨ã«ãªã£ã¦ãã
- A Few 'Ok' Libraries (Droidcon MTL 2015) // Speaker Deck
- Interceptorã¨ããä»çµã¿ã«ãã£ã¦æè»ãªãããã¯ã¼ã¯å¦çãè¡ããã¨ãã§ãã
- ãã¨ãã°ãNetworkInterceptorã使ã£ã¦æå ã§ã®ã¬ã¹ãã³ã¹ã¿ã¤ã ãè¨æ¸¬ããã¢ã¸ã¥ã¼ã«ãç°¡åã«ä½ããã¨ãã§ãã
Interceptors · square/okhttp Wiki
Cache-Controlãæå¹ã«ãã
OkHttpã¯Cache-Controlããµãã¼ããã¦ãã¾ããOkHttpClientã«Cacheã¯ã©ã¹ã®ã¤ã³ã¹ã¿ã³ã¹ãã»ããããã ãã§æå¹ã«ãããã¨ãã§ãã¾ãã
// ã¢ããªå´ OkHttpClient client = new OkHttpClient(); Cache cache = new Cache(cacheDir, MAX_CACHE_SIZE); client.setCache(cache);
# ãµã¼ãã¼å´ expires_in(1.hour, public: true) # => Cache-Control: max-age=3600, public
2åç®ä»¥éã®è¡¨ç¤ºãæ©ããããã¨ãã§ããã®ãããã§ããããã¼ã«ã«ã«ãã£ãã·ã¥ãç½®ããã¨ã§ãªãã©ã¤ã³ã§ãã³ã³ãã³ããè¦ããããã«ãªãã®ã大ããªã¡ãªããã§ãã
æå¹ã«ããã®ã¯ç°¡åã§ããã端æ«ã®ãã£ãã·ã¥ã¯ãµã¼ãã¼å´ããæ¶ããã¨ãã§ããªãã®ã§ãé©åãªããªã·ã¼ãè¨å®ããå¿ è¦ãããã¾ãã
Reactive Data Store
ãã®ã¢ããªã¯RxJavaããã¼ã¹ã«ä½ããã¦ãã¾ããåºæ¬çãªæ¹éã¯ä»¥ä¸ã®è¨äºã«ããéãã§ãã
- RxJavaã§ã¢ãã«ãåå¾ããã£ãã·ã¥ããã¼ã¸ãã¼ã·ã§ã³ããã㦠- Qiita
- RxJavaã§APIã¯ã©ã¤ã¢ã³ããä½ã - Qiita
RxJavaã¯ãã¼ã¿ã®åå¾ããã¹ã±ã¸ã¥ã¼ãªã³ã°ããã¤ãã©ã¤ã³å¦çããã¥ã¼ã¸ã®ãã¤ã³ãã£ã³ã°ã¾ã§ãAndroidãã¬ã¼ã ã¯ã¼ã¯ãè£ãããã«ä½¿ã£ã¦ãã¾ãã
ç»åã®ãªã¯ã¨ã¹ããè¦ç´ã
ç»åã¯JSONã®ã¬ã¹ãã³ã¹ã«æ¯ã¹ãã¨ãµã¤ãºã大ããã®ã§ãã¡ãã£ã¨ããå¤æ´ã§éä¿¡éã大ããæ¸ãããã¨ãã§ããå¯è½æ§ãããã¾ãããã®ãããã¢ããªã®éä¿¡éã®å¤§åãå ããç»åã®èªã¿è¾¼ã¿ã©ã¤ãã©ãªã¯éè¦ãªå½¹å²ãæ ã£ã¦ãã¾ãã
ããã©ã¼ãã³ã¹ãå·¦å³ããè¦ç´
ç»åèªã¿è¾¼ã¿ã©ã¤ãã©ãªã§ã¯ä»¥ä¸ã®è¦ç´ ãããã©ã¼ãã³ã¹ãå·¦å³ãã¾ãã
- å é¨ã§ä½¿ç¨ãããHTTPã¯ã©ã¤ã¢ã³ãã®ç¨®é¡ã¨è¨å®
- ãã£ãã·ã¥ã®ç®¡ç
- Executorã®è¨å®
- ãªã¯ã¨ã¹ãã®ã¹ã±ã¸ã¥ã¼ãªã³ã°
- Bitmapã®ç®¡ç
ãªã®ã§ããããä¸å¿ã«ãã©ã®ããã«ç»åãèªã¿è¾¼ã¾ãããã¨ããã®ãè¦ã¦ããã¾ãããä½ã使ãã«ãã¦ãããã£ãã·ã¥ãæå¹ã«ãªã£ã¦ãããã¨ãé©åãªåªå é ä½ãè¨å®ãã¦ãããã¯è¦ãã¨è¯ãã¨æãã¾ãã
Facebookã F8 㧠Fresco ã¨ããæ°ããç»åèªã¿è¾¼ã¿ã©ã¤ãã©ãªãçºè¡¨ãã¾ãããI/Oãã¦ã³ãã®å¦çã¨CPUãã¦ã³ãã®å¦çã§Executorã使ãåããããWebPã«å¯¾å¿ãã¦ããªã端æ«ã«ã¯JPEGã«ãã³ã¼ãããããã«ããããããªã©ãPicassoãGlideãä»ã®ç»åèªã¿è¾¼ã¿ã©ã¤ãã©ãªãç 究ãã¦ä½ããã¦ããã®ã§ãããããæ¤è¨¼ãããã¨æã£ã¦ãã¾ãã
ç»åã®ãã©ã¼ãããã¨ãµã¤ãº
Facebookã®iOSã¢ããªã¯Progressive JPEGãæ¡ç¨ãã¦ããï¼Faster Photos in Facebook for iOS | Engineering Blog | Facebook Codeï¼ããã§ãããAndroidã¯Progressive JPEGã«ã¯å¯¾å¿ãã¦ãã¾ããã§ãããããããFrescoã§Progressive JPEGã«å¯¾å¿ããããã«ãããããªã®ã§ãFacebookã¯ä¸¡æ¹ãã©ãããã©ã¼ã ã¨ãProgressive JPEGã«ç§»è¡ããã®ããããã¾ããã ç§ãã¡ã¯WebPã§ç»åãé ä¿¡ãã¦ãã¾ãã
- WebPã§ã¢ãã¤ã«ã¢ããªã®éä¿¡éãåçã«åæ¸ãã - ã¯ãã¯ãããéçºè ããã°
- How We Gain "Mobile First" Using WebP with ImageMagick // Speaker Deck
ã¾ããã¹ãã¼ããã©ã³ã®ãã£ã¹ãã¬ã¤ãµã¤ãºã¯æ§ã ã§ãå®ä¾¡ã§å°ãã端æ«ã¨ãNexus 10ã®ãããªå¤§ããªç«¯æ«ã§ã¯è¡¨ç¤ºã«å¿ è¦ãªç»åãµã¤ãºãéãã¾ãã ããã§ãç§ãã¡ã¯åçç»åå¤æãµã¼ãã¼ãS3ã®åã«ç½®ãã¦ãå®éã®ç»é¢ãµã¤ãºã«åããã¦å¤æããããã«ãªã¯ã¨ã¹ãããã¦ãã¾ãã ããã«å ãã¦ãåç·ã®å質ã«å¿ãã¦ä¿æ°ãæãã¦ç»åã縮å°ããã¨ãããã¨ããã¦ãã¾ãã
åç·ã®å質ãå¤å®ããã®ã«ãç§ãã¡ã®ã¢ããªã§ã¯éä¿¡ã®è¦æ ¼ãè¦ã¦ãã¾ããæ¥æ¬ã§ã¯4GããWiFiã®æ¹ãéãã®ã§ãããæµ·å¤ã§ã¯4Gã®æ¹ãéãã£ãããããã¨ãããã¾ãããã®ããè¦æ ¼ãè¦ãã®ã¯å³å¯ãªæ¹æ³ã§ã¯ããã¾ãããããæ軽ãªæ¹æ³ã§ã¯ããã¾ãã
ç»åã¯URLã§ãã£ãã·ã¥ãããã®ã§ãåç·ã®å質ã®å¤å®ãå¤ãã£ãã¨ãã«ãã£ãã·ã¥ã«ãããããªããªãã¨ãããã¨ãå¿ã«çãã¦ç½®ãå¿ è¦ãããã¾ããå質ã®å¤å®ãããã¨ãã«ã¯ã¹ãã¤ã¯ã«å¯¾å¿ããå¿ è¦ãããã¾ãããããã§ãªãã¦ããªãã©ã¤ã³æã«ç»åãåå¾ã§ããããã«ãååã®åç·ã®å質å¤å®ãä¿åãã¦ãã¾ãã
ä¿æ°ãããã¤ã«è¨å®ãããã¯ãç»åããã®ãµã¼ãã¹ã«ããã¦ã©ãã»ã©éè¦ãã«ä¾åãã¦ãã¾ããã¯ãã¯ãããã§ã¯éå»ã®èª¿æ»ãããã¬ã·ãç»åã¯ã¬ã·ãã決ããã¨ãã®éè¦ãªæ å ±ã§ããã¨ãããã¨ãåãã£ã¦ããã®ã§ãç»åãèãã¨æããããªãç¨åº¦ã®å¤ã«è¨å®ãã¦ãã¾ãã
APIè¨è¨ãè¦ç´ã
ã¬ã¹ãã³ã¹ã«Base64ã§ã¨ã³ã³ã¼ãããã10pxåæ¹ã®ãµã ãã¤ã«ãå«ããããã«ãã¦ãã¾ããããã«ãã£ã¦ã¬ã¹ãã³ã¹ãåãåã£ããç´ã¡ã«ç»åã®ãããªãã®ã表示ãããã¨ãã§ããããã«ãªãã¾ãã
ã¬ã¹ãã³ã¹ãåãåã£ãç´å¾ã®ç¶æ ã®æ¯è¼
ãããã¯ã¼ã¯ãä¸å®å®ã ã£ããé ãã¨ããã§ã¯ãAPIããªã¯ã¨ã¹ãããåæ°ãæ¸ããã®ãéè¦ã«ãªãã¾ãã ãã®ã¢ããªã§ã¯ãã¬ã·ããæ¢ãã¨ããè¡åã¯éè¦ãªä½é¨ã«ãªã£ã¦ãã¾ããã¦ã¼ã¶ã¼ã¯ã¬ã·ãéãè¡ã£ããæ¥ããããã®ã§ãããã®ã¹ãã¬ã¹ããªãã¹ãå°ãªãããããã«ãã¬ã·ãæ¤ç´¢ã®APIã§ã¬ã·ã詳細ç»é¢ã§å¿ è¦ãªãã¼ã¿ãè¿ãããã«ãã¦ãã¦ã¼ã¶ã¼ã®è¡åãé®ããªãããã«ãã¦ãã¾ãã ãã®æé©åã¯é¨åã¬ã¹ãã³ã¹ã«ããæé©åã¨ã®ãã¬ã¼ããªãã§ããï¼ã¨ãã質åãããã¾ããããå¿ è¦ãªæ å ±ã¯åå¾ããããã«ãã¦ãä¸å¿ è¦ãªæ å ±ã¯åãããã«ããã¨ãããã¨ãªã®ã§ããã¬ã¼ããªãã¨ãããã¨ã§ã¯ããã¾ããã
ããã¾ã§èª¬æãã¦ããæé©åã¯ãUXãæ大åãããã¨ãç®çã§è¡ã£ã¦ãã¾ãã ã©ã®ããã«ãã¼ã¿ã表示ããããã©ã®ãã¼ã¿ãå¿ è¦ã§ã©ã®ãã¼ã¿ãå¿ è¦ã§ãªããã¯ãå®éã®ã¦ã¼ã¹ã±ã¼ã¹ã«ä¾åããã®ã§ãã¦ã¼ã¶ã¼ã«ä¸çªè¿ãã¨ããã§éçºãã¦ããã¢ãã¤ã«ã¨ã³ã¸ãã¢ã«ã¨ã£ã¦ãAPIããããã¯ã¼ã¯ã®ã¹ãã«ãããããã¾ãã¾ãéè¦ã«ãªã£ã¦ããã¨ãã話ã§ç· ãã¾ããã
æµ·å¤ã®ã«ã³ãã¡ã¬ã³ã¹ã«åå ãã
ç§ã®ãã¼ã ã¯ä¸çåå°ã«åæ£ãã¦ãããæä¼ããã£ãããGitHubã¯ã©ããè±èªã§è¡ããã¦ãã¾ãããç§ã¯ãã¼ã ã®ä¸ã§ãç§ãä¸çªè±èªãè¦æã ã£ãã®ã§ãè±èªã®åå¼·ããã«ããã¤ããã§å¿åãã¾ããã
Droidcon Italyã«ã¤ãã¦
åå è æ°ã¯ãå»å¹´ã400人ãããã ã£ãã®ã«å¯¾ãã¦ãä»å¹´ã¯800人以ä¸ã«å¢ãããããªã®ã§ãéçºè ã®æ³¨ç®ãéã¾ã£ã¦ããã¨ãããã¨ãåããã¾ãã ã»ãã·ã§ã³ã®å 容ãæ¯ãè¿ãã¨ãDIãMV*ããªã¢ã¯ãã£ããªã©ã®ã¢ã¼ããã¯ãã£ã®è©±ãEspressoãRobotiumãRobolectricãªã©ã®ãã¹ãã®è©±ããããã¿ã¤ãã³ã°ããããªã¢ã«ãã¶ã¤ã³ããã©ã³ãã£ã³ã°ãªã©ã®ãã¶ã¤ã³ã®è©±ãªã©ãçéã®ããããªè©±ãèããã¨ãã§ãã¾ããã ã¤ã¿ãªã¢ã§ããiOSã¨åããã¶ã¤ã³ã§ä½ã£ã¦ããã¨è¨ããã¦å°ã£ã¦ãããã¨è¨ã£ã¦ãã¦ãæ¥æ¬ã¨ãã¾ãå¤ãããªããã ãªã¨æã£ã¦è¦ªè¿æã湧ãã¾ããã
Keynoteã®æ§å
ã«ã³ãã¡ã¬ã³ã¹ã§çºè¡¨ããããã«ãããã¨
Abstractãã¡ããã¨æ¸ã
å¢ãã§æ¸ãããéã£ãã¼ï¼ã¨ãã訳ã§ã¯ãªããæµ·å¤ã§è©±ãã®ã¯ä»åãåãã¦ã ã£ãã®ã§æ éã«èª¿ã¹ã¦å¿åãã¾ããã
- The Conference Speaker Investment - Jake Wharton
- We Are All Awesome!
- An Addendum About Conference Proposals
è±èªè«æã®æ¸ãæ¹ããã¯ãã«ã«ã©ã¤ãã£ã³ã°ã®æ¬ãèªãã§åå¼·ãã¦ãè±èªãå¾æãªäººã«ä½åãæ·»åãã¦ããããªãããä¸ã¶æã»ã©æãã¦Abstractãæ¸ãã¾ããã
å¾ã§ç¥ã£ããã¨ã§ããããã¼ã¯ãæ¡æããã¨ãã¯ããã®äººã®Twitterãããã°ãGitHubãä»ã®ã«ã³ãã¡ã¬ã³ã¹ã®ç»å£ã®çµé¨ã®æç¡ããå¤æãããããã§ãã ç§ã¯Twitterãããã°ã¯æ¥æ¬èªã§ãã£ã¦ããã®ã§ä¸å©ã§ããã¨ãããã¨ã¨ãæ¡æããããã¨ãåå è ã¯Abstractãèªãã§ã»ãã·ã§ã³ã決ããã®ã§éè¦ï¼ãªãã¨ãæ¡æããã¦ãAbstractãå¾®å¦ã ã¨é¨å±ãåã¾ããªãã¦å¯ããæãããããï¼ãªã®ã§ãAbstractã¯æéãæãã¦ä½ã価å¤ããã£ãã¨æãã¾ããã
çºè¡¨ã®ç·´ç¿ããã
ã¾ããAbstractããã¨ã«å稿ãæ¸ãèµ·ããã¾ããããã®ãã¨ã«ã¹ã©ã¤ããä½ãå§ããã¨åæã«è±èªã®çºé³ã®ç·´ç¿ãå§ãã¾ããããããã«çºé³ããã¾ããªãã¨ã¯æããªãã£ãã®ã§ããªãã¹ãã¹ã©ã¤ãã«æåãå ¥ãã¤ã¤ããæåã§åããããªããããªèª¿æ´ããã¾ããã åã以å¤ã®æ¹æ³ã使ã£ã¦ã§ãä¼ããªããã°ã¨æã£ã¦ããã¨ãã°ãã¥ã¼ã«å ¥ããããã¿ã¹ã¯ãã©ã¤ããµã¤ã¯ã«ã®å¤åã¨ã¨ãã«ãã©ã®ããã«ã¹ã±ã¸ã¥ã¼ãªã³ã°ãããã®ããã®èª¬æã§ã¢ãã¡ã¼ã·ã§ã³ã使ã£ãããã¦ãã¾ãã ããã¦ãã¹ã©ã¤ããåºæ¥ããé ã«å ¥ãã¾ã§ç¹°ãè¿ã声ã«åºãã¦ç·´ç¿ããã¾ããã
å½æ¥ã¯é¨å±ã«å ¥ããããªããããã«äººãæ¥ã¦ããã¦ãçµãã£ããã¨ã«ãç´ æ´ããããã¼ã¯ããããã¨ããã¨è¨ã£ã¦ããããã®ã§è¯ãã£ãã§ãã
ãããã«
ç´°ããããã©ã¼ãã³ã¹ã®tipsãå ±æãã¾ãããããã©ã¼ãã³ã¹ãã¥ã¼ãã³ã°ã«æ²¡é ããã¨å±ææé©ã«ããã£ã¦ãã¾ããã¡ãªã®ã§ãããå®éã«ã¯ã¦ã¼ã¶ã¼ã使ãã¨ãã«ã©ãè¦ãããã¨èããªããå ¨ä½ã®è¨è¨ããã¦ããã¨ãã話ããã¾ããã
å¼ç¤¾ã«ã¯æµ·å¤ã®ã«ã³ãã¡ã¬ã³ã¹ã§ã®çºè¡¨ã®çµé¨è ãå¤ãããä¸ã§ãçµé¨ã®æµ ãç§ãç¥è¦ã¨ç§°ãã¦ããã°ãæ¸ãã®ã¯æ°ãå¼ãã¾ããããæåã®ãã¼ãã«ãè¶ããã®ã¯å¤§å¤ã ã¨æãã®ã§ããããã人ã®ããã«ãªãã°ã¨æãã¾ãã
ã¡ãªã¿ã«æ¥æ¬ã§ã¯ä»é±æ«ã®4/25ã« DroidKaigi ã§ãããéå¶ã«æºãã£ã¦ãã人ããã¯æ¥æ¬ã§ãDroidconã®ãããªã³ãã¥ããã£ãä½ã£ã¦ããããã¨ãã話ãèãã¦ããã¾ãã®ã§ãåå ãã¦ä¸ç·ã«çãä¸ãã¦ããã¾ãããã