
å æ¥ãAndroid Studioã®ããŒãžã§ã³ãçå®ã«çµ±äžãç®æããŠããããšã«æ°ä»ããã®ã§ããã®ããŒã«ãæ€èšããããšãèããŸããã éå±ããªãããã«ãç§ã¯èªåã®çµéšãšéããã¬ãŒãããã¥ãŒããªã¢ã«èšäºã®åœ¢ã§å ±æããããšã«ããŸããã
ç§ã¯ãAndroidéçºã®ç¬¬äžäººè ã§ã¯ãªãããšãããã«äºçŽãããã®ã§ãããã¹ãã«ã¯å瀺ã¯ãããŸããã ãã ããWindowsã§ã®Android Studioã®ã€ã³ã¹ããŒã«ãšèšå®ãããã³Android NDKã䜿çšããç°¡åãªãããžã§ã¯ãã®äœæã«ã€ããŠã¯ãé ãè¿œã£ã説æããããŸãã
ãŸããäºåã«èŠåããŸããã»ãšãã©ãã¹ãŠã®ã¹ã¯ãªãŒã³ã·ã§ãããšããã€ãã®ã³ãŒããªã¹ãããã¿ãã¬ã®äžã«é ããŠããŸããããèšäºã¯å€§ãããŠéåžžã«è©³çŽ°ã§ããããšãããããŸããïŒæ£çŽãèªåã§ã¯æåŸ ããŠããŸããã§ããïŒã
å·çæç¹ã§ã¯ãAndroid Studioã®ææ°ããŒãžã§ã³ã¯0.8.1ã§ãããã以éã®ããŒãžã§ã³ã§ã¯ãå¿ èŠãªã¢ã¯ã·ã§ã³ã以äžã§èª¬æããã¢ã¯ã·ã§ã³ãšç°ãªãå ŽåããããŸãïŒããè¯ãããšãé¡ã£ãŠããŸãïŒ
NDKã®ã¿ã«èå³ããã人åã
NDKã®Gradleèšå®ã®ã¿ã«é¢å¿ããã人åã
Android Studioãã€ã³ã¹ããŒã«ããŠæ§æãã
1. JDKïŒJava Development KitïŒããã³JREïŒJava Runtime EnvironmentïŒãã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã
以åã¯ãAndroid SDKã¯JDKããŒãžã§ã³6ã®ã¿ããµããŒãããŠããŸããããçŸåšã¯éå»ã®ãã®ã§ãã 7ãš8ãããµããŒããããŠããŸã ïŒå°ãªããšãã JAVA_HOMEããã³Android Studioã®èšå®ã§æå®ãã8çªç®ã®ããŒãžã§ã³ã§ãããåââé¡ã¯çºçããŸããã§ããïŒã
ã¹ã¿ãžãªèªäœãå®è¡ããã«ã¯JREãå¿ èŠã§ãã 圌女ã¯ããŒãžã§ã³7ã䜿çšããŸãã
Oracle Webãµã€ãããã 6ãè¶ ããJDKããã³JREããŒãžã§ã³ãããŠã³ããŒãã§ããŸãã
çŸåšã JAVA_HOMEå€æ°ã¯èšå®ã§ããªãããã§ããAndroidStudioã§ã¯ãèšå®ã§JDKãžã®ãã¹ãèŠå®ããŠããããã§ãã ããããç§ã¯ãããã€ã³ã¹ããŒã«ããŸããã ãããè¡ãã«ã¯ã次ã®ãã®ãå¿ èŠã§ãã
- [ã³ã³ãããŒã«ããã«] \ [ã·ã¹ãã ãšã»ãã¥ãªãã£] \ [ã·ã¹ãã ]ã«ç§»åããå·ŠåŽã§[ 詳现ãªã·ã¹ãã ãã©ã¡ãŒã¿ ]ãéžæããéãããã€ã¢ãã°ã§[ ç°å¢å€æ° ]ãã¿ã³ãèŠã€ããŸãã
- ã·ã¹ãã å€æ°ãŸãã¯ãŠãŒã¶ãŒå€æ°JAVA_HOMEãäœæããJDKãžã®ãã¹ãæå®ããŸãã ãã®ãã¹ã¯CïŒ\ Program Files \ Java \ jdk1.8.0_05ã«ç€ºãããŠããŸãã
äœããã®çç±ã§JDKããŒãžã§ã³6ãå¿
èŠãªå Žå
ç»é²ãªãã®JDK 6ã¯ã次ã®ããã«ããŠååŸã§ããŸãã
2. Android SDKãã€ã³ã¹ããŒã«ãããŠããå Žåã
Android Studioã«ã¯Android SDKãä»å±ããŠããŸãã ãããŠãç¹ã«ããã䜿çšãããå Žåãå Žåã«ãã£ãŠã¯å¥åŠãªããšãèµ·ãããŸãã ããšãã°ãSDK Managerãä»ããŠSDKãæŽæ°ãããšããã¡ã€ã«ã®äžéšãå€ããã©ã«ããŒã«æžã蟌ãŸãããã®ãã©ã«ããŒãåé€ãããšåé¡ãçºçããŸããã ã¬ãžã¹ããªããŒãå€ããã©ã«ããžã®ãã¹ãšå ±ã«ä¿åãããŠããããããããçºçããå¯èœæ§ãé«ãã§ãã ãããã£ãŠãã¬ãžã¹ããªãã¯ãªãŒã³ã¢ããããããšã¯çã«ããªã£ãŠããŸãã ãããè¡ãã«ã¯ãregedit.exeãå®è¡ãã32ããããã·ã³ã®å Žåã¯HKEY_LOCAL_MACHINE \ Software \ Android SDK Toolsã ã64ããããã·ã³ã®å Žåã¯HKEY_LOCAL_MACHINE \ Software \ Wow6432Node \ Android SDK ToolsãèŠã€ããŠã Android SDK Toolsãåé€ããŸã ã ã·ã¹ãã ã®ã¬ãžã¹ããªã«ãã®ãããªããŒããªãå Žåããã¹ãŠãæ£åžžã«æ©èœããŠããŸãã
ANDROID_SDK_HOMEç°å¢å€æ°ãèšå®ãããŠããŠãå€ãã€ã³ã¹ããŒã«ã瀺ãããã«ãããå ŽåãAndroid Studioã®ã»ããã¢ããæã«SDKãžã®ãã¹ã衚瀺ããããããçè«çã«ã¯ããã¯åé¡ã«ãªããŸããã ãã®å€æ°ãAndroid SDKã«å«ãŸããŠããã¢ããªã±ãŒã·ã§ã³ã®ããããã§äœ¿çšãããšãåé¡ãçºçããå¯èœæ§ããããŸãã
3.ããã§ãAndroid Studioã®ã€ã³ã¹ããŒã«ã«é²ã¿ãŸãã
å ¬åŒããŒãžããã·ã¹ãã çšã®Android StudioãããŠã³ããŒãããŠã€ã³ã¹ããŒã«ããå¿ èŠããããŸãã ããã©ã«ãã§ã¯ããç§ã ãã«ã€ã³ã¹ããŒã«ããéžæããå Žåã \ Users \ <user> \ AppData \ Local \ Android \ android-studio \ã«é 眮ãããŸãã å¥ã®ãã©ã«ããéžæã§ããŸãã
ã€ã³ã¹ããŒã«åŸãAndroid Studioãå®è¡ããŸãã
ç§ãã¡ã¯ãã®ãããªå¯Ÿè©±ãèŠã

ãã®äžã§æ¬¡ã®ããšãè¡ããŸãã
- æŽæ°ã確èªããå¿ èŠã«å¿ããŠæŽæ°ããŸãïŒãããè¡ãã«ã¯ããŠã£ã³ããŠã®äžéšã«ãã[ ç¢ºèª ]ãã¯ãªãã¯ããŸãïŒ
- [æ§æ]-> [SDKãããŒãžã£ãŒ]ã«ç§»åãïŒ å¿µã®ããïŒSDKãããŒãžã£ãŒã¯Android Studioã®äžéšã§ã¯ãªããAndroid SDKã®ãŠãŒãã£ãªãã£ã§ãïŒãå¿
èŠãªãã®ãã€ã³ã¹ããŒã«ããŸãã å¿
èŠãªãã®ãããããªãå Žåã¯ã圌ãæäŸãããã®ããã¹ãŠã€ã³ã¹ããŒã«ããããšããå§ãããŸãã
ããã¯åœŒãç§ãšäžç·ã«ã€ã³ã¹ããŒã«ãããã®ã§ã
- 次ã«ãããŒããDarculaã«å€æŽããŸããã
æ¹æ³[æ§æ] - > [èšå®]-> [å€èŠ³]ã«ç§»åããå¿ èŠããããŸãã
- 次ã«ã [æ§æ]-> [ãããžã§ã¯ãã®ããã©ã«ã]-> [ãããžã§ã¯ãæ§é ]ã«ç§»åããSDKã®å ŽæãAndroid SDKãžã®ãã¹ã«å€æŽããJDKã®å ŽæãJDKãžã®ãã¹ã«å€æŽããŸãã
ã¹ã¯ãªãŒã³ã·ã§ãã
ãããžã§ã¯ãäœæ
1.æ°ãããããžã§ã¯ã
æ°èŠãããžã§ã¯ããã¯ãªãã¯ããŸãã
ãã®ãããªå¯Ÿè©±ã衚瀺ãããŸã

