ãã¹ãŠã«ããããããããªããšãæ£ããéžæãããããšãã§ãããã¹ãŠã®äººã«ã
ããã¯ãStackoverflowã§åºãç¥ãããŠããCommonsWareã®Mark Murphyã«ããäžé£ã®èšäºã®ç¿»èš³ã§ãããæžç±ãThe Busy Coder's Guide to Android DevelopmentãããAndroid's Architecture Componentsãã®èè
ã§ããããŸãã äžéšã®çšèªã¯ç¹ã«ç¿»èš³ãããŠããŸããã
å
éšã¹ãã¬ãŒãž
Androidã¹ãã¬ãŒãžã¢ãã«ã«é¢ããŠã¯å€ãã®æ··ä¹±ããããŸãã ã¹ãã¬ãŒãžã¢ãã«ã§ã®Android 4.4ã®å€æŽã«ããæ··ä¹±ã¯å€§å¹
ã«æ¡å€§ãããã以æ¥ç¶æ³ã¯æ¹åããŠããŸããã Stack Overflowãåæ§ã®ãªãœãŒã¹ã«ã€ããŠã¯ãããŸããŸãªAndroidã¹ãã¬ãŒãžã¢ãã«ã«äººã
ãå®å
šã«ç²ŸéããŠããããã§ã¯ãªããšããç¡æ°ã®è³ªåããããŸãã
ãŠãŒã¶ãŒãå
éšã¹ãã¬ãŒãžãšèãããã®
ããã€ã¹ã®ã¢ãã«ã«å¿ããŠããŠãŒã¶ãŒã¯æçµçã«[èšå®]-> [ããã€ã¹ã®ã¹ãã¬ãŒãž]ãŸãã¯åçã®å Žæã«ã¢ã¯ã»ã¹ãã[å
éšã¹ãã¬ãŒãž]ã説æããç»é¢ã衚瀺ã§ããŸãã
ãŠãŒã¶ãŒã¯ãå
èµãã©ãã·ã¥ãã©ã€ãå
šäœããå
éšã¹ãã¬ãŒãžãã§ãããšèããŠããŸãã 幞ããªããšã«ãGoogleã¯Android 8.0ã§ãã®çšèªãå€æŽãå§ãããå
éšã¹ãã¬ãŒãžãã§ã¯ãªããäžè¬ã¹ãã¬ãŒãžãã«ç§»è¡ããŸããã
ãã ãããŠãŒã¶ãŒãããã€ã¹ãUSBã§æ¥ç¶ããŠããå ŽåããŠãŒã¶ãŒã¯Windowsãšã¯ã¹ãããŒã©ãŒãŠã£ã³ããŠãªã©ã®å Žæã«ãå
éšã¹ãã¬ãŒãžãã衚瀺ã§ããŸãã
Googleãå
éšã¹ãã¬ãŒãžãšèŠãªããã®
æ®å¿µãªããããŠãŒã¶ãŒã«è¡šç€ºãããå
容ã¯ãAndroid SDKããå
éšã¹ãã¬ãŒãžããšèŠãªããã®ãšåãã§ã¯ãªããããæ··ä¹±ãçããŸãã å
éšãªããžããªã®Androidããã¥ã¡ã³ããèªããšããã®èª¬æã¯å°ãªããšãäžæçã§ãïŒãã®èšäºã®å·ç以éãã³ã¡ã³ãããã¹ãã¯å€æŽãããŠããŸãïŒã
ãã¡ã€ã«ãããã€ã¹ã®å
éšã¡ã¢ãªã«çŽæ¥ä¿åã§ããŸãã ããã©ã«ãã§ã¯ãå
éšã¹ãã¬ãŒãžã«ä¿åãããŠãããã¡ã€ã«ã¯ã¢ããªã±ãŒã·ã§ã³ã«å¯ŸããŠãã©ã€ããŒãã§ãããä»ã®ã¢ããªã±ãŒã·ã§ã³ã¯ãŠãŒã¶ãŒïŒããã³ãŠãŒã¶ãŒïŒã«ã¢ã¯ã»ã¹ã§ããŸããã ãŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ãã¢ã³ã€ã³ã¹ããŒã«ãããšããããã®ãã¡ã€ã«ã¯åé€ãããŸãã
å®éãAndroid SDKã¯ããå
éšã¹ãã¬ãŒãžãããã¢ããªã±ãŒã·ã§ã³ããã¡ã€ã«ããã¹ãã§ããã¢ããªã±ãŒã·ã§ã³åºæã®ç¹å¥ãªãã£ã¬ã¯ããªãšããŠå®çŸ©ããŸãã ããã¥ã¡ã³ãã§ææ¡ãããŠããããã«ããããã®ãã¡ã€ã«ã¯ããã©ã«ãã§ã¢ããªã±ãŒã·ã§ã³ã®èªã¿åããšæžã蟌ã¿ãç®çãšããŠãããä»ã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯çŠæ¢ãããŠããŸãïŒäŸå€ïŒã«ãŒãåãããããã€ã¹ã§ã¹ãŒããŒãŠãŒã¶ãŒæš©éãæã€ãã¡ã€ã«ãããŒãžã£ãŒã§äœæ¥ããŠãããŠãŒã¶ãŒã¯ãã¹ãŠã«ã¢ã¯ã»ã¹ã§ããŸãïŒã
ã³ã³ããã¹ãã«ã¯ã次ã®ãããªå
éšãªããžããªãžã®ã¢ã¯ã»ã¹ãå¯èœã«ããããã€ãã®åºæ¬çãªã¡ãœããããããŸãã
getCacheDir()
getDir()
getDatabasePath()
getFilesDir()
openFileInput()
openFileOutput()
openOrCreateDatabase()
ãªã©ãä»ã®ã¡ãœããã¯ãããã«äŸåããŸãã SQLiteOpenHelper
ãSharedPreferences
ãªã©ãä»ã®ã¯ã©ã¹ããããã«äŸåããŸãã
å
éšã¹ãã¬ãŒãžã®ä¿åå Žæ...
2012幎以åã«ãªãªãŒã¹ãããããŸããŸãªããã°æçš¿ãStackOverflowã¬ã¹ãã³ã¹ãæžç±ãèŠããšãã¢ããªã±ãŒã·ã§ã³ã®ãå
éšã¹ãã¬ãŒãžãã/data/data/your.application.package.name
ããããšãéç¥ãããŸãã
ããã€ãã®Contextã¡ãœããã䜿çšãããšãå
éšã«Androidã«ãã£ãŠèªåçã«äœæããããã£ã¬ã¯ããªãããã€ããããŸãã ããšãã°ã getFilesDir()
ã¯ãã¢ããªã±ãŒã·ã§ã³ã®å
éšã¹ãã¬ãŒãžå
ã®files/
ãã£ã¬ã¯ããªãæãFile
ãªããžã§ã¯ããè¿ããŸãã
å
éšã¹ãã¬ãŒãžã¯ã©ãã«ä¿ç®¡ãããŸãã...æ®ãã®æé
ãã ããã¢ããªã±ãŒã·ã§ã³ã®å
éšã¹ãã¬ãŒãžã¯åžžã«æå®ãããå Žæã«ãããšã¯éããŸããã éçºè
ã«ãšã£ãŠããã®äžé£ã®ããã°æçš¿ããåŠã°ãªããã°ãªããªãã«ãŒã«ã1ã€ãããŸãã
ããŒãã³ãŒããã¹ã¯çµ¶å¯Ÿã«ããªãã§ãã ãã ã
æã
ãç§ã¯éçºè
ã次ã®ãããªããšãããŠããã®ãèŠãŸãïŒ
File f=new File("/data/data/their.app.package.name/files/foo.txt");
ããã¯ç¯çœªã§ã¯ãªããããã«æªãããšã§ããããã¯ééãã§ãã
æ£ããåãããããŠä»¥äžãæžãïŒ
File f=new File(getFilesDir(), "foo.txt");
ããã«éèŠãªããšã«ã å
éšã¹ãã¬ãŒãžã¯åžžã«åãå Žæã«ãããšã¯éããŸãã ã ã¿ãã¬ããçšã®Android 4.2ãšæºåž¯é»è©±çšã®Android 5.0 以é ãåå¥ã®ãŠãŒã¶ãŒãããã¡ã€ã«ïŒåå¥ã®ãŠãŒã¶ãŒãããã¡ã€ã«ïŒã®æŠå¿µãããããšã¯æ³šç®ã«å€ããŸãã åãŠãŒã¶ãŒã¯ãç¬èªã®ãå
éšã¹ãã¬ãŒãžããååŸããŸãã äžèšã®ãã£ã¬ã¯ããªã¯åŒãç¶ããã©ã€ããªãŠãŒã¶ãŒã«äœ¿çšãããŸãããã»ã«ã³ããªã¢ã«ãŠã³ãã«äœ¿çšãããããšã¯ä¿èšŒãããŸããã
å
éšã¹ãã¬ãŒãžã®æ¢çŽ¢
Android Studio 3.0+ã®Device File ExplorerããŒã«ã¯ããšãã¥ã¬ãŒã¿ãŒã®ãã¹ãŠã®å
éšã¹ãã¬ãŒãžãšãå®çšŒåããã€ã¹ã®ãããã°ãããã¢ããªã±ãŒã·ã§ã³ã®å
éšã¹ãã¬ãŒãžã衚瀺ã§ããŸãã
ã³ãã³ãã©ã€ã³ã§ã run-as
ãªãã·ã§ã³ãæå®ããŠadb
ã䜿çšã§ããŸãã
ããšãã°ããã©ã€ããªãŠãŒã¶ãŒã®å
éšã¹ãã¬ãŒãžããéçºãã·ã³ã«ããŒã¿ããŒã¹ãã¢ããããŒãããã«ã¯ã次ã䜿çšã§ããŸãã
adb shell 'run-as your.application.package.name cp /data/data/your.application.package.name/databases/dbname.db /sdcard'
以äžã«æ³šæããŠãã ããïŒ
- å€éšã¹ãã¬ãŒãžãããã€ã¹ã«ããŠã³ããããå Žæã«å®å
ãå€æŽããå¿
èŠããããŸãïŒããã§ã¯
/sdcard/
ãšããŠè¡šç€ºãããŸãããããã¯ãã¹ãŠã®ããã€ã¹ã§åãã§ã¯ãããŸããïŒ - å€ãããã€ã¹ã§ã¯ã
cp
代ããã«cat
ã䜿çšããå¿
èŠãããå ŽåããããŸã - ãã¡ã€ã«ãå€éšã¹ãã¬ãŒãžã«é
眮ããããã
adb pull
ã䜿çšããŠã³ã³ãã¥ãŒã¿ãŒã«ããŠã³ããŒãããããä»ã®éåžžã®æ¹æ³ïŒããšãã°ãããã€ã¹ããã£ã¹ã¯ãšããŠããŠã³ãããïŒã§ã¢ã¯ã»ã¹ã§ããŸãã
å
éšã¹ãã¬ãŒãžã®å¶é
å€ãAndroid 1.xããã³2.xããã€ã¹ã§ã¯ãå
éšã¹ãã¬ãŒãžã¯éåžžãã¡ã€ã«ã·ã¹ãã ã®å°çšã»ã¯ã·ã§ã³ã«ããããã®ã»ã¯ã·ã§ã³ã¯éåžžéåžžã«å°ãããã®ã§ããã å
ã®Androidããã€ã¹ã§ããHTC DreamïŒå¥åãT-Mobile G1ïŒã«ã¯ããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšããããã®70 MBã®å·šå€§ãªå
éšã¡ã¢ãªããããŸããïŒããã¯ã¿ã€ããã¹ã§ã¯ãããŸãããåœæã¯ã¡ã¢ãªãã¡ã¬ãã€ãåäœã§æž¬å®ããŸããïŒã
2.3ããã€ã¹ãç»å ŽãããŸã§ã«ãå
éšã¹ãã¬ãŒãžã®ãµã€ãºã¯1 GBã«ãªããŸããã
å
éšã¹ãã¬ãŒãžã倧ãããªãã«ã€ããŠãAndroid 3.0ã¯ã¹ãã¬ãŒãžã¢ãã«ãå€æŽããŸããã 4 GBã8 GBã16 GBãªã©ãšããŠã¢ããã¿ã€ãºããããã€ã¹ã®å Žå ã¹ãã¬ãŒãžã¹ããŒã¹ãéåžžãå
éšã¹ãã¬ãŒãžã«å©çšå¯èœãªãã¹ãŠã®ã³ã³ãã³ãïŒæ¢åã®ã³ã³ãã³ããé€ãïŒããããŸããã å€éšã¹ãã¬ãŒãžã«é¢ãã以äžã®æçš¿ã§ãAndroid 3.0ã§ã®å€æŽç¹ãšã¹ãã¬ãŒãžã¢ãã«ãžã®åœ±é¿ã«ã€ããŠèª¬æããŸãã
Android 1.xããã³2.xã®å Žåãå
éšã¹ãã¬ãŒãžã¯å°ããªãã¡ã€ã«ã«ã®ã¿æå¹ã§ãããä»ã®ãã¹ãŠã«ã¯å€éšã¹ãã¬ãŒãžã䜿çšããå¿
èŠããããŸããã Android 3.0以éã¯ãã»ãšãã©ã®ããã€ã¹ãšã»ãšãã©ã®ãŠãŒã¶ãŒã«ãšã£ãŠãå
éšã¹ãã¬ãŒãžã¯ãä»ã®ã¢ããªã±ãŒã·ã§ã³ã«ããéåžžã®äœ¿çšãç®çãšããªããã¡ã€ã«ããã¢ããªã±ãŒã·ã§ã³ã«é¢ä¿ãªããŠãŒã¶ãŒãã¢ã¯ã»ã¹ã§ãããã¡ã€ã«ã«æé©ã§ãã ãã ããäžéšã®çµéšè±å¯ãªãŠãŒã¶ãŒã¯ããªã³ããŒããã©ãã·ã¥ã§ãããä¿åããããã®ã«ã¯äžååã§ããããããªã ãŒããã«ã¹ãã¬ãŒãžã«åãæ¿ããŸã...ããã¯ã ã¯ãŒã ã®çŒ¶ã§ãïŒã¡ã¢ïŒ
å
éšã¹ãã¬ãŒãžã«é¢ãããããã質å
World-ReadableãŸãã¯World-Writeableã®å
éšã¹ãã¬ãŒãžã«ãã¡ã€ã«ãäœæããå¿
èŠããããŸããïŒ
ããã$ GODSããããã FileProvider
ã䜿çšãããã®ã³ã³ãã³ããContentProvider
ã®å®è£
ã§ContentProvider
ãŸãã ãã®åŸãå°ãªããšããããªãã®ããŒãžã§ã³ãšã¯ç°ãªããã·ã¹ãã å
ã®ã¢ããªã±ãŒã·ã§ã³ããããã®ãã¡ã€ã«ãç Žå£ããå¯èœæ§ãããå ŽåãAndroidèš±å¯ã·ã¹ãã ã䜿çšããŠãããã®ãã¡ã€ã«ãžã®ã¢ã¯ã»ã¹ãå¶åŸ¡ããæ©äŒããããŸãã
ããŠã android:sharedUserId
ã©ãã§ããïŒ
ç§ã¯ã¢ããã€ã¹ããŸããã
android: sharedUserId
ã¯ãã¢ããªã±ãŒã·ã§ã³ã«äœ¿çšããããŠãŒã¶ãŒã®è«çèå¥åã瀺ããããã§ã¹ãã«é
眮ã§ããå±æ§ã§ãã åã眲åããŒã§çœ²åããåãandroid:sharedUserId
ãèŠæ±ãããã€ã³ã¹ããŒã«ãããŠããä»ã®ã¢ããªã±ãŒã·ã§ã³ã¯ãã»ãã¥ãªãã£ã®èŠ³ç¹ããåãLinuxãŠãŒã¶ãŒã䜿çšããŸãã ãã®çµæããããã®2ã€ã®ã¢ããªã±ãŒã·ã§ã³ã¯åãLinuxãŠãŒã¶ãŒã«å±ããããããããã®2ã€ã®ã¢ããªã±ãŒã·ã§ã³ã¯ãäºãã®ãã¡ã€ã«ãå
責ããŠåäœããããšãã§ããŸãã
ãã®å±æ§ã¯ãããã€ã¹ã¡ãŒã«ãŒãã¢ãã€ã«ãªãã¬ãŒã¿ãŒããŸãã¯å€æŽãããROMãã¡ãŒã ãŠã§ã¢ã®éçºè
ã«ãã£ãŠäºåã«ããŒãããããœãããŠã§ã¢ã¹ã€ãŒããªã©ãããªã€ã³ã¹ããŒã«ãããã¢ããªã±ãŒã·ã§ã³ã察象ãšããŠããŸãã ç¹ã«ãã¢ããªã±ãŒã·ã§ã³ã1åã€ã³ã¹ããŒã«ãããšããã«ãæ¢åã®ãã¡ã€ã«ãžã®ãŠãŒã¶ãŒã®ã¢ã¯ã»ã¹ããããã¯ããã«ã android:sharedUserId
å€android:sharedUserId
å€æŽããããšã¯ã§ããŸãã...ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŸãã
è€æ°ã®ããã»ã¹ããã¡ã€ã«ã«ã¢ã¯ã»ã¹ããå ŽåãããŸããŸãªãªã¹ã¯ããããŸãã SQLiteãªã©ã®äžéšã®ãµãã·ã¹ãã ã«ã¯ããã®åé¡ã解決ããããã®ããžãã¯ãçµã¿èŸŒãŸããŠããŸãã ãã ãããã¡ã€ã«ãžã®ã¢ã¯ã»ã¹ãèªåã§æŽçããå ŽåïŒããšãã°ã File
ããã³Java I / Oã䜿çšïŒãåæã¢ã¯ã»ã¹ã§äœããè¡ãå¿
èŠããããããã¯å°é£ã§ãã
ãŸããããã¢ããªã±ãŒã·ã§ã³ã䜿çšããŠãããã¡ã€ã«ãåé€ããããšã«ãããããã¢ããªã±ãŒã·ã§ã³ãã¢ã³ã€ã³ã¹ããŒã«ãããç¶æ³ãåŠçããå¿
èŠããããŸãã ããšãã°ãã¢ããªã±ãŒã·ã§ã³ãšãã©ã°ã€ã³ã®ã»ããã䜿çšããããã¢ã³ãã¹ããŒã¯ã¢ãã«ã§ã¯ãããããããã»ã©å±éºã§ã¯ãããŸããã ã¢ããªã±ãŒã·ã§ã³ãããå
¬å¹³ã§ããä»ã®ã¢ãã«ã§ã¯ããŠãŒã¶ãŒãå¥ã®ã¢ããªã±ãŒã·ã§ã³ãåé€ããããšã決ãããããšãã£ãŠãã¢ããªã±ãŒã·ã§ã³ã®ããŒã¿ã倱ãäœè£ã¯ãããŸããã
æåŸã«ãããªãã¯æªæ¥ãäœãããããããšãã§ããããç¥ããŸããã çŸåšãã¢ããªã±ãŒã·ã§ã³ã¹ã€ãŒããå¯çµåã¹ã€ãŒããšããŠè¡šç€ºã§ããŸãã ãããã®ã¢ããªã±ãŒã·ã§ã³ã賌å
¥ããããäŒç€Ÿãè²·åããããã人ã¯ãä»ã®æ¹æ³ãåžæãããããããŸããã ContentProvider
ãªã©ãæ¥ç¶ãContentProvider
ããŒã¿å
±ææ©èœã䜿çšãããšãæè»æ§ãContentProvider
ãŸãã çæ³çãªäžçã§ã¯ãã¢ããªã±ãŒã·ã§ã³ã¯ä»ã®ã¢ããªã±ãŒã·ã§ã³ãããªãä¿¡é Œã§ãããã®ãšããŠæ±ãå¿
èŠããããŸãããèªåã®WebãµãŒãã¹ã®ããã«åžžã«ã¢ã¯ã»ã¹å¯èœãªãªãœãŒã¹ãšã¯éããŸããã
ã«ãŒãåãããããã€ã¹ã®ãŠãŒã¶ãŒãå
éšã¹ãã¬ãŒãžã®ãã¡ã€ã«ã«ã¢ã¯ã»ã¹ã§ããªãããã«ããã«ã¯ã©ãããã°ããã§ããïŒ
å
éšã¹ãã¬ãŒãžã«ãã¡ã€ã«ãå
¥ããªãã§ãã ããã ã«ãŒãåãããããã€ã¹ã®ãŠãŒã¶ãŒã¯ãããã€ã¹ã§å¿
èŠãªãã®ã«ã¢ã¯ã»ã¹ã§ããããããŠãŒã¶ãŒãããŒã¿ã«ã¢ã¯ã»ã¹ã§ããªãããã«ããå¯äžã®æ¹æ³ã¯ãããã€ã¹ã«ããŒã¿ãä¿æããªãããšã§ãã
äžéšã®éçºè
ã¯ãã«ãŒãåãããããã€ã¹ã®ãŠãŒã¶ãŒããããã®ãã¡ã€ã«ã䜿çšã§ããªãããã«ãããŒãã³ãŒãããããã¹ã¯ãŒãã§ãã¡ã€ã«ãæå·åããããšããŸãã ããã«ãããçæéã§ã¹ããŒããã³ãã®å¹æãåŸãããŸãã å¿
èŠãªã®ã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãªããŒã¹ãšã³ãžãã¢ãªã³ã°ã«é¢å¿ã®ãã1人ã ãã§ããããã®ãã¡ã€ã«ã埩å·åããæ¹æ³ã決å®ãããã®æ¹æ³ã«ã€ããŠããã°ãŸãã¯ãã©ãŒã©ã ã«ã¡ãã»ãŒãžãæžã蟌ã¿ãŸããã
äžè¬ã«ãã«ãŒãåãããããã€ã¹ãæã£ãŠãã人ã¯æ¯èŒçå°ãªã-ç§ã¯ãããã1ïŒ
æªæºãšè©äŸ¡ããŠããã ç§èŠãã«ãŒãåãããããã€ã¹ããä¿è·ããæéãç¡é§ã«ããã®ã§ã¯ãªããããè¯ãã¢ããªã±ãŒã·ã§ã³ã®äœæã«ãšã³ãžãã¢ãªã³ã°äœæ¥ãéäžããããšã«ãããããªãã¯ããæåããŸãã