C/C++À» ÀÌ¿ëÇÑ ¾Èµå·ÎÀÌµå ¾Û °³¹ß ¹æ¹ý¡º¾Èµå·ÎÀ̵åÀÇ ¸ðµç °Í NDK¡». ¾Èµå·ÎÀÌµå ¾Û °³¹ß¿¡ ³×ÀÌƼºê ¶óÀ̺귯¸® ±â´ÉÀ» Ãß°¡Çϰųª ÀÚ¹Ù¿Í ¾Èµå·ÎÀ̵å ÇÁ·¹ÀÓ¿öÅ© ¿¬µ¿ÀÌ ±Ã±ÝÇÑ °³¹ßÀÚ¸¦ ´ë»óÀ¸·Î ÇÑ Ã¥ÀÌ´Ù. ½ÇÁ¦ NDK·Î ÇÁ·ÎÁ§Æ®¸¦ ÇÏ´Â °³¹ßÀÚ¿Í °³¹ßÀÚ¸¦ ´ë»óÀ¸·Î °ÀÇÇØ¿Â °»ç°¡ ÇÔ²² °³¹ßÀÚ¸¦ À§ÇØ °¡Àå ½¬¿î ¾ð¾î·Î Ç®¾î¼ NDK¸¦ ¼³¸íÇß´Ù. ¾Èµå·ÎÀ̵å NDK·Î °³¹ßÇÑ µ¿Àû ·Îµù ¶óÀ̺귯¸®¸¦ ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ǿ¡¼ È£ÃâÇÏ¿© »ç¿ëÇÏ´Â ¹æ¹ý»Ó¸¸ ¾Æ´Ï¶ó, NDK¿¡ Æ÷ÇÔµÇÁö ¾ÊÀº ¾Èµå·ÎÀ̵å ÇÁ·¹ÀÓ¿öÅ©ÀÇ ¸®¼Ò½º¸¦ »ç¿ëÇÏ´Â ¹æ¹ýµµ ´Ù·ç°í ÀÖ´Ù. ¶ÇÇÑ ½ÇÁ¦ ¾Èµå·ÎÀ̵åÀÇ ÇÁ·¹ÀÓ¿öÅ©°¡ ÀÛµ¿ÇÏ´Â ¹æ½Ä°ú À¯»çÇÑ ¼ºñ½º¸¦ ¸¸µé¸é¼ Ä¿³Î µå¶óÀ̹ö±îÁö Á¢±ÙÇÏ¿© Çϵå¿þ¾î Á¶ÀÛ±îÁö ÇÒ ¼ö ÀÖµµ·Ï ¼³¸íÇÑ´Ù. óÀ½ ¾Èµå·ÎÀ̵带 Á¢ÇÏ´Â µ¶ÀÚ¸¦ À§ÇØ ¾Èµµ·ÎÀ̵忡 ´ëÇØ ¼±Çà ÇнÀÇÒ ¼ö ÀÖ´Â ºÎ·ÏÀ» Á¦°øÇÑ´Ù.
CHAPTER 00 µé¾î°¡¸ç
CHAPTER 01 ¾Èµå·ÎÀ̵å NDK´Â ¹«¾ùÀΰ¡?
__1.1 ¾Èµå·ÎÀ̵å NDKÀÇ µîÀå ¹è°æ
__1.2 NDK¿¡¼ Á¦°øµÇ´Â °Í
__1.3 °³¹ß ȯ°æ
____1.3.1 JDK ¼³Ä¡
____1.3.2 ¾Èµå·ÎÀ̵å SDK ¼³Ä¡
____1.3.3 ÀÌŬ¸³½º¿Í ADT Ç÷¯±×ÀÎ ¼³Á¤
____1.3.4 NDK °³¹ß ȯ°æ ¼³Á¤
____1.3.5 PDK ¼³Á¤
__1.4 ¾Èµå·ÎÀÌµå °³¹ß ¹æ¹ý
____1.4.1 SDK¸¦ ÀÌ¿ëÇÑ °³¹ß ¹æ¹ý
____1.4.2 NDK¸¦ ÀÌ¿ëÇÑ °³¹ß ¹æ¹ý
____1.4.3 PDK¸¦ ÀÌ¿ëÇÑ °³¹ß ¹æ¹ý ¼Ò°³ ¹× µ¿ÀÛ ±¸Á¶
____1.4.4 Android Debug Bridge
CHAPTER 02 NDK °³¹ßÀ» À§ÇÑ ¾Èµå·ÎÀÌµå ¾ÖÇø®ÄÉÀÌ¼Ç ±âÃÊ ½×±â
__2.1 ¾Èµå·ÎÀÌµå ¾ÖÇø®ÄÉÀ̼ÇÀÇ ±¸Á¶
__2.2 ¾Èµå·ÎÀÌµå ¾ÖÇø®ÄÉÀÌ¼Ç ±¸¼º ¿ä¼Ò
____2.2.1 ¾×ƼºñƼ
____2.2.2 ¼ºñ½º
____2.2.3 BroadcastReceiver
____2.2.4 ContentProvider
____2.2.5 ÀÎÅÙÆ®
__2.3 ¾Èµå·ÎÀÌµå ¾ÖÇø®ÄÉÀ̼ÇÀÇ ¶óÀÌÇÁ »çÀÌŬ
____2.3.1 ¾×ƼºñƼ ¶óÀÌÇÁ »çÀÌŬ
____2.3.2 ¼ºñ½º ¶óÀÌÇÁ »çÀÌŬ
____2.3.3 BroadcastReceiver ¶óÀÌÇÁ »çÀÌŬ
__2.4 ¾Èµå·ÎÀÌµå ¾ÖÇø®ÄÉÀ̼ÇÀÇ Æ۹̼Ç
CHAPTER 03 º»°Ý NDK °³¹ß!
__3.1 ³×ÀÌƼºê ¶óÀ̺귯¸® °³¹ßÀ» À§ÇØ ¾Ë¾Æ¾ß ÇÒ °Í
__3.2 JNI
____3.2.1 JNA
____3.2.2 SWIG
____3.2.3 JNI
__3.3 JNI ±¸Çö ¼ø¼
__3.4 ÀÚ¹Ù¿¡¼ ³×ÀÌƼºê ÄÚµå È£ÃâÇϱâ
__3.5 ³×ÀÌƼºê Äڵ忡¼ ÀÚ¹Ù·Î Á¢±ÙÇϱâ
__3.6 x86¿¡¼ JNI ¿¬½À
__3.7 ¾Èµå·ÎÀ̵å Makefile
____3.7.1 Android.mk ºÐ¼®
____3.7.2 Application.mk ºÐ¼®
__3.8 C¿Í C++¿¡¼ JNI ±¸Çö ½Ã Â÷ÀÌÁ¡
__3.9 SDK, NDK, PDK ·Î±× Ãâ·Â
____3.9.1 SDK ·Î±× Ãâ·Â
____3.9.2 NDK ·Î±× Ãâ·Â
____3.9.3 PDK ·Î±× Ãâ·Â
__3.10 ¿¹Á¦1: ´õÇϱâ ÇÁ·Î±×·¥
____3.10.1 ¾Èµå·ÎÀÌµå »õ ÇÁ·ÎÁ§Æ® »ý¼ºÇϱâ
____3.10.2 ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ÇÀÇ ±âº» ·¹À̾ƿô º¯°æÇϱâ
____3.10.3 ÀÚ¹Ù ÄÚµå ¼öÁ¤Çϱâ
____3.10.4 JNI ±Ô¾à¿¡ ¸Â´Â ¶óÀ̺귯¸® »ý¼ºÇϱâ
____3.10.5 .c ÆÄÀÏÀ» ¸¸µé°í ÄÄÆÄÀÏÇϱâ
__3.11 ¿¹Á¦2: ¿ÜºÎ ¶óÀ̺귯¸® È°¿ëÇϱâ
__3.12 ¶óÀ̺귯¸® ÀÇÁ¸¼º ¹®Á¦
__3.13 JNI_OnLoad
__3.14 ÇÑ±Û Ã³¸®
__3.15 ÀÚ¹Ù¿Í NDKÀÇ ¼Óµµ Â÷ÀÌ
__3.16 ³×ÀÌƼºê ½º·¹µå·Î ÀÚ¹Ù ÄÝ¹é ¸¸µé±â
__3.17 ¾Èµå·ÎÀÌµå µð¹ö±ë
____3.17.1 addr2line
____3.17.2 gdb¸¦ ÀÌ¿ëÇÑ µð¹ö±ë
____3.17.3 ÇÁ·ÎÆÄÀϸµ
CHAPTER 04 NDK¿¡¼ÀÇ ±×·¡ÇÈ Ã³¸®
__4.1 bitmap-plasma
__4.2 NDK 3D
____4.2.1 ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ǿ¡¼ÀÇ OpenGL ES »ç¿ë
____4.2.2 NDK¿¡¼ÀÇ OpenGL ES 1.x
__4.3 SDL Æ÷ÆÃ
____4.3.1 SDLÀ̶õ ¹«¾ùÀΰ¡?
____4.3.2 ¾Èµå·ÎÀ̵å ÀÚ¹Ù¿Í SDLÀÇ ¿¬°á
____4.3.3 SDL È°¿ë
__4.4 Native Activity
____4.4.1 ÇÁ·¹ÀÓ¿öÅ© ³»ºÎ¿Í ¿¬°áÁ¡
____4.4.2 Native Activity¸¦ ¸¸µé¾î º¸ÀÚ
__4.5 STL°ú NeonÀÇ »ç¿ë
____4.5.1 STL
____4.5.2 NEON
CHAPTER 05 NDKÀÇ È®Àå
__5.1 Ç÷§Æû ¾È¿¡¼ »ç¿ëµÇ´Â ³×ÀÌƼºê ¶óÀ̺귯¸®
__5.2 NDK¿ë Android.mk¿Í Àüü ¼Ò½º¿ë Android.mkÀÇ Â÷ÀÌÁ¡
__5.3 skia ¶óÀ̺귯¸®·Î ¾ÖÇø®ÄÉÀÌ¼Ç ¸¸µé±â
__5.4 ¾Èµå·ÎÀ̵å Àüü ¼Ò½º ÄÄÆÄÀÏ ¹æ¹ý
__5.5 ÀÚ¹Ù ¾ÖÇø®ÄÉÀ̼ǿ¡¼ GPIO ÄÁÆ®·ÑÇϱâ
CHAPTER 06 ¸ÖƼ¹Ìµð¾î
__6.1 ¾Èµå·ÎÀÌµå ³×ÀÌƼºê AudioFlinger È°¿ë°ú OpenSL ES
__6.1.1 ³×ÀÌƼºê AudioFlinger Á¦¾î
__6.1.2 OpenSL ES
__6.2 ³×ÀÌƼºê¿¡¼ Surface Á¢±ÙÇϱâ
____6.2.1 ¾Èµå·ÎÀ̵åó·³ Á÷Á¢ Surface¸¦ »ç¿ëÇÏ·Á¸é ¾î¶»°Ô ÇØ¾ß ÇÒ±î?
____6.2.2 Å×½ºÆ®¿ë ¾ÖÇø®ÄÉÀ̼Ç
__6.3 OpenMAX AL
____6.3.1 OpenMAX AL °³¿ä
____6.3.2 µ¿ÀÛ ±¸Á¶
____6.3.3 ¾Èµå·ÎÀ̵å OpenMAX AL
____6.3.4 OpenMAX AL ¿¹Á¦
__6.4 ¾Èµå·ÎÀ̵忡¼ FFmpeg È°¿ë
____6.4.1 ¾Èµå·ÎÀÌµå ¸ÖƼ¹Ìµð¾î ±¸Á¶
____6.4.2 ¾Èµå·ÎÀ̵å ÇÁ·¹ÀÓ¿öÅ©¿¡¼ÀÇ ¸ÖƼ¹Ìµð¾î
____6.4.3 ¾Èµå·ÎÀÌµå ¾ÖÇø®ÄÉÀÌ¼Ç °èÃþ¿¡¼ÀÇ ¸ÖƼ¹Ìµð¾î
____6.4.4 FFmpeg °³¿ä
____6.4.5 FFmpegÀÇ ±¸¼º
____6.4.6 ¾Èµå·ÎÀ̵å FFmpeg
APPENDIX ¾Èµå·ÎÀ̵å´Â ¹«¾ùÀΰ¡?
__A.1 ¾Èµå·ÎÀ̵åÀÇ °³³ä
__A.2 ¾Èµå·ÎÀÌµå ¿ª»ç
__A.3 ¾Èµå·ÎÀ̵å Ư¡
__A.4 ¾Èµå·ÎÀÌµå ¶óÀ̼±½º¿Í ¿ÀÇ ¼Ò½º ¶óÀ̼±½º
____A.4.1 Dalvik VM
__A.5 ¾Èµå·ÎÀÌµå ½Ã½ºÅÛ ±¸Á¶
__A.6 ¿ìºÐÅõ¿Í VirtualBox·Î NDK °³¹ß ȯ°æ ¼³Á¤Çϱâ