ãã®äžã§ä»¥äžãèšå®ã§ããŸãïŒ
- ãããžã§ã¯ãåïŒããã©ã«ãã§æ®ããïŒ My Application ïŒ
- äŒç€Ÿã®ãã¡ã€ã³ãããã©ã«ãã¯<username> .example.comã§ãç§ã®å Žåã¯one.example.comãšããŒã¯ãããŠããŸã
- ããã±ãŒãžåã¯ãå³åŽã®[ ç·šé ]ãã¯ãªãã¯ããŠç·šéããããšãã§ããŸãã ããã©ã«ãã§ã¯ããããžã§ã¯ãåãšäŒç€Ÿãã¡ã€ã³ããçæãããcom.exampleã<username>ã<ã¹ããŒã¹ãªãã®å°æåã®ãããžã§ã¯ãå>ã®ããã«èŠããã®ã§ã com.example.markedone.myappã«å€æŽããŸããã
- ãããžã§ã¯ããä¿åããããã¹ã ããããçš®é¡ã®ãã¹ããããžã§ã¯ãçšã«ãã©ã«ããŒãæå®ããŸããã
ãã¹ãŠãå ¥åãããã ã次㞠ããã¯ãªãã¯ããŸãã
2.ãã©ãŒã ãã¡ã¯ã¿ãŒ
ãã®ãã€ã¢ãã°ã§ãã¿ãŒã²ãããã©ãããã©ãŒã ãšAPIãéžæããŸãã
ãã€ã¢ãã°ã¯æ¬¡ã®ããã«ãªããŸã

ããã§ã¯ããã©ã«ãã§ãã¹ãŠã®ãã®ãæ®ããŸããïŒPhone and Tabletãš4.0.3 IceCreamSandwichã äžéšã®ãã©ãããã©ãŒã ã®APIãã€ã³ã¹ããŒã«ãããŠããªãå Žåããã€ã³ã¹ããŒã«ãããŠããŸããããšããã¡ãã»ãŒãžã衚瀺ãããŸãã ããšãã°ãã¹ã¯ãªãŒã³ã·ã§ããã«èŠãããããã«ãGoogle Glassã®ã©ã€ãã©ãªã¯ã€ã³ã¹ããŒã«ãããŠããŸããïŒããã¯SDKãããŒãžã£ãŒã䜿çšããŠå®è¡ã§ããŸãïŒã
ãŸããç§ãéžæããã®ã«åœ¹ç«ã€ãã¯ãŒã«ãªããšã«æ³šæãæã£ãŠãã ãã
Help me chooseãã¯ãªãã¯ãããš ããã®ãããªèå³æ·±ããã€ã¢ãã°ãéããŸãã
APIã®ç¹å®ã®ããŒãžã§ã³ãéžæããéã®ããã€ã¹ã®ã«ãã¬ããžã«é¢ããæ å ±ãå«ãŸããŠããŸãã APIããŒãžã§ã³ã®é·æ¹åœ¢ã¯ã¯ãªãã¯å¯èœã§ã;ãããã§å©çšå¯èœãªæ©èœã®ãªã¹ãã¯å³åŽã«è¡šç€ºãããŸãã ããšãã°ãããã©ã«ãã®ã¢ã€ã¹ã¯ãªãŒã ãµã³ãã€ããã®å ŽåïŒ

APIã®ç¹å®ã®ããŒãžã§ã³ãéžæããéã®ããã€ã¹ã®ã«ãã¬ããžã«é¢ããæ å ±ãå«ãŸããŠããŸãã APIããŒãžã§ã³ã®é·æ¹åœ¢ã¯ã¯ãªãã¯å¯èœã§ã;ãããã§å©çšå¯èœãªæ©èœã®ãªã¹ãã¯å³åŽã«è¡šç€ºãããŸãã ããšãã°ãããã©ã«ãã®ã¢ã€ã¹ã¯ãªãŒã ãµã³ãã€ããã®å ŽåïŒ

次ãžãã¯ãªãã¯ããŸãã
3.ã¢ã¯ãã£ããã£ãè¿œå ãã
次ã®ç»é¢ã§ãã¢ã¯ãã£ããã£ãéžæããããã«æ±ããããŸã

åœç¶ããã«ã¹ã¯ãªãŒã³ã¢ã¯ãã£ããã£ãééã§ãããéžæããŸããã å¥ã®ã¢ã¯ãã£ããã£ãéžæã§ããŸããããã®å ŽåãJavaãœãŒã¹ã¯ç°ãªããJavaããã®ãã€ãã£ãã¡ãœããåŒã³åºããèªåã§è¿œå ããå¿ èŠããããŸãïŒãã ããè€éãªããšã¯äœããããŸããïŒã
éžæããŠã ã次㞠ããã¯ãªãã¯ããŸãã
次ã®ãã€ã¢ãã°ã衚瀺ãããŸã

ããã§ã¯ãã¢ã¯ãã£ããã£ãæ§æããããã«æåŸ ãããŠããŸãã
- ã¢ã¯ãã£ããã£å -ã¯ã©ã¹ã®ååãããã©ã«ãã§ã¯FullscreenActivityã®ãŸãŸã«ããŸãã ã
- ã¬ã€ã¢ãŠãå -UIãšãã£ã¿ãŒã®ã¬ã€ã¢ãŠãã®ååãããã©ã«ãã®ãŸãŸã«ããŸãã
- ã¿ã€ãã« -ããã©ã«ãã¯FullscreenActivityã§ãã¹ããŒã¹ãèšå®ããŸãïŒ Fullscreen Activity ã
å®äºãã¯ãªãã¯ããŸãã
ãã®çµæããããžã§ã¯ããéãã¯ãã§ã

çµã¿ç«ãŠãšæã¡äžã
1.ãããžã§ã¯ãã®çµã¿ç«ãŠ
ã¡ãã¥ãŒãããã«ããéå§ããŸãïŒ ãã«ã->ãããžã§ã¯ãã®äœæ ïŒã¡ãã¥ãŒé ç®ã«ã¯ã¢ã€ã³ã³ãšãããããŒã衚瀺ããããããããããç°¡åã«åŠçã§ããŸãïŒã
æåã®ãã«ãäžã«ãšã©ãŒãçºçããŸããïŒ

ããã¯MyApplication / app / build.gradleãã¡ã€ã«ã§çºçããŸãã
åé¡ãäœã§ããããç解ããã«ã¯ãäžç·ãåŒããŠãã ããïŒ

ç°¡åã§ããããã§ã¯ããŒãžã§ã³19ã瀺ãããŠãããã€ã³ã¹ããŒã«ãããŠããã®ã¯20ã®ã¿ã§ãããããžã§ã¯ãèšå®ã§ã¯ãã¿ãŒã²ãããšããŠ20ãæå®ããŸããã çªå·ãå€æŽããã ãã§ãïŒ

ã芧ã®ãšãããã¹ã¿ãžãªã¯ããã«ã€ããŠèœã¡çãããããã«æ°ããããŒãžã§ã³ã®ã€ã³ã¹ããŒã«ãææ¡ããŠããŸãã ããããä»ã¯å¿ èŠãããŸããã
Build-> Make Projectãå床å®è¡ããŸã ã ä»åã¯ãã¹ãŠããŸãšããŸããã ç§ãããªããããããããšãé¡ã£ãŠããŸãã
2.ä»®æ³ããã€ã¹ãæ§æãã
ãšãã¥ã¬ãŒã¿ã§ããã°ã©ã ãå®è¡ããã«ã¯ãä»®æ³ããã€ã¹ãæ§æããå¿ èŠããããŸãã [ããŒã«]-> [Android]-> [AVDãããŒãžã£ãŒ]ã«ç§»åããŸã ïŒããã¯ãSDKãããŒãžã£ãŒãšåæ§ãAndroid SDKã®ãŠãŒãã£ãªãã£ã§ãïŒã æåã®ã¿ãã§ããAndroid Virtual Deviceãå¿ èŠã§ããããã¯ããã©ã«ãã§éããŠããŸãã å³åŽã«ãã[ äœæ... ]ãã¿ã³ãèŠã€ããŠã¯ãªãã¯ããŸãã
ä»®æ³ããã€ã¹ã®ã»ããã¢ãããã€ã¢ãã°ããã¯ã¹ã衚瀺ãããŸãã

- AVD Name-ä»®æ³ããã€ã¹ã®ååã TestPhoneãšå ¥åããŸãã ã ãããããã®åŸãç§ã¯ã¿ãã¬ãããéžæããŸããããååãå€æŽãå§ããŸããã§ããã
- ããã€ã¹ -ããŸããŸãªäºåå®çŸ©ãããããã€ã¹èšå®ãå€ã¯ããããããŠã³ãªã¹ãã§äœ¿çšå¯èœãªãã®ããéžæããã 7 '' WSVGAïŒã¿ãã¬ããïŒïŒ1024 x 600ïŒmdpiïŒãéžæããŸãã ã
- ã¿ãŒã²ããã¯APIã®ã¿ãŒã²ããããŒãžã§ã³ã§ãããSDKã§å©çšå¯èœãªãã®ã®ã¿ãå©çšå¯èœã§ãã SDK Managerããã€ã³ã¹ããŒã«ã§ããŸãã
ååã®Wã¯Wearãæå³ãããŠã§ã¢ã©ãã«ããã€ã¹ïŒæèšãªã©ïŒã®ããŒãžã§ã³ã§ãã ãããžã§ã¯ãèšå®ã§ãã¿ãã¬ãããšé»è©±ããéžæãããããå¥ã®ã¢ã€ãã ãå¿ èŠã§ãïŒ Android LïŒãã¬ãã¥ãŒïŒ-APIã¬ãã«L
- CPU / ABI-ãã©ãããã©ãŒã ãç§ã¯ARMïŒarmeabi-v7aïŒãéžæããŸãã ã
- ããŒããŒã -ããã§ã¯ããã¹ãŠãæ確ã ãšæããŸãã
- ã¹ãã³ -ããã€ã¹ã®å€èŠ³ã§ãããšç解ããŠããããã«ã Deviceã®èšå®å€ã«äžèŽããå€ãéžæããŸããïŒ WSVGA ã
- ããã³ãã«ã¡ã©ãšããã¯ã«ã¡ã© - ã«ã¡ã©ã®ååšã
- ã¡ã¢ãªãªãã·ã§ã³ -RAMã
- å éšã¹ãã¬ãŒãž -ããã€ã¹ã®ããŒããã©ã€ãã
- SDã«ãŒã -ããã¯æããã ãšæããŸãã
- ãšãã¥ã¬ãŒã·ã§ã³ãªãã·ã§ã³ ïŒ ã¹ãããã·ã§ãã -ãšãã¥ã¬ãŒã¿ãŒãèµ·åéã§ãã®ç¶æ ãç¶æã§ããããã«ããŸãã ãã¹ãGPUã䜿çšããŸã-OpenGL ESçšã®ã³ã³ãã¥ãŒã¿ãŒã®ã°ã©ãã£ãã¯ã«ãŒãã䜿çšã§ããŸãã æåŸã®ãªãã·ã§ã³ããªã³ã«ããŸããããOpenGL-èµ·åæã«ãã®ãšãã¥ã¬ãŒã¿ã§ã¢ããªã±ãŒã·ã§ã³ãã¯ã©ãã·ã¥ããŸããã ããããARM察x86_64ãåå ã§ãã
ãã€ã¢ãã°ã®äžéšã«ã¯ãã»ããã¢ããäžã«è¡ã£ããšã©ãŒã衚瀺ãããŸãã ããšãã°ãããã€ã¹åã«ã¹ããŒã¹ãå ¥åããããšã¯ã§ãããäžéšã®ãã£ãŒã«ãã¯å¿ é ã§ãã äžéšã«ç¢æããªãå Žåããã¹ãŠãæ£ããå ¥åãããŠããŸãã OKãã¯ãªãã¯ããŸãã
ããã€ã¹ããªã¹ãã«è¡šç€ºãããŸããã

[ããã€ã¹ã®å®çŸ©]ã¿ãã«ã€ããŠäžèš
䜿çšå¯èœãªããã€ã¹ãå®çŸ©ãããŠããŸãïŒæ°ããä»®æ³ããã€ã¹ãäœæãããšãã«[ ããã€ã¹]ããããããŠã³ãªã¹ãã«è¡šç€ºãããããã€ã¹ïŒã æ°ããããã€ã¹ãäœæããã«ã¯ã[ ããã€ã¹ã®äœæ... ]ãã¿ã³ãã¯ãªãã¯ãã次ã®ãã€ã¢ãã°ã«å ¥åããããã«æ³šæããå¿ èŠããããŸãã

䜿çšå¯èœãªããã€ã¹ãå®çŸ©ãããŠããŸãïŒæ°ããä»®æ³ããã€ã¹ãäœæãããšãã«[ ããã€ã¹]ããããããŠã³ãªã¹ãã«è¡šç€ºãããããã€ã¹ïŒã æ°ããããã€ã¹ãäœæããã«ã¯ã[ ããã€ã¹ã®äœæ... ]ãã¿ã³ãã¯ãªãã¯ãã次ã®ãã€ã¢ãã°ã«å ¥åããããã«æ³šæããå¿ èŠããããŸãã

AVD ManagerãéããŠãAndroid Studioã®ã¡ã€ã³ãŠã£ã³ããŠã«æ»ããŸãã
3.ãšãã¥ã¬ãŒã¿ãŒã§å®è¡ãã
å®è¡-> 'app'ãå®è¡ããŸã ã
ãããžã§ã¯ãã®ç«ã¡äžããå®äºãããŸã§åŸ ã€å¿ èŠããããŸãã
æåŸã«ãããã€ã¹éžæãŠã£ã³ããŠã衚瀺ãããŸãã
ããã§ã¯ãéžæã§ããå¯äžã®ãªãã·ã§ã³ã¯ä»®æ³ããã€ã¹ã§ãã 圌ã¯ããã«ç§ãã¡ã«ç³ãåºãããã®ã§ã OKãã¯ãªãã¯ããŠãã ããã

ãšãã¥ã¬ãŒã¿ãŒãèµ·åããŸã

[ããŒã«]-> [Android]-> [Androidããã€ã¹ã¢ãã¿ãŒ] ïŒAndroid SDKã®ãŠãŒãã£ãªãã£ïŒãéããŠããšãã¥ã¬ãŒã¿ãŒããã®ãã°ã衚瀺ã§ããŸãã ä»®æ³ããã€ã¹ãèªåçã«ååŸããããã«ãã°ã®è¡šç€ºãéå§ããå¿ èŠããããŸãã
Androidããã€ã¹ã¢ãã¿ãŒ

ãããããšãã¥ã¬ãŒã¿ãŒãèµ·åããåŸã®ã¢ããªã±ãŒã·ã§ã³ã¯æåã¯éããªãã£ãã®ã§ã ãå®è¡ã->ããã¢ããªããå床å®è¡ããã¯ãªãã¯ããå¿ èŠããããŸããã
ãããã«å€æŽããããã€ã¢ãã°ã衚瀺ãããŸãã
ããã§ãããã€ã¹ã¯ãªã¹ããã移è¡ããŠããã§ã«å®è¡äžã®ãªã¹ãã«ç§»åããŸããã ãã¡ããããã®ãªã¹ãã«ã¯å®éã®ããã€ã¹ãå«ãŸããŠããŸãã

ãã®åŸãäºæ ã¯é²ã¿ãã¢ããªã±ãŒã·ã§ã³ã¯ããã«ã€ã³ã¹ããŒã«ãããŠèµ·åããŸããã
å
šç»é¢ã¢ãŒã

ãããŠãã¢ããªã±ãŒã·ã§ã³ãã¿ãããããšã次ã®ããã«ãªããŸã
ããã¯ã·ã¹ãã ã®åäœã§ã¯ãããŸãããã¯ãªãã¯åŠçã¯ã¢ããªã±ãŒã·ã§ã³ïŒFullscreenActivity.javaãã¡ã€ã«ïŒã§çºçããŸãïŒ

// Set up the user interaction to manually show or hide the system UI. contentView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (TOGGLE_ON_CLICK) { mSystemUiHider.toggle(); } else { mSystemUiHider.show(); } } });
èµ·ååŸãAndroid Studioã¯ãåºåãIDEã«çŽæ¥çµ±åããããã«Android Device Monitorããªãã«ããããšãææ¡ããŸããã
çµ±åã¯æ¬¡ã®ããã«ãªããŸã

4.ãããã°ã¢ãŒãã§å®è¡ãã
å®è¡->ãã¢ããªãããããã°
ãã§ã«ç¥ã£ãŠãã察話
OKãã¯ãªãã¯ããŸãã

ã¢ããªã±ãŒã·ã§ã³ãèµ·åãããããã¬ãŒãæ¥ç¶ãããŸã§åŸ æ©ããŸãã ãããŒãã¿ã³ãã¯ãªãã¯ãããšãã«ãã¬ãŒã¯ãã€ã³ããèšå®ããŸãã
ãããã°äžã®Android Studio

å°ãé¢åãªã®ã¯ãããããçš®é¡ã®ã¹ãããã€ã³ãã¹ãããã¢ãŠããªã©ã®ããã«ããªãããšã§ãã
ããã¯ãã¹ãŠ[å®è¡]ã¡ãã¥ãŒã«ãããŸãã

5. 4.0.3ã§èµ·å
ãããžã§ã¯ããäœæããŠèµ·åããéçšã§ãããŒãžã§ã³4.0.3ãšäºææ§ã®ããã¢ããªã±ãŒã·ã§ã³ãäœæããããšã«æ°ã¥ããã§ãããããAndroidã®ææ°ããŒãžã§ã³ã§ã®ã¿èµ·åããŸããã ä»ãããä¿®æ£ããŸãã ãããè¡ãã«ã¯ã ããŒã«-> Android-> SDK ManagerããããŒãžã§ã³4.0.3ãã€ã³ã¹ããŒã«ããŸã ã
ã¹ã¯ãªãŒã³ã·ã§ããã«å¿
èŠãªãã§ãã¯ããŒã¯ãä»ããŠããŸã

ãããã¯ã SDKãã©ãããã©ãŒã ã ARM EABI v7aã·ã¹ãã ã€ã¡ãŒãž ãããã³Intel x86 Atomã·ã¹ãã ã€ã¡ãŒãžã§ãã å®éãARMãšãã¥ã¬ãŒã¿ãèµ·åããŸãããIntelãã€ã³ã¹ããŒã«ããå¿ èŠã¯ãããŸããã Android Lçšã«ã€ã³ã¹ããŒã«ãããŠãããããçŽç²ã«ã€ã³ã¹ããŒã«ããŸããã
次ã«ãæ°ããå€ãããŒãžã§ã³ã®Androidçšã«å¥ã®ããã€ã¹ãäœæããŸãïŒãŸãã¯ãå€ãããã€ã¹ãç·šéã§ããŸãïŒã
æ°ããããã€ã¹èšå®

å®è¡ïŒ Run-> Run 'app' ïŒã
ãã€ã¢ãã°ã§ãéå§ããæ°ããããã€ã¹ãéžæããŸã

ãããŠãæ°ãããšãã¥ã¬ãŒã¿ãã©ã®ããã«èŠããããèŠãŠãã ãã-æããã«ãã£ãšæ®å¿ã§ãã
æã¡äžã

å
šç»é¢ã¢ãŒã

ãæŒããåŸ

5.ããã€ã¹ã§èµ·åãã
NDKã䜿ãå§ããåã«ãå®éã®ããã€ã¹ã§ãããžã§ã¯ããå®è¡ããŸãããã é»è©±ã§èµ°ããŸã
Huawei Ascend G300 with Android 4.0.3

æåã«è¡ãããšã¯ãadbãã©ã€ããŒãã€ã³ã¹ããŒã«ããããšã§ãã ç§ã¯ããã§ããªãç°¡åã§ãããã©ã€ããŒã¯é»è©±ã«çŽæ¥é 眮ãããŠããŸããå¯äžã®ããšã¯ã±ãŒãã«ãã³ã³ãã¥ãŒã¿ãŒã«æ¥ç¶ããããŠã³ãããããã©ã€ãã«è¡ããå®è¡å¯èœãã¡ã€ã«ãå®è¡ããadb-driverãã€ã³ã¹ããŒã«ããŸãã ä»ã®ããã€ã¹ã®å Žåãäºæ ã¯ããè€éã«ãªãå¯èœæ§ããããŸãã ããšãã°ãPrestigioã¿ãã¬ããã®å Žåãç¹å¥ãªãã¡ã€ã«ã«ãã³ããŒIDãæžã蟌ãå¿ èŠããããŸããïŒGoogleã®æšæºãã©ã€ããŒã䜿çšããããïŒãSamsungã®å Žåã¯ç¬èªã®Kiesãå¿ èŠã§ãHTCã®å¥ã®ãã©ã€ããŒãªã©ããããŸããã äžè¬ã«ãããã€ã¹ã®ãã©ã€ããŒãèªåã§ã€ã³ã¹ããŒã«ããæ¹æ³ãç解ããå¿ èŠããããŸãã
ãã©ã€ããŒãã€ã³ã¹ããŒã«ããããããã€ã¹ã§USBãããã°ãæå¹ã«ããå¿ èŠããããŸãã ç§ã®é»è©±ã§ã¯ããã®ããã«èšå®->éçºè åã-> USBãããã°ã«ç§»åããå¿ èŠããããŸãã ãã ããAndroidã®ãã«ããšããŒãžã§ã³ã ãã§ãªããããŸããŸãªããã€ã¹ã§ã¯ããã®ã¡ãã¥ãŒé ç®ã®å Žæã¯ç°ãªãå ŽåããããŸãã
ããã§ãé»è©±æ©ã¯Android SDKã«ãªããéçºãããã¢ããªã±ãŒã·ã§ã³ãã€ã³ã¹ããŒã«ãããŸãã ãã ããããã¯Huaweiã ãã§ã¯ãããŸããããã°ã¯é»è©±ããéãããã®ã§ã¯ãªããæå¹ã«ããå¿ èŠããããŸãã
Huaweiã§ãã°ãæå¹ã«ããæ¹æ³
é»è©±çªå·ãšããŠãã€ã€ã«ïŒ*ïŒ*ïŒ2846579ïŒ*ïŒ*
ãµãŒãã¹ã¡ãã¥ãŒã衚瀺ãããŸãã
ProjectMenu->ããã¯ã°ã©ãŠã³ãèšå®->ãã°èšå®ã«ç§»åããŸã
ãã°ã¹ã€ãããéããããã§ONã«èšå®ããŸãã
[ ãã°ã¬ãã«]èšå®ãéããå¿ èŠãªãã°ã¬ãã«ãèšå®ããŸãïŒ è©³çŽ°ãèšå®ããŸãïŒã
é»è©±ãåèµ·åããŸãã
ãµãŒãã¹ã¡ãã¥ãŒã衚瀺ãããŸãã
ProjectMenu->ããã¯ã°ã©ãŠã³ãèšå®->ãã°èšå®ã«ç§»åããŸã
ãã°ã¹ã€ãããéããããã§ONã«èšå®ããŸãã
[ ãã°ã¬ãã«]èšå®ãéããå¿ èŠãªãã°ã¬ãã«ãèšå®ããŸãïŒ è©³çŽ°ãèšå®ããŸãïŒã
é»è©±ãåèµ·åããŸãã
ããã§ãããã€ã¹ã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ã§ããŸãïŒ Run-> Run 'app'
ããã€ã¹éžæãã€ã¢ãã°ã«å®éã®ããã€ã¹ã衚瀺ãããŸãã

é»è©±ã§å§ããŸãã
æã¡äžãã®çµæã
瞊é·ã®ã¢ããªã±ãŒã·ã§ã³ïŒ
ã©ã³ãã¹ã±ãŒãã§ã®ã¢ããªã±ãŒã·ã§ã³ïŒ
- å
šç»é¢
- ãæŒããåŸ
ã©ã³ãã¹ã±ãŒãã§ã®ã¢ããªã±ãŒã·ã§ã³ïŒ
- å
šç»é¢
- ãæŒããåŸ
Android NDKãã€ã³ã¹ããŒã«ããŠæ§æãã
1. NDKãã€ã³ã¹ããŒã«ããŸã
Android SDKã¯ããã§ã«ããã£ãŠããããã«ãAndroid Studioã«å«ãŸããŠããŸãããNDKã¯å«ãŸããŠããŸããã ã䜿çšã®ã·ã¹ãã ã«é©ããNDK ãããããããŠã³ããŒãããŸã ã ã¢ãŒã«ã€ãã解åããŠãããšãã°DïŒ\ ndkã®ãããªãã©ã«ããŒã«é 眮ãã ndk-build.cmdãã¡ã€ã«ãçŽæ¥ãã®äžã«ããããã«ããŸãã éèŠ ïŒNDKãžã®ãã¹ã«ã¹ããŒã¹ããªãããšãäžå¯æ¬ ã§ãã
2.å€æ°ANDROID_NDK_HOMEãè¿œå ããŸã
[ã³ã³ãããŒã«ããã«] \ [ã·ã¹ãã ãšã»ãã¥ãªãã£] \ [ã·ã¹ãã ]ã«ç§»åããå·ŠåŽã®[ é«åºŠãªã·ã¹ãã ãã©ã¡ãŒã¿ãŒ ]ãéžæããŠãéãããã€ã¢ãã°ã§[ ç°å¢å€æ° ]ãã¿ã³ãã¯ãªãã¯ããŸãã ANDROID_NDK_HOMEãšããååãšå€DïŒ\ ndk ïŒNDKãžã®ãã¹ïŒã®å€æ°ãäœæããŸãã
ãŸãã¯ãã°ããŒãã«å€æ°ãæå®ãã代ããã«ããããžã§ã¯ãã®local.propertiesãã¡ã€ã«ïŒçŽæ¥ã«ãŒããã©ã«ããŒïŒ MyApplication \ local.properties ïŒã«ndkãžã®ãã¹ãæžã蟌ãããšãã§ããŸãã ãã¡ã€ã«ã®å 容ã¯æ¬¡ã®ããã«ãªããŸãïŒWindowsã«ãšã£ãŠéèŠã§ãããããäºéããã¯ã¹ã©ãã·ã¥ã«æ³šæããŠãã ããïŒã
## This file is automatically generated by Android Studio. # Do not modify this file -- YOUR CHANGES WILL BE ERASED! # # This file should *NOT* be checked into Version Control Systems, # as it contains information specific to your local configuration. # # Location of the SDK. This is only used by Gradle. # For customization when using a Version Control System, please read the # header note. sdk.dir=C:\\Users\\<user>\\AppData\\Local\\Android\\android-studio\\sdk ndk.dir=D:\\ndk
ãå€æŽã¯ç Žæ£ãããããšããå 責äºé ãä¿¡ããªãã§ãã ããããã®å Žåã¯ããã§ã¯ãããŸããã ãã®ãã¡ã€ã«ã«ã¯ãŠãŒã¶ãŒã®ããŒã«ã«æ å ±ã®ã¿ãå«ãŸããŠãããããããŒãžã§ã³ç®¡çããé€å€ããããšããå§ãããŸãã å€æŽã®ããã«ãç§ãã¡ã¯åãã€ããŸããã§ããã ãã¡ããããã®å€æŽã¯ä»ã®ãããžã§ã¯ãã«ã¯åœ±é¿ããŸããã ANDROID_NDK_HOMEãèšå®ãããŠããå Žåã local.propertiesã§ãã¹ãæå®ããå¿ èŠã¯ãããŸããã
3.å¿ èŠãªããŒãžã§ã³ã®Android APIãã€ã³ã¹ããŒã«ããŸã
NDK \ãã©ãããã©ãŒã ïŒ DïŒ\ ndk \ãã©ãããã©ãŒã ïŒã«ç§»åããå©çšå¯èœãªAPIã®æ倧ããŒãžã§ã³ã確èªããŸãã ç§ã®å Žåãæ倧ããŒãžã§ã³ã¯19ã§ãããåæã«SDKã«ã€ã³ã¹ããŒã«ãããã®ã¯ããŒãžã§ã³20ãš15ã®ã¿ã§ãã®ã§ãSDK Managerã«ã¢ã¯ã»ã¹ããŠSDK PlatformããŒãžã§ã³19ãããŠã³ããŒãããŠãã ããã
ããŠã³ããŒããããã®

4. NDKã§åäœããããã«gradleãèšå®ããŸã
ãµã³ãã«ããæ å ±ãååŸããŸãã ã ããŒãžã®äžçªäžããããŠã³ããŒãã§ããŸã ã ããŒãžã§ã³0.11ã®ãµã³ãã«ãããŠã³ããŒãããŸããã åºæ¬çãªäŸãšããŠãndkSanAngelesãåãäžããŸããã
ndkSanAngelesã®å®è¡æ¹æ³
ãµã³ãã«ãããŠã³ããŒããããã解åããå¿
èŠããããŸãã 次ã«ãndkSanAngelesãããžã§ã¯ããéãå¿
èŠããããŸãã Android Studioã®å Žåããããžã§ã¯ãã¯ãã©ã«ããŒãªã®ã§ãéãå¿
èŠããããŸãã ãããè¡ãã«ã¯ãã ãã¡ã€ã«ã->ãéã ããå®è¡ããŸãããŸãã¯ããããããããã€ã¢ãã°ãéããŠããå Žåã¯ã ããããžã§ã¯ããéãã ãã¡ã€ã«ãéããã€ã¢ãã°ã§ndkSanAngelesãã©ã«ããŒãæ¢ããŠããŸãã
ãããžã§ã¯ããéããåŸã build.gradleãã¡ã€ã«ã確èªããå¿ èŠããããŸãã ãªãªãžãã«ã¯æ¬¡ã®ãšããã§ãã
ãããŠããããžã§ã¯ããç§ãããã«ããããããã«ä¿®æ£ãããããŒãžã§ã³ããããŸãïŒ
å€æŽç¹ã¯æ¬¡ã®ãšããã§ãã
ãã®åŸãndkSanAngelesãäžç·ã«ãªããŸãã 泚æããŠãã€ã³ã¹ããŒã«ãããŠããããŒãžã§ã³ã確èªããŠãã ããã

ãããžã§ã¯ããéããåŸã build.gradleãã¡ã€ã«ã確èªããå¿ èŠããããŸãã ãªãªãžãã«ã¯æ¬¡ã®ãšããã§ãã
buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.11.0' } } apply plugin: 'android' android { compileSdkVersion 19 buildToolsVersion '19.1.0' defaultConfig { ndk { moduleName "sanangeles" cFlags "-DANDROID_NDK -DDISABLE_IMPORTGL" ldLibs "GLESv1_CM", "dl", "log" stl "stlport_static" } // This actual the app version code. Giving ourselves 1,000,000 values versionCode = 123 } buildTypes.debug.jniDebugBuild true productFlavors { x86 { ndk { abiFilter "x86" } // this is the flavor part of the version code. // It must be higher than the arm one for devices supporting // both, as x86 is preferred. versionCode = 3 } arm { ndk { abiFilter "armeabi-v7a" } versionCode = 2 } mips { ndk { abiFilter "mips" } versionCode = 1 } fat { // fat binary, lowest version code to be // the last option versionCode = 0 } } // make per-variant version code applicationVariants.all { variant -> // get the single flavor def flavorVersion = variant.productFlavors.get(0).versionCode // set the composite code variant.mergedFlavor.versionCode = flavorVersion * 1000000 + defaultConfig.versionCode } }
ãããŠããããžã§ã¯ããç§ãããã«ããããããã«ä¿®æ£ãããããŒãžã§ã³ããããŸãïŒ
buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.12.+' } } apply plugin: 'android' android { compileSdkVersion 19 buildToolsVersion '20.0.0' defaultConfig { ndk { moduleName "sanangeles" cFlags "-DANDROID_NDK -DDISABLE_IMPORTGL" ldLibs "GLESv1_CM", "dl", "log" stl "stlport_static" } // This actual the app version code. Giving ourselves 1,000,000 values versionCode = 123 } buildTypes.debug.jniDebugBuild true productFlavors { x86 { ndk { abiFilter "x86" } // this is the flavor part of the version code. // It must be higher than the arm one for devices supporting // both, as x86 is preferred. versionCode = 3 } arm { ndk { abiFilter "armeabi-v7a" } versionCode = 2 } mips { ndk { abiFilter "mips" } versionCode = 1 } fat { // fat binary, lowest version code to be // the last option versionCode = 0 } } // make per-variant version code applicationVariants.all { variant -> // get the single flavor def flavorVersion = variant.productFlavors.get(0).versionCode // set the composite code variant.mergedFlavor.versionCode = flavorVersion * 1000000 + defaultConfig.versionCode } }
å€æŽç¹ã¯æ¬¡ã®ãšããã§ãã
- gradleãã©ã°ã€ã³ã®ããŒãžã§ã³ã®äžäžèŽïŒ classpath 'com.android.tools.build:gradlemail.11.0' ïŒã¯ããã«ãããããšãããšãã«è¡šç€ºãããæ£ããããŒãžã§ã³çªå·ãææ¡ãããŸãã 0.12ãããŸãã
- çŸåšã®NDKã®æ倧ããŒãžã§ã³ã§ããããã compileSdkVersion 19ã¯æ®ããŸãã
- buildToolsVersionã20ã«å€æŽãããŸãããã€ã³ã¹ããŒã«ãããŠããããŒãžã§ã³ã¯SDKãããŒãžã£ãŒã§è¡šç€ºã§ããä»ã®ããŒãžã§ã³ãããã«ã€ã³ã¹ããŒã«ã§ããŸãã
ãã®åŸãndkSanAngelesãäžç·ã«ãªããŸãã 泚æããŠãã€ã³ã¹ããŒã«ãããŠããããŒãžã§ã³ã確èªããŠãã ããã
ãããžã§ã¯ãã§ã¯ã2ã€ã®ãã¡ã€ã«ããããããæ£ããbuild.gradleãã¡ã€ã«ãéžæããå¿ èŠããããŸãã å®éãMyApplicationã¯ãããžã§ã¯ãã§ãããappã¯ãããžã§ã¯ãã¢ãžã¥ãŒã«ïŒãŸãã¯ãµããããžã§ã¯ãïŒã§ãããããããã«build.gradleããããŸãã ãŸãããããžã§ã¯ããã¡ã€ã«ãæ€èšããŸã
MyApplication-> build.gradle
// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:0.12.+' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } }
ã¢ãžã¥ãŒã«ãã¡ã€ã«ãå¿ èŠã§ãããšããã³ãŒãå ã®ã³ã¡ã³ãããæããã«ç¶ããŸãã
MyApplication-> app-> build.gradle
apply plugin: 'com.android.application' android { compileSdkVersion 20 buildToolsVersion "20.0.0" defaultConfig { applicationId "com.example.markedone.myapp" minSdkVersion 15 targetSdkVersion 20 versionCode 1 versionName "1.0" } buildTypes { release { runProguard false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) // You must install or update the Support Repository through the SDK manager to use this dependency. //compile 'com.android.support:support-v4:19.+' compile 'com.android.support:support-v4:20.+' }
NDKã§åäœããããã«æ§æããndkSanAngelesã®build.gradleãããããŒããšããŠäœ¿çšããŸãã
æå§ãã«ã亀æ
compileSdkVersion 20
ã«
compileSdkVersion 19
NDKã¯ããŒãžã§ã³19ã«å¶éãããŠããããã§ãã
defaultConfigã§ã¯ã ndkèšå®ãè¿œå ãã targetSdkVersionã19ã«çœ®ãæããŸãã
defaultConfig { applicationId "com.example.markedone.myapp" minSdkVersion 15 targetSdkVersion 19 versionCode 1 versionName "1.0" ndk { moduleName "myapp" cFlags "-DANDROID_NDK" ldLibs "log" stl "stlport_static" } }
NDKèšå®ã«ã¯ä»¥äžãå«ãŸããŸã
- moduleName-ã¢ãžã¥ãŒã«ã®ååã* .soãã¡ã€ã«ã«ååãä»ããããã«äœ¿çšãããŸã
- cFlags -Cãã©ã°
- ldLibs-ãã€ãã£ãã³ãŒãã«æ¥ç¶ããã©ã€ãã©ãª
- stl -STLã©ã€ãã©ãªã®ããŒãžã§ã³
buildTypesã§ããããã°çšã®JNIã®ãããã°ãã«ããæå¹ã«ããŸãã
buildTypes { release { runProguard false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug.jniDebugBuild true }
ããã§productFlavorsãè¿œå ããŸã ã ããã§ã¯ãç¹å®ã®ã¢ãŒããã¯ãã£ã®ã¢ã»ã³ããªã«å«ããããã«ã³ã³ãã€ã«ãããã©ã€ãã©ãª* .soã瀺ããŸãã ãããã£ãŠãarmçšã«ã³ã³ãã€ã«ããã* .apkã«ã¯ãarmçšãx86çšãx86çšãªã©ã®ã©ã€ãã©ãªããŒãžã§ã³ã®ã¿ãå«ãŸããŸãã ãã®ããŒã¹ã¯ndkSanAngelesããå®å šã«ã³ããŒãããŸãã ã³ã¡ã³ãããã®versionCodeå€ã®èª¬æïŒx86ã§ã¯versionCodeã®æ倧å€ãèšå®ããŸããããã¯ãããã€ã¹ãx86ãšarmã®äž¡æ¹ããµããŒãããå Žåãx86ã®çµã¿ç«ãŠãæãŸããïŒæããã«ã倧ããªããŒãžã§ã³ãããããã€ã³ã¹ããŒã«ãããïŒããã§ãããæå°ã®versionCode㯠fatã«èŠå®ãããŠããŸã ïŒçè«äžãããã¯ã©ã€ãã©ãªã®ãã¹ãŠã®å¯èœãªããŒãžã§ã³ãäžåºŠã«å«ããåãã* .apkã§ããå¿ èŠããããŸãïŒã
productFlavors { x86 { ndk { abiFilter "x86" } // this is the flavor part of the version code. // It must be higher than the arm one for devices supporting // both, as x86 is preferred. versionCode = 3 } arm { ndk { abiFilter "armeabi-v7a" } versionCode = 2 } mips { ndk { abiFilter "mips" } versionCode = 1 } fat { // fat binary, lowest version code to be // the last option versionCode = 0 } }
åã¢ã»ã³ããªãªãã·ã§ã³ã®versionCodeã®å€ãã ã¢ã»ã³ãã« ãããŸãã
// make per-variant version code applicationVariants.all { variant -> // get the single flavor def flavorVersion = variant.productFlavors.get(0).versionCode // set the composite code variant.mergedFlavor.versionCode = flavorVersion * 1000000 + defaultConfig.versionCode }
æåŸã«ãæåŸã®ã»ã¯ã·ã§ã³äŸåé¢ä¿ ã èŠããŠããå Žåã¯ãããã§ã³ã³ãã€ã«ãããcom.android.support:support-v4:19.+ãããcom.android.support:support-v4:20.+ãã«å€æŽããã€ã³ã¹ããŒã«ããã©ã€ãã©ãªã®å¯äžã®ããŒãžã§ã³ã§ã³ã³ãã€ã«ããŸãã ããã§ã19ã«æ»ãå¿ èŠããããŸãã
dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) // You must install or update the Support Repository through the SDK manager to use this dependency. compile 'com.android.support:support-v4:19.+' }
å€æŽãããbuild.gradleãã¡ã€ã«ã®å®å
šãªãªã¹ã
apply plugin: 'com.android.application' android { compileSdkVersion 19 buildToolsVersion "20.0.0" defaultConfig { applicationId "com.example.markedone.myapp" minSdkVersion 15 targetSdkVersion 19 versionCode 1 versionName "1.0" ndk { moduleName "myapp" cFlags "-DANDROID_NDK" ldLibs "log" stl "stlport_static" } } buildTypes { release { runProguard false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug.jniDebugBuild true } productFlavors { x86 { ndk { abiFilter "x86" } // this is the flavor part of the version code. // It must be higher than the arm one for devices supporting // both, as x86 is preferred. versionCode = 3 } arm { ndk { abiFilter "armeabi-v7a" } versionCode = 2 } mips { ndk { abiFilter "mips" } versionCode = 1 } fat { // fat binary, lowest version code to be // the last option versionCode = 0 } } // make per-variant version code applicationVariants.all { variant -> // get the single flavor def flavorVersion = variant.productFlavors.get(0).versionCode // set the composite code variant.mergedFlavor.versionCode = flavorVersion * 1000000 + defaultConfig.versionCode } sourceSets { main { jni.srcDirs = ['src/main/jni', 'src/main/jni/'] } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) // You must install or update the Support Repository through the SDK manager to use this dependency. compile 'com.android.support:support-v4:19.+' }
5. jniãã©ã«ããŒãäœæãã
jniãã©ã«ããŒã«C / C ++ãã¡ã€ã«ãä¿åããŸãã NDKã¯ãããæåŸ ããŠããŸãã MyApplication / app / src / mainã«ãã©ã«ããŒãäœæããå¿ èŠããããŸã ã ããã¯ãAndroid StudioããçŽæ¥ã2ã€ã®æ¹æ³ã§å®è¡ã§ããŸãã
ãŸããã¡ã€ã³ãå³ã¯ãªãã¯ããŠããã©ã«ããäœæããŸã
æ°èŠ->ãã£ã¬ã¯ããª

第äºã«ãç¹å¥ãªã¡ãã¥ãŒé ç®ã䜿çšã§ããŸã
æ°èŠ->ãã©ã«ã-> JNIãã©ã«ã

ãã©ã«ããŒäœæãŠã£ã¶ãŒããèµ·åããŸã
æåã®ãã€ã¢ãã°ã§ã¯ãã¢ãžã¥ãŒã«ã®ã©ã®éšåã«jniãã©ã«ããŒãäœæããããéžæãã2çªç®ã§ã¯ããã®å Žæãå€æŽã§ããŸãã


æåã®ãã€ã¢ãã°ã§ã¯ãã¢ãžã¥ãŒã«ã®ã©ã®éšåã«jniãã©ã«ããŒãäœæããããéžæãã2çªç®ã§ã¯ããã®å Žæãå€æŽã§ããŸãã
6. C ++ãã¡ã€ã«ãè¿œå ãã
C ++ãã¡ã€ã«çšã®ãŠã£ã¶ãŒãã¯ãããŸããããããã£ãŠããã¡ã€ã«ãäœæããã«ã¯ã jniãã©ã«ããŒãå³ã¯ãªãã¯ããŠéžæããŸãã
æ°èŠ->ãã¡ã€ã«

ãŸããããããŒãã¡ã€ã«myapp.hãäœæããŸãã
#pragma once #include <jni.h> #ifdef __cplusplus extern "C" { #endif JNIEXPORT jstring JNICALL Java_com_example_markedone_myapp_FullscreenActivity_stringFromJNI(JNIEnv* env, jclass clazz); #ifdef __cplusplus } #endif
説æ
-
#pragma once
once-åå å«ã«å¯ŸããæšæºïŒïŒifndef /ïŒdefine /ïŒendifïŒä¿è·ã®ä»£ããã#pragma once
ã¯ãã»ãšãã©ã®C ++ã³ã³ãã€ã©ã§ç解ãããããã«ãªããŸããã -
#include <jni.h>
ããããŒãæå¹ã«ããŠãããã§å®£èšãããåã䜿çšã§ããããã«ããŸãã -
#ifdef __cplusplus ... #endif
å éšã®ã³ãŒãã¯C ++ã§ã®ã¿ã³ã³ãã€ã«ãããŸãïŒCã§ã¯ã³ã³ãã€ã«ãããŸããïŒã -
extern "C" { ... }
-ååã®ãã³ã°ãªã³ã°ãåãé€ããŸãïŒãããäœã§ããããªãããã§è©³ãã説æãããŠããã ïŒã -
JNIEXPORT jstring JNICALL Java_com_example_markedone_myapp_FullscreenActivity_stringFromJNI(JNIEnv* env, jclass clazz);
-å®è£ ããé¢æ°ã®å®£èšã
ãã®åºåãããã«è©³ããåæããŸãããã
- JNIEXPORTã¯ãé©åãªãªã³ã¯ã«å¿ èŠã§ãã
- æ£ããåŒã³åºãèŠçŽã«ã€ããŠã¯JNICALL ã
- jstringã¯ãé¢æ°ã®æ»ãå€ã®åã§ãããã®å ŽåãJavaæååãšäºææ§ã®ããæååã§ãã
- Java_com_example_markedone_myapp_FullscreenActivity_stringFromJNI-é¢æ°ã®ååã¯ã次ã®ãã®ã§æ§æãããŸãã
Javaã¯åŒã³åºãèšèªã§ãã
com_example_markedone_myappã¯ã¢ããªã±ãŒã·ã§ã³IDïŒ com.example.markedone.myapp ïŒã§ãã
FullscreenActivityã¯ããã€ãã£ãé¢æ°ãè¡šãã¡ãœããã®å®£èšãå«ãJavaã¯ã©ã¹ã®ååã§ãã
stringFromJNI-å®éã«ã¯ãé¢æ°ã®ååïŒããã¯Javaã§ã®æ¹æ³ã§ãïŒã -
JNIEnv* env, jclass clazz
ã¯ãJavaããæž¡ãããå¿ é ãã©ã¡ãŒã¿ãŒã§ãã
JNIEnv* env
-JNIç°å¢ãè¡šããªããžã§ã¯ããžã®ãã€ã³ã¿ãŒã
jclass clazz
ã¯ãJavaã®ãã€ãã£ãã¡ãœãã宣èšãææããã¯ã©ã¹ã§ãã ããã§ã¯ãjclass clazzãéçãã€ãã£ãã¡ãœããçšã§ããããšãäºçŽããå¿ èŠããããŸãã ééçã¡ãœããã®å Žåãjobject obj
ãèšè¿°ããå¿ èŠããããŸãã
次ã«ãå®è£ ãã¡ã€ã«myapp.cppãäœæããŸãã ãã®äžã«æ¬¡ã®ã³ãŒããæžããŸãïŒ
#include <android/log.h> #include <string> #include "myapp.h" JNIEXPORT jstring JNICALL Java_com_example_markedone_myapp_FullscreenActivity_stringFromJNI(JNIEnv* env, jclass clazz) { std::string tag("GREETING"); std::string message("Hello from C++!"); __android_log_print(ANDROID_LOG_INFO, tag.c_str(), "%s", message.c_str()); std::string jniMessage("Hello from JNI!"); return env->NewStringUTF(jniMessage.c_str()); }
説æ
次ã«ãå¥ã®ãã¡ã€ã«stub.cppãäœæãã空ã®ãŸãŸã«ããŸãã å®éãjniãã©ã«ããŒã«* .cppãã¡ã€ã«ã1ã€ã ãæ®ããå Žåãndk-buildã¯ãã¿ãŒã²ãããäœæããã«ãŒã«ããããŸããããšãããšã©ãŒãã¹ããŒããŸãã
ãã¡ã€ã«MyApplication / app / src / main / java / com.example.markedone.myapp.FullscreenActivityãéããŸãã å®éãjavaæ¡åŒµæ©èœããããcomãããšãã°ãmarkedoneãšmyappã¯ãã©ã«ããŒã§ãããAndroid Studioã¯ãããé ããŸãã
次ã®ã³ãŒããFullscreenActivityã¯ã©ã¹ã«è¿œå ããŸãã
ããã§ãäžè¬ã«ããã§ã«é¢æ°ãåŒã³åºãããšãã§ããŸãã ç§ã®ããã«ãFullscreenActivityãéžæããå Žåãå®éã«ã¯äœãããªããããŒãã¿ã³ããããŸãã touch listener, ( , ), , , .
:
.
:
.
Build->Make Project. Java-.
Run->Run 'app'. , , C++ . - , . , , , OK .

, Android Studio . Android SDK , , . , , Help me choose. â Gradle, â : .
, , NDK , . , - C++-.
PS C++ .
-
#include <android/log.h>
-ãã°ãæ¥ç¶ããŸãããã®ããã«ã©ã€ãã©ãªïŒ ldLibs "log" ïŒãè¿œå ããŸããã -
#include - std::string, STL.
#include "myapp.h"
-ããããŒãã¡ã€ã«ãå«ããŸãã
JNIEXPORT jstring JNICALL Java_com_example_markedone_myapp_FullscreenActivity_stringFromJNI(JNIEnv* env, jclass clazz) { ... } - , "myapp.h".
std::string tag("GREETING"); std::string message("Hello from C++!");
-ãã°ã«åºåããããã®è¡ãäœæããŸãã
__android_log_print(ANDROID_LOG_INFO, tag.c_str(), "%s", message.c_str());
-ãã°ãžã®åºåã 4ã€ã®ãã©ã¡ãŒã¿ãŒãæå®ããå¿ èŠãããããšã«æ³šæããŠãã ããïŒãã°å ã®ã¡ãã»ãŒãžã®ã¿ã€ããã¿ã°ãè¡ã®ãã©ãŒããããæåŸã«ã¡ãã»ãŒãžèªäœã
std::string jniMessage("Hello from JNI!");
Javaã§æž¡ãæååã§ãã
return env->NewStringUTF(jniMessage.c_str());
-æ»ãå€ãJNIEnvã䜿çšããŠãCæååããjstringãäœæããŸãã Cã§ã¯ãªãC ++ã§èšè¿°ããŠããããããã©ãŒã(*env)->
æ§ç¯ã¯å¿ èŠãªãããšã«æ³šæããŠãã ããã
次ã«ãå¥ã®ãã¡ã€ã«stub.cppãäœæãã空ã®ãŸãŸã«ããŸãã å®éãjniãã©ã«ããŒã«* .cppãã¡ã€ã«ã1ã€ã ãæ®ããå Žåãndk-buildã¯ãã¿ãŒã²ãããäœæããã«ãŒã«ããããŸããããšãããšã©ãŒãã¹ããŒããŸãã
7. Javaãããã€ãã£ãé¢æ°åŒã³åºããè¿œå ããŸã
ãã¡ã€ã«MyApplication / app / src / main / java / com.example.markedone.myapp.FullscreenActivityãéããŸãã å®éãjavaæ¡åŒµæ©èœããããcomãããšãã°ãmarkedoneãšmyappã¯ãã©ã«ããŒã§ãããAndroid Studioã¯ãããé ããŸãã
ãã¡ã€ã«ã®å
容
package com.example.markedone.myapp; import com.example.markedone.myapp.util.SystemUiHider; import android.annotation.TargetApi; import android.app.Activity; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.view.MotionEvent; import android.view.View; /** * An example full-screen activity that shows and hides the system UI (ie * status bar and navigation/system bar) with user interaction. * * @see SystemUiHider */ public class FullscreenActivity extends Activity { /** * Whether or not the system UI should be auto-hidden after * {@link #AUTO_HIDE_DELAY_MILLIS} milliseconds. */ private static final boolean AUTO_HIDE = true; /** * If {@link #AUTO_HIDE} is set, the number of milliseconds to wait after * user interaction before hiding the system UI. */ private static final int AUTO_HIDE_DELAY_MILLIS = 3000; /** * If set, will toggle the system UI visibility upon interaction. Otherwise, * will show the system UI visibility upon interaction. */ private static final boolean TOGGLE_ON_CLICK = true; /** * The flags to pass to {@link SystemUiHider#getInstance}. */ private static final int HIDER_FLAGS = SystemUiHider.FLAG_HIDE_NAVIGATION; /** * The instance of the {@link SystemUiHider} for this activity. */ private SystemUiHider mSystemUiHider; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fullscreen); final View controlsView = findViewById(R.id.fullscreen_content_controls); final View contentView = findViewById(R.id.fullscreen_content); // Set up an instance of SystemUiHider to control the system UI for // this activity. mSystemUiHider = SystemUiHider.getInstance(this, contentView, HIDER_FLAGS); mSystemUiHider.setup(); mSystemUiHider .setOnVisibilityChangeListener(new SystemUiHider.OnVisibilityChangeListener() { // Cached values. int mControlsHeight; int mShortAnimTime; @Override @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) public void onVisibilityChange(boolean visible) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { // If the ViewPropertyAnimator API is available // (Honeycomb MR2 and later), use it to animate the // in-layout UI controls at the bottom of the // screen. if (mControlsHeight == 0) { mControlsHeight = controlsView.getHeight(); } if (mShortAnimTime == 0) { mShortAnimTime = getResources().getInteger( android.R.integer.config_shortAnimTime); } controlsView.animate() .translationY(visible ? 0 : mControlsHeight) .setDuration(mShortAnimTime); } else { // If the ViewPropertyAnimator APIs aren't // available, simply show or hide the in-layout UI // controls. controlsView.setVisibility(visible ? View.VISIBLE : View.GONE); } if (visible && AUTO_HIDE) { // Schedule a hide(). delayedHide(AUTO_HIDE_DELAY_MILLIS); } } }); // Set up the user interaction to manually show or hide the system UI. contentView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (TOGGLE_ON_CLICK) { mSystemUiHider.toggle(); } else { mSystemUiHider.show(); } } }); // Upon interacting with UI controls, delay any scheduled hide() // operations to prevent the jarring behavior of controls going away // while interacting with the UI. findViewById(R.id.dummy_button).setOnTouchListener(mDelayHideTouchListener); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); // Trigger the initial hide() shortly after the activity has been // created, to briefly hint to the user that UI controls // are available. delayedHide(100); } /** * Touch listener to use for in-layout UI controls to delay hiding the * system UI. This is to prevent the jarring behavior of controls going away * while interacting with activity UI. */ View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { if (AUTO_HIDE) { delayedHide(AUTO_HIDE_DELAY_MILLIS); } return false; } }; Handler mHideHandler = new Handler(); Runnable mHideRunnable = new Runnable() { @Override public void run() { mSystemUiHider.hide(); } }; /** * Schedules a call to hide() in [delay] milliseconds, canceling any * previously scheduled calls. */ private void delayedHide(int delayMillis) { mHideHandler.removeCallbacks(mHideRunnable); mHideHandler.postDelayed(mHideRunnable, delayMillis); } }
次ã®ã³ãŒããFullscreenActivityã¯ã©ã¹ã«è¿œå ããŸãã
static { System.loadLibrary("myapp"); } private static native String stringFromJNI();
ããã§ã¯ãæåã«ã©ã€ãã©ãªãèªã¿èŸŒãŸãã次ã«C ++ã®é¢æ°ã«å¯Ÿå¿ããstringFromJNIã¡ãœããã®å®£èšãèªã¿èŸŒãŸããŸãã éçïŒããã¯C ++é¢æ°ã®2çªç®ã®ãã©ã¡ãŒã¿ãŒãšããŠïŒjclassãŸãã¯jobjectïŒã«åœ±é¿ããŸãïŒããã³ãã€ãã£ããšããŠå®£èšãããŠããããšã«æ³šæããŠãã ããã ãã€ãã£ãã¡ãœãããå®è£
ããå¿
èŠã¯ãããŸããããã§ã«C ++ã§ãããè¡ã£ãŠãããæ®ãã¯JNIã«ãã£ãŠè¡ãããŸãã
ããã§ãäžè¬ã«ããã§ã«é¢æ°ãåŒã³åºãããšãã§ããŸãã ç§ã®ããã«ãFullscreenActivityãéžæããå Žåãå®éã«ã¯äœãããªããããŒãã¿ã³ããããŸãã touch listener, ( , ), , , .
:
import android.widget.Button;
.
:
View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { if (AUTO_HIDE) { delayedHide(AUTO_HIDE_DELAY_MILLIS); } return false; } };
return false
.
View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { if (AUTO_HIDE) { delayedHide(AUTO_HIDE_DELAY_MILLIS); } final String message = stringFromJNI(); final Button button = (Button)findViewById(R.id.dummy_button); final String actualText = button.getText().toString(); if(message.equals(actualText)) { button.setText("Dummy Button"); } else { button.setText(message); } return false; } };
-
final String message = stringFromJNI();
â C++. â , . -
final Button button = (Button)findViewById(R.id.dummy_button);
â . -
final String actualText = button.getText().toString();
â . -
if(message.equals(actualText))
â , C++, .-
button.setText("Dummy Button");
â , Dummy Button. -
button.setText(message);
â , , C++.
-
package com.example.markedone.myapp; import com.example.markedone.myapp.util.SystemUiHider; import android.annotation.TargetApi; import android.app.Activity; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.view.MotionEvent; import android.view.View; import android.widget.Button; /** * An example full-screen activity that shows and hides the system UI (ie * status bar and navigation/system bar) with user interaction. * * @see SystemUiHider */ public class FullscreenActivity extends Activity { static { System.loadLibrary("myapp"); } private static native String stringFromJNI(); /** * Whether or not the system UI should be auto-hidden after * {@link #AUTO_HIDE_DELAY_MILLIS} milliseconds. */ private static final boolean AUTO_HIDE = true; /** * If {@link #AUTO_HIDE} is set, the number of milliseconds to wait after * user interaction before hiding the system UI. */ private static final int AUTO_HIDE_DELAY_MILLIS = 3000; /** * If set, will toggle the system UI visibility upon interaction. Otherwise, * will show the system UI visibility upon interaction. */ private static final boolean TOGGLE_ON_CLICK = true; /** * The flags to pass to {@link SystemUiHider#getInstance}. */ private static final int HIDER_FLAGS = SystemUiHider.FLAG_HIDE_NAVIGATION; /** * The instance of the {@link SystemUiHider} for this activity. */ private SystemUiHider mSystemUiHider; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_fullscreen); final View controlsView = findViewById(R.id.fullscreen_content_controls); final View contentView = findViewById(R.id.fullscreen_content); // Set up an instance of SystemUiHider to control the system UI for // this activity. mSystemUiHider = SystemUiHider.getInstance(this, contentView, HIDER_FLAGS); mSystemUiHider.setup(); mSystemUiHider .setOnVisibilityChangeListener(new SystemUiHider.OnVisibilityChangeListener() { // Cached values. int mControlsHeight; int mShortAnimTime; @Override @TargetApi(Build.VERSION_CODES.HONEYCOMB_MR2) public void onVisibilityChange(boolean visible) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB_MR2) { // If the ViewPropertyAnimator API is available // (Honeycomb MR2 and later), use it to animate the // in-layout UI controls at the bottom of the // screen. if (mControlsHeight == 0) { mControlsHeight = controlsView.getHeight(); } if (mShortAnimTime == 0) { mShortAnimTime = getResources().getInteger( android.R.integer.config_shortAnimTime); } controlsView.animate() .translationY(visible ? 0 : mControlsHeight) .setDuration(mShortAnimTime); } else { // If the ViewPropertyAnimator APIs aren't // available, simply show or hide the in-layout UI // controls. controlsView.setVisibility(visible ? View.VISIBLE : View.GONE); } if (visible && AUTO_HIDE) { // Schedule a hide(). delayedHide(AUTO_HIDE_DELAY_MILLIS); } } }); // Set up the user interaction to manually show or hide the system UI. contentView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (TOGGLE_ON_CLICK) { mSystemUiHider.toggle(); } else { mSystemUiHider.show(); } } }); // Upon interacting with UI controls, delay any scheduled hide() // operations to prevent the jarring behavior of controls going away // while interacting with the UI. findViewById(R.id.dummy_button).setOnTouchListener(mDelayHideTouchListener); } @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); // Trigger the initial hide() shortly after the activity has been // created, to briefly hint to the user that UI controls // are available. delayedHide(100); } /** * Touch listener to use for in-layout UI controls to delay hiding the * system UI. This is to prevent the jarring behavior of controls going away * while interacting with activity UI. */ View.OnTouchListener mDelayHideTouchListener = new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { if (AUTO_HIDE) { delayedHide(AUTO_HIDE_DELAY_MILLIS); } final String message = stringFromJNI(); final Button button = (Button)findViewById(R.id.dummy_button); final String actualText = button.getText().toString(); if(message.equals(actualText)) { button.setText("Dummy Button"); } else { button.setText(message); } return false; } }; Handler mHideHandler = new Handler(); Runnable mHideRunnable = new Runnable() { @Override public void run() { mSystemUiHider.hide(); } }; /** * Schedules a call to hide() in [delay] milliseconds, canceling any * previously scheduled calls. */ private void delayedHide(int delayMillis) { mHideHandler.removeCallbacks(mHideRunnable); mHideHandler.postDelayed(mHideRunnable, delayMillis); } }
17.
Build->Make Project. Java-.
Run->Run 'app'. , , C++ . - , . , , , OK .



ãããã«
, Android Studio . Android SDK , , . , , Help me choose. â Gradle, â : .
, , NDK , . , - C++-.
PS C++ .