¡åAdvertisement
right event
¡åAdvertisement
ÀÐÀ»°Å¸® > µðº§·ÎÆÛ Ç÷¯½º

¾Èµå·ÎÀÌµå ³×ÀÌÆ¼ºê ¶óÀ̺귯¸®¥°

À̹ø Ä÷³¿¡¼­´Â ±âÁ¸¿¡ C/C++ ·Î °³¹ßÇÑ Äڵ尡 ¾Èµå·ÎÀ̵å Ç÷§Æû¿¡¼­ ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö ¾Èµå·ÎÀ̵å Ç÷§Æû ±¸Á¶¸¦ ÅëÇØ ¾Ë¾Æº¸°í, Java ÀÀ¿ëÇÁ·Î±×·¥°ú ¿¬µ¿Çϱâ À§ÇÑ ´Ù¾çÇÑ ¹æ¹ýÀ» ¼Ò°³ÇÑ´Ù. ¶Ç C/C++ Äڵ带 ¾Èµå·ÎÀ̵å Ç÷§Æû¿¡¼­ µ¿ÀÛÇÏ´Â ¹ÙÀ̳ʸ®·Î ºôµåÇÒ ¼ö ÀÖ´Â ÅøÃ¼ÀÎ ¾Èµå·ÎÀ̵å NDK¿¡ ´ëÇØ ¾Ë¾Æº¸°í °£´ÜÇÑ »ç¿ë¹ý¿¡ ´ëÇØ ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ.

ÀÌ»ó¿í bumwoogi@gmail.com£ü»õ·Î¿î ±â¼úÀ» ¹è¿ì´Â °ÍÀ» ÁÁ¾ÆÇÏ°í ´Ù¹æ¸é¿¡ °ü½ÉÀÌ ¸¹Àº ¿ÀÁö¶øÀïÀÌ °³¹ßÀÚ. ¾ó¸¶Àü±îÁö ¹«ÀÎÀá¼öÇÔÀ» ¸¸µå´Â °ÍÀ» °èȹÇÏ¿´À¸³ª µµÁßÇÏÂ÷ ÇÏ¿´°í, Áö±ÝÀº Àü Àηù¿¡ °øÇåÇÒ ´ë´ÜÇÑ ¼ÒÇÁÆ®¿þ¾î¸¦ ¸¸µå´Â °ÍÀ» ²Þ²Ù°í ÀÖ´Ù.


À̹ø Ä÷³Àº °¡»óÀÇ ½Ã³ª¸®¿À¸¦ ÅëÇØ ½ÇÁ¦ ÇÁ·ÎÁ§Æ® ÁøÇà Áß¿¡ ¹ú¾îÁú ¼ö ÀÖ´Â ¹®Á¦»óȲÀ» Á¦½ÃÇÏ°í µ¿½Ã¿¡ ÀÌ ¹®Á¦¸¦ ÇØ°áÇØ³ª°¡´Â °úÁ¤À» ¾Ë¾Æº¸µµ·Ï ÇϰڴÙ.

µîÀåÀι°

¡Ü Çã¿ì´ë ´ë¸® : ¸î´ÞÀü °æ·Â»ç¿ø °øÃ¤·Î »õ·Î ÀÔ»çÇÑ Àι°·Î Java¸¦ »ç¿ëÇØºÃ´Ù´Â ÀÌÀ¯¸¸À¸·Î  ³­»ý óÀ½À¸·Î ¾Èµå·ÎÀ̵å Ç÷§Æû¿¡ ±âÁ¸¿¡ C++·Î ÀÛ¼ºÇÑ ¼Ò½º¸¦ ¸¶À̱׷¹ÀÌ¼Ç ÇÏ´Â ¾÷¹«¸¦ ¸Â´Â´Ù. Çã¿ì´ë´Â ¸ÖÂÄ ÇÏÁö¸¸ ¼º°ú°¡ ¾ø´Ù°í ÀÏÁ¤¸¸ Â÷ÀåÀ¸·Î ºÎÅÍ Çã¿ì´ë¶ó´Â º°¸íÀ» ¾ò¾ú´Ù.

¡Ü ½ÅÀÍÇÑ ¼±¹è : Çã¿ì´ë ´ë¸®ÀÇ Çб³ ¼±¹è·Î ¸ð¹ÙÀÏ ºÐ¾ß¿¡¼­ ¾ÈÇØº»°Ô ¾ø´Â ´ë´ÜÇÑ ½Ç·ÂÀÚ ÀÌÁö¸¸, ÀÏÀ» ³Ê¹« »ç¶ûÇÏ´Â ³ª¸ÓÁö Àΰ£°ü°è´Â º°·Î ¼ÒÁúÀÌ ¾ø¾î º¸ÀÌ´Â ½Ã´ÏÄÃÇÑ ¼º°ÝÀÇ ¼ÒÀ¯ÀÚ, Çã¿ì´ë ´ë¸®ÀÇ Áú¹®¿¡ ¸Å¹ø Åü¸í½º·´°Ô ´ë´ä ÇÏÁö¸¸ ±× ¼Ó¸¶À½¿¡´Â ÈĹ踦 ½º½º·Î ±ú¿ìÄ¡°Ô ÇÏ·Á´Â ³ª¸§ÀÇ Ã¶ÇÐÀ» °¡Áö°í ÀÖ´Ù.

¡Ü ÀÏÁ¤¸¸ Â÷Àå : À̹ø ÇÁ·ÎÁ§Æ®ÀÇ Ã¥ÀÓÀÚ·Î, ÀÏ¿¡ ´ëÇÑ Ã¥ÀÓ°¨ÀÌ ÅõöÇÏÁö¸¸ »ó³ÉÇÑ ¼º°ÝÀº ¾Æ´Ï´Ù. ƯÈ÷ ÀÏÁ¤À» ¾î±â´Â »ç¶÷À» ¹«Ã´ ½È¾îÇÑ´Ù.


Çã¿ì´ë ´ë¸®´Â ¾ó¸¶Àü ÀÏÁ¤¸¸ Â÷ÀåÀ¸·Î ºÎÅÍ 1ÁÖÀϰ£ÀÇ ½Ã°£µ¿¾È ÀÌÀü ´©±º°¡°¡ C++ ·Î ÀÛ¼ºÇÑ ¹æ´ëÇÑ ¾çÀÇ xml ¹®¼­ parser¸¦ À̹ø ÇÁ·ÎÁ§Æ®¿¡ Àç»ç¿ë ÇÒ ¼ö ÀÖµµ·Ï ¾Èµå·ÎÀ̵å Ç÷§Æû¿¡ ¸¶À̱׷¹ÀÌ¼Ç Ç϶ó´Â Áö½Ã¸¦ ¹Þ¾Ò´Ù. Çã¿ì´ë ´ë¸®¿¡°Ô ÁÖ¾îÁø ½Ã°£Àº °íÀÛ 7ÀÏ. 7ÀÏ µ¿¾È Çã¿ì´ë ´ë¸®°¡ ¾î¶»°Ô ÀÌ ÇÁ·ÎÁ§Æ®¸¦ ÁøÇàÇÏ´ÂÁö ÇÔ²² ÁöÄѺ¸µµ·Ï ÇÏÀÚ.

¼±¹è, ¾Èµå·ÎÀÌµå ¾ÖÇø®ÄÉÀÌ¼Ç °³¹ßÀº Java·Î Çϴ°ÅÁö?
»ýÀü óÀ½ ¾Èµå·ÎÀ̵å Ç÷§Æû¿¡¼­ °³¹ßÀ» ½ÃÀÛÇÏ´Â Çã¿ì´ë ´ë¸®´Â ½ÅÀÍÇÑ ¼±¹è¸¦ ã¾Æ°¡¼­ Á¶¾ðÀ» ±¸ÇÏ°Ô µÇ¾ú´Ù.

“¼±¹è, Â÷Àå´Ô²² ¾Èµå·ÎÀ̵å Ç÷§Æû¿¡ ±âÁ¸¿¡ c++·Î ÀÛ¼ºÇÑ ¾öû³­ ¾çÀÇ parser ¼Ò½º¸¦ ¸¶À̱׷¹ÀÌ¼Ç Ç϶ó´Â Áö½Ã¸¦ ¹Þ¾Ò´Âµ¥, ³ª À̰Š´Ù java·Î ´Ù½Ã ¸¸µé¾î¾ß Çϴ°ǰ¡?”

¼±¹è´Â ÇѽÉÇÏ´Ù´Â ¹ÝÀÀÀ¸·Î ƯÀ¯ÀÇ ½Ã´ÏÄÃÇÑ ÇѼûÀ» ³»½¬¸ç ÀÌ·¸°Ô ¾ê±âÇÑ´Ù.

“¾Èµå·ÎÀ̵å= javaÀÇ °ø½ÄÀº ¾Æ´Ï¾ß. ¾Èµå·ÎÀ̵å Ç÷§ÆûÀÌ ¾î¶»°Ô ±¸¼ºµÅÀÖ´ÂÁö ¸ÕÀú È®ÀÎÇØ º¸´Â°Ô ¾î¶§?”


¾Èµå·ÎÀ̵å Ç÷§ÆûÀº Å©°Ô ¸®´ª½º Ä¿³Î°ú, C/C++·Î ÀÛ¼ºÇÑ ¶óÀ̺귯¸®(º¸Åë ³×ÀÌÆ¼ºê ¶óÀ̺귯¸®¶ó ºÎ¸¥´Ù), ¾Èµå·ÎÀ̵å ÀÀ¿ëÇÁ·Î±×·¥ÀÇ »À´ë¸¦ Á¦°øÇÏ´Â ¾ÖÇø®ÄÉÀÌ¼Ç ÇÁ·¹ÀÓ¿öÅ©¿Í ±âº» ¾ÖÇø®ÄÉÀ̼ÇÀ¸·Î ±¸¼ºµÅ ÀÖ´Ù. 

¸®´ª½º Ä¿³ÎÀº OSÀÇ ±âº» ±â´ÉÀΠŽºÅ©°£ÀÇ ½ºÄÉÁÙ¸µ°ú ¸Þ¸ð¸®, µð½ºÅ©, ³×Æ®¿öÅ© µîÀÇ ÀÚ¿øÀ» »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ½Ã½ºÅÛ ÄÝÀ» Á¦°øÇÑ´Ù. ÀÌ´Â ¸®´ª½º Ä¿³Î À­ºÎºÐ¿¡ ÃÊ·Ï»öÀ¸·Î Ç¥½ÃµÈ ³×ÀÌÆ¼ºê ¶óÀ̺귯¸®¸¦ ÅëÇØ ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ÆíÇÏ°Ô »ç¿ë ÇÒ ¼ö ÀÖ´Â ÇüÅ·ΠÁ¦°øµÈ´Ù.

¾Èµå·ÎÀ̵å ÀÀ¿ëÇÁ·Î±×·¥Àº ¾ÖÇø®ÄÉÀÌ¼Ç ÇÁ·¹ÀÓ¿öÅ©(ÀÀ¿ëÇÁ·Î±×·¥ÀÇ ±¸Á¶¸¦ Á¦°øÇϰí Á¦ÀÛ¿¡ µµ¿òÀ» ÁÖ´Â Java class·Î ±¸¼º)À» ÀÌ¿ëÇÏ°í ¿ª½Ã Java¾ð¾î·Î ÀÛ¼ºÇÑ´Ù.

ÀÌ JavaÆÄÀÏÀ» ¾Èµå·ÎÀ̵å SDK¸¦ ÀÌ¿ëÇØ ºôµåÇÏ¸é ³»ºÎÀûÀ¸·Î JavaÄÄÆÄÀÏ·¯¿Í dex converter¸¦ °ÅÃÄ Dalvik VM(¾Èµå·ÎÀ̵å ÀÀ¿ëÇÁ·Î±×·¥À» µ¿ÀÛ½ÃŰ´Â VMÀ¸·Î ÀϹÝÀûÀÎ Java VM°ú´Â ´Ù¸£´Ù.) À§¿¡¼­ µ¿ÀÛÇÏ´Â byte ÄÚµå·Î º¯È¯ÇÏ°Ô µÈ´Ù.

°á·ÐÀûÀ¸·Î ¾Èµå·ÎÀ̵å ÀÀ¿ëÇÁ·Î±×·¥(Java·Î ÀÛ¼º)Àº ¾ÖÇø®ÄÉÀÌ¼Ç ÇÁ·¹ÀÓ¿öÅ©(.jarÇüÅÂÀÇ Java class.)¸¦ ÀÌ¿ëÇØ VM¿¡¼­ Á¦°øÇÏ´Â ÄÚ¾î ¶óÀ̺귯¸®(core library) ±â´ÉÀ» »ç¿ëÇÏ°Ô µÇ°í, ÀÌ ÄÚ¾î ¶óÀ̺귯¸®´Â ¸®´ª½º Ä¿³Î À§¿¡¼­ µ¿ÀÛÇÏ´Â ´Ù¾çÇÑ C/C++ ¶óÀ̺귯¸®(c/c++)¸¦ È£ÃâÇÏ°Ô µÈ´Ù. ÀÌ ¶óÀ̺귯¸®´Â Çʿ信 µû¶ó ¸®´ª½º Ä¿³ÎÀÇ system callÀ» È£ÃâÇÏ°Ô µÈ´Ù. À§ ±×¸²¿¡¼­ È­»ìÇ¥ ¹æÇâÀ» µû¶ó °¡¸é¼­ È®ÀÎÇÏÀÚ.

À§ ±×¸²¿¡¼­ ¾Èµå·ÎÀÌµå ·±Å¸ÀÓ °èÃþ°ú ¶óÀ̺귯¸® °èÃþÀ» ¿¬°áÇÏ´Â ¿ÞÂÊ È­»ìÇ¥·Î Ç¥ÇöµÈ ºÎºÐ¿¡¼­ ÀϹÝÀûÀÎ ÇÔ¼öÈ£Ãâ °ü°è ¿Ü¿¡ Ãß°¡ÀûÀ¸·Î C/C++ ↔ java È£Ãâ »çÀÌÀÇ ‘glue’°¡ Á¸ÀçÇÑ´Ù. °á±¹ ÀÌ ´öºÐ¿¡ ¾Èµå·ÎÀ̵å ÇÁ·¹ÀÓ¿öÅ©´Â ÀÚ¿¬½º·´°Ô OSÀÇ º¹ÀâÇÑ ±â´ÉÀ» ¸®´ª½º Ä¿³Î·ÎºÎÅÍ ºô·Á ¾µ ¼ö ÀÖ´Â °ÍÀÌ´Ù.

Çã¿ì´ë ´ë¸®´Â °á±¹ C/C++ ↔ Java»çÀÌÀÇ ‘glue’¸¦ ¸¸µé¸é ±âÁ¸ ¼Ò½º¸¦ ¸®´ª½º »ó¿¡ Æ÷ÆÃ ÇÏ´Â Á¤µµÀÇ ³ë·ÂÀ¸·Î Àç»ç¿ë ÇÒ ¼ö ÀÖ°Ú´Ù´Â °á·ÐÀ» ³»¸®°í, °ð¹Ù·Î Java ↔ C/C++ ¸¦ È£Ãâ ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» ã¾Æº¸±â ½ÃÀÛÇß´Ù. 


 
Java ↔ C/C++ »çÀÌÀÇ glue´Â ¾î¶²°ÍÀ» »ç¿ëÇÒ±î?
ÀϹÝÀûÀ¸·Î Java¿¡¼­ C/C++ ¸ðµâÀ» »ç¿ëÇϱâ À§Çؼ­´Â ´ÙÀ½°ú °°Àº ¹æ¹ýÀ» »ç¿ëÇÑ´Ù.

1. Java Native Access (JNA)  

ÀÚ¹Ù Äڵ忡¼­ ³×ÀÌÆ¼ºê ÄÚµå¿Í °°Àº ÇüÅ·Π³×ÀÌÆ¼ºê ÇÔ¼ö¸¦ È£ÃâÇÏ´Â ¹æ½ÄÀ¸·Î ±âÁ¸ ÄÚµåÀÇ ÃÖ¼ÒÇÑÀÇ ¼öÁ¤À¸·Î ÀÀ¿ëÀÌ °¡´ÉÇØ, ÃÖ»óÀÇ ¹æ¹ýÀ¸·Î »ý°¢µÇ³ª ÇöÀç ¾Èµå·ÎÀ̵å Dalvik VM¿¡¼­ Áö¿øÇÏÁö ¾Ê´Â ¹æ¹ýÀÌ´Ù.

2. Java Native Interface (JNI)
Java ÃÊâ±âºÎÅÍ Á¸ÀçÇÑ Java/Native interface ¹æ¹ýÀ¸·Î ¾Èµå·ÎÀ̵å Dalvik VM¿¡¼­ Áö¿øÇÏ´Â ¹æ¹ýÀ¸·Î ½ÇÁ¦ ¾Èµå·ÎÀ̵å Ç÷§Æû ¼Ò½º ¿©·¯ ºÎºÐ¿¡¼­ »ç¿ëµÇ°í ÀÖ´Ù. ±×·¯³ª ÀÌ ¹æ½ÄÀº raw formÀ» ´Ù·ç´Â ÇüÅ·Π°³¹ßÇØ¾ß Çϱ⠶§¹®¿¡ °³¹ß ½Ã°£ÀÌ ¸¹ÀÌ ¼Ò¿äµÇ°í ¿¡·¯¸¦ ¹ß»ý ½Ãų¸¸ÇÑ ¿ä¼Ò°¡ ¸¹´Ù.

3. Simplified Wrapper and Interface Generator (SWIG)
JNI¸¦ Á» ´õ ½±°Ô »ç¿ë ÇÒ¼ö ÀÖµµ·Ï ÇØÁÖ´Â µµ±¸·Î C/C++ ÀÎÅÍÆäÀ̽º¸¦ Á¤ÀÇÇÑ ÆÄÀÏÀ» ÀÔ·Â ¹Þ¾Æ C/C++ JNI wrapper Äڵ带 »ý¼ºÇÑ´Ù. ÀÌ ¹æ¹ý ¿ª½Ã Dalvik VM°ú´Â ȣȯ¼º ¹®Á¦°¡ Á¸ÀçÇÑ´Ù.

Native library(C/C++) ·Î °³¹ßÇÒ °Í ÀÎÁö¿¡ ´ëÇÑ ¼±Åà ±âÁØ

¾Èµå·ÎÀ̵忡¼­´Â J2SEÀÇ ´ëºÎºÐÀÇ ±â´É°ú, ¾ÖÇø®ÄÉÀÌ¼Ç ÇÁ·¹ÀÓ¿öÅ©¸¦ ÅëÇØ ´Ù¾çÇÑ API ¼ÂÀ» Á¦°øÇϰí, Java¸¦ »ç¿ëÇÏ¿© ´ëºÎºÐÀÇ ÀÀ¿ëÇÁ·Î±×·¥À» Á¦ÀÛ Çϴµ¥ ºÎÁ·ÇÔÀÌ ¾øµµ·Ï ¹è·ÁÇϰí ÀÖ´Ù.

½Å±Ô °³¹ß½Ã ¾ÖÇø®ÄÉÀÌ¼Ç ÇÁ·¹ÀÓ¿öÅ©¸¦ ÅëÇØ Á¦°ø¹ÞÀ» ¼ö ¾ø´Â ÀϺΠ±â´É(´ëºÎºÐ ¿ÜºÎ ±â±â ³ª µð¹ÙÀ̽º Á¾¼ÓÀûÀÎ) ºÎºÐ°ú ¼º´ÉÀÌ ¾ÆÁÖ Áß¿äÇÑ ÀϺΠ±â´ÉÀ» Á¦¿ÜÇϰí´Â Java¸¦ »ç¿ëÇÏ¿© °³¹ßÇÏ´Â °ÍÀÌ ÇÁ·ÎÁ§Æ® Àå±âÀûÀÎ °üÁ¡¿¡¼­´Â ³ªÀº ÆÇ´ÜÀ̶ó »ý°¢µÈ´Ù.

C/C++·Î ÄÚµå·Î °³¹ßÀº À¯Áöº¸¼ö¿Í µð¹ö±ë Ãø¸é¿¡¼­ ¹ø°Å·Ó°í ºÒÆíÇÑ ºÎºÐÀÌ ÀÖÀ¸¸ç JNI¸¦ ÀÌ¿ëÇÏ¿© Java ÂÊÀ¸·Î glue¸¦ ¸¸µå´Â ÀÏÀÌ ¿¹»óÇÏ´Â °Í¸¸Å­ °£´ÜÇÑ ÀÏÀº ¾Æ´Ï±â ¶§¹®ÀÌ´Ù. ¿©±â¼­ Á¦½ÃÇÏ´Â °¡»óÀÇ ½Ã³ª¸®¿À ¿ª½Ã ÁÖÁ¦¸¦ À̲ø¾î °¡±â À§ÇØ ´Ü¼øÈ­½ÃŲ ¿¹ÀÏ »ÓÀÌÁö ½ÇÁ¦·Î ±âÁ¸¿¡ C/C++·Î ÀÛ¼ºÇÑ Äڵ带 ¸¶À̱׷¹ÀÌ¼Ç ÇÏ´Â ÀÛ¾÷ÀÌ ÁÖ¾îÁú °æ¿ì ¾ó¸¶³ª ÀÎÅÍÆäÀ̽º°¡ ´Ü¼øÇÑÁö, ±âÁ¸Äڵ忡¼­ Ç÷§Æû Á¾¼ÓÀûÀÎ ºÎºÐÀÌ ¾ó¸¶³ª ÀÖÀ¸¸ç À̰ÍÀ» ¾Èµå·ÎÀ̵å(Linux kernel)¿¡ Æ÷ÆÃÇϱâ À§Çؼ­ ¾ó¸¶³ª ³ë·ÂÀÌ ÇÊ¿äÇÑÁö, ȤÀº HTTP³ª STLµî ¾Èµå·ÎÀ̵å Native library´Ü¿¡¼­ ÃæºÐÈ÷ Á¦°øÇÏÁö ¾Ê´Â ±â´ÉÀ» »ç¿ëÇÑ ºÎºÐÀÌ À־ ÀçÀÛ¾÷À̳ª Ãß°¡ Æ÷ÆÃ ÀÛ¾÷ÀÌ ÇÊ¿äÇÑÁö ÃæºÐÈ÷ °í·ÁÇÏ¿© ±âÁ¸ ¸ðµâÀ» ÀçȰ¿ëÇÒ °ÍÀÎÁö, JavaÄÚµå·Î ´Ù½Ã ÀÛ¾÷ÇÒ °ÍÀÎÁö °áÁ¤ÇØ¾ß ÇÒ °Í ÀÌ´Ù.

Çã¿ì´ë ´ë¸®´Â Dalvik VM°úÀÇ È£È¯¼º ¹®Á¦¿Í º¸ÆíÀûÀ¸·Î »ç¿ëÇÏ´Â ±â¼úÀ̶ó´Â Á¡À» °¨¾ÈÇØ JNI¸¦ ÀÌ¿ëÇØ ÇÁ·ÎÁ§Æ®¸¦ ÁøÇàÇϱâ·Î Çß´Ù.

Á¡½É½Ã°£¿¡ Çã¿ì´ë ´ë¸®´Â ÀÚ½ÅÀÌ JNI¸¦ ÀÌ¿ëÇÏ¿© ±âÁ¸ parser¼Ò½º¸¦ °ÅÀÇ ÀçȰ¿ë ÇÒ¼öÀÖ´Â ¹æ¹ýÀ» »ý°¢ÇØ ³Â´Ù°í ½ÅÀÍÇÑ ¼±¹è¿¡°Ô ÀÚ¶ûÀ» ´Ã¾î³õ¾Ò´Ù. À̶§, ¹äÀ» ¸Ô´ø ½ÅÀÍÇÑ ¼±¹è´Â ÀÌ·± À̾߱⸦ ³²±ä µÚ, ¾Æ¹«Àϵµ ¾ø¾ú´Ù´Â µí ½Ä»ç¸¦ °è¼Ó Çß´Ù. ½ÅÀÍÇÑ ¼±¹è°¡ ³²±ä ¸»Àº ÀÌ·¸´Ù.

“±×·³ ¾Èµå·ÎÀÌµå ½Ã½ºÅÛ¿¡ Æ÷ÇÔÇØ¼­ ºôµå Çϰڴٴ ¾ê±â¾ß? ¹èÆ÷´Â ¾î¶»°Ô ÇҰǵ¥?”

±×·¸´Ù. ±×¸²¿¡¼­ º¸´Â C/C++ ¶óÀ̺귯¸®´Â ¾Èµå·ÎÀÌµå ½Ã½ºÅÛÀÇ ¿µ¿ªÀ¸·Î Çã¿ì´ë ´ë¸®´Â ¹èÆ÷¹æ¹ý¿¡ ´ëÇØ °í·ÁÇÏÁö ¸øÇÑ °ÍÀÌ´Ù. ¾Èµå·ÎÀÌµå ¿¡¹Ä·¹ÀÌÅ͸¦ ½ÇÇàÇϰí <È­¸é 1>¿¡¼­ ÃÊ·Ï»öÀ¸·Î Ç¥½ÃÇÑ C/C++ ¶óÀ̺귯¸® ÆÄÀÏÀÇ ½ÇÁ¦ À§Ä¡¸¦ È®ÀÎÇØº¸ÀÚ. ¾Æ·¡¿Í °°ÀÌ Ä¿¸Çµå â¿¡¼­ emulator¸¦ ½ÇÇàÇϰųª ÀÌŬ¸³½º IDE¸¦ ÅëÇØ emulator¸¦ ½ÇÇàÇÑ´Ù.

¿¡¹Ä·¹ÀÌÅͰ¡ Á¤»óÀûÀ¸·Î ½ÇÇàµÇ¸é À§¿Í °°ÀÌ ¿¡¹Ä·¹ÀÌÅÍ È­¸éÀ» È®ÀÎÇÒ ¼ö Àִµ¥, À̶§ Äֿܼ¡¼­´Â <¸®½ºÆ® 1>°ú °°ÀÌ adb ¸í·ÉÀ» ÀÌ¿ëÇÏ¿© shellÀ» ½ÇÇàÇÑ´Ù.

<¸®½ºÆ® 1> adb shellÀ» ÀÌ¿ëÇÏ¿© ³×ÀÌÆ¼ºê ¶óÀ̺귯¸® È®ÀÎÇϱâ
>adb shell
adb shell ÀÌ ½ÇÇàµÇ¸é ¾Æ·¡¿Í °°ÀÌ library path¸¦ È®ÀÎÇØº¸ÀÚ
#echo $LD_LIBRARY_PATH
#/system/lib
system/lib°¡ library path·Î ÀâÇôÀÖ´Â °ÍÀ» È®ÀÎÇϰí /system/lib directory·Î À̵¿ÇÑ´Ù.
#cd /system/lib

<¸®½ºÆ® 1>ÀÇ ³»¿ëÀ» <È­¸é 3>¸¦ ÅëÇØ È®ÀÎÇØº¸ÀÚ.

<È­¸é 3>¿¡¼­´Â ¾Èµå·ÎÀ̵å Ç÷§Æû¿¡¼­ Á¦°øÇÏ´Â ³×ÀÌÆ¼ºê ¶óÀ̺귯¸®°¡ À§Ä¡ÇÏ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

Çã¿ì´ë ´ë¸®°¡ ÁغñÇÏ´Â ÇÁ·ÎÁ§Æ®ÀÇ °á°ú¹°Àº ´Ù¿î·Îµå °¡´ÉÇÑ ÇüÅ·Π¹èÆ÷µÇ¾î¾ß Çϴµ¥ /system µð·ºÅ丮´Â ´Ù¿î·ÎµåÇÑ ¾ÖÇø®ÄÉÀ̼ÇÀÌ ¼³Ä¡ÇÒ ¼ö ÀÖ´Â ¿µ¿ªÀÌ ¾Æ´Ï±â ¶§¹®¿¡ /system µð·ºÅ丮 ´ë½Å /data µð·ºÅ丮¿¡¼­ µ¿ÀÛ ÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» ã¾Æ¾ß ÇÑ´Ù.

¾Èµå·ÎÀÌµå ½Ã½ºÅÛ À̹ÌÁö
¾Èµå·ÎÀÌµå ½Ã½ºÅÛ À̹ÌÁö´Â ¸®´ª½º ¿î¿µÃ¼Á¦¿¡¼­ ÆÄÀϽýºÅÛÀº ´Ü¼øÈ÷ ÀÚ·áÀÇ ÀúÀå±â´É »Ó ¾Æ´Ï¶ó ¿î¿µÃ¼Á¦ µ¿ÀÛ¿¡ ÇÊ¿äÇÑ Çʼö Á¤º¸¸¦ Æ÷ÇÔÇϰí ÀåÄ¡ °ü¸® µîÀÇ Æ¯º°ÇÑ ¿ëµµ·Îµµ »ç¿ëÇϹǷΠ¼±ÅÃÇ׸ñÀÌ ¾Æ´Ï¶ó Çʼö Ç׸ñÀÌ´Ù. ½Ã½ºÅÛ À̹ÌÁö´Â ¾Èµå·ÎÀ̵å ÇÁ·¹ÀÓ¿öÅ©¸¦ ±¸µ¿Çϱâ À§ÇØ ÇʼöÀûÀÎ Ç׸ñÀ¸·Î <¾Èµå·ÎÀ̵å SDK¼³Ä¡ µð·ºÅ丮>/platforms/<Ç÷§Æû¹öÀü>/images/system. img ¿¡¼­ È®ÀÎ ÇÒ ¼ö ÀÖ´Ù.

ÀÌ À̹ÌÁöÆÄÀÏÀº ½ÇÁ¦ ¿¡¹Ä·¹ÀÌÅͰ¡ ±¸µ¿µÉ ¶§ /system directory¿¡ ¸¶¿îÆ®ÇÏ°Ô µÇ´Âµ¥, À̳»¿ëÀº adb shellÀ» ½ÇÇà½ÃŲ ÈÄ ÃÖ»óÀ§ µð·ºÅ丮ÀÇ init.rcÆÄÀÏ¿¡¼­ È®ÀÎ ÇÒ ¼ö ÀÖ´Ù.

/system µð·ºÅ丮´Â ÀÓº£µðµåÇÏ¿© žÀçÇÒ ±âº» ÀÀ¿ëÇÁ·Î±×·¥À» Æ÷ÇÔÇØ ¾Èµå·ÎÀ̵å ÇÁ·¹ÀÓ¿öÅ©¿¡ ÇÊ¿äÇÑ ¶óÀ̺귯¸® ¼³Á¤ÆÄÀÏ µîÀÌ µé¾îÀÖ´Â ¿µ¿ªÀ¸·Î Ãß°¡·Î ´Ù¿î·Îµå¹ÞÀº ÀÀ¿ëÇÁ·Î±×·¥°ú´Â ±¸º°µÈ´Ù. ´Ù¿î·Îµå ¹ÞÀº ÀÀ¿ëÇÁ·Î±×·¥Àº /data µð·ºÅ丮¿¡ À§Ä¡ÇÏ°Ô µÈ´Ù.
 
¾Èµå·ÎÀ̵å SDK ¼³Ä¡
¾Õ¼­ ¼³¸íµÈ ºÎºÐµéÀ» ½Ç½ÀÇϱâ À§Çؼ­´Â ¾Èµå·ÎÀ̵å SDK¸¦ ¼³Ä¡ÇÏ°í ¹öÃß¾ó µð¹ÙÀ̽º¸¦ »ý¼ºÇØ¾ß Çϴµ¥, ÀÌ ºÎºÐÀº À̹ø Ä÷³ÀÇ ÁÖÁ¦¿Í´Â ¹þ¾î³ª¹Ç·Î ¾Æ·¡ URLÀ» Âü°íÇØ ¼³Ä¡Çϱ⠹ٶõ´Ù.

http://developer.android.com/sdk/index.html
 
Çã¿ì´ë ´ë¸®, NDK¿Í ¸¸³ª´Ù

´ÙÀ½³¯ ¹èÆ÷¹®Á¦·Î °í¹ÎÇÏ´ø Çã¿ì´ë ´ë¸®´Â ¾Æ·¡ÀÇ ¾Èµå·ÎÀÌµå °³¹ßÀÚ À¥»çÀÌÆ®¸¦ ÅëÇØ NDK¿¡ ´ëÇÑ ³»¿ëÀ» Á¢Çß´Ù.
 
http://developer.android.com/sdk/ndk/1.6_r1/index.html

NDK´Â C/C++·Î ÀÛ¼ºÇÑ ÄÚµå·Î ¸®´ª½º OS ±â¹ÝÀÇ ARM binary¸¦ »ý¼ºÇϱâ À§ÇÑ Å©·Î½º ÅøÃ¼ÀÎÀ» Á¦°øÇÑ´Ù. ¿©±â¼­ ‘Å©·Î½º ÅøÃ¼ÀÎ’À̶õ Ÿ±ê¸Ó½Å°ú´Â ´Ù¸¥ ȯ°æ¿¡¼­ Ÿ±ê ¸Ó½Å¿ëÀ¸·Î ¹ÙÀ̳ʸ®¸¦ »ý¼ºÇÒ ¼ö ÀÖµµ·Ï Á¦°øµÇ´Â ÅøÀε¥ ÄÄÆÄÀÏ·¯ ¸µÄ¿ ±×¸®°í ±âŸ ÄÄÆÄÀÏ¿¡ ÇÊ¿äÇÑ À¯Æ¿¸®Æ¼¸¦ Æ÷ÇÔÇϰí ÀÖ´Ù.

<¸®½ºÆ® 2> Application.mk ÆÄÀÏ 

APP_PROJECT_PATH := $(call my-dir)/project
APP_MODULES      := hello-jni

ÀϹÝÀûÀÎ x86ȣȯ CPUÀÇ À©µµ¿ì³ª ¸®´ª½º PC±â¹Ý ȯ°æ¿¡¼­ ARMÀ̳ª MIPSµî ÀÓº£µðµå ¸Ó½ÅÀÇ CPU¿¡¼­ µ¿ÀÛÇÏ´Â ¹ÙÀ̳ʸ®¸¦ ÄÄÆÄÀÏ ÇÒ ¼ö ÀÖµµ·Ï ÇØÁØ´Ù.

±×¸®°í ¾Æ·¡¿Í °°Àº ¶óÀ̺귯¸®¸¦ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï header fileÀ» Á¦°øÇϴµ¥, ÀÌ ³»¿ëÀº ¾Õ¼­ Á¦½ÃµÈ adb ½©¿¡¼­ È®ÀÎÇÑ /system/lib µð·ºÅ丮¿¡ ÀÖ´Â ¶óÀ̺귯¸®ÀÇ ÀϺÎÀÓÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

(1)  libc(C library)
(2)  libm(math library)
(3)  JNI interface
(4)  libz (zip ¾ÐÃà library)
(5)  liblog(Android logging library)
(6)  OpenGL ES library (3D graphic library, NDK 1.6¹öÀüºÎÅÍ)
 
Ãß°¡ÀûÀ¸·Î ¾Èµå·ÎÀ̵å ÀÀ¿ëÇÁ·Î±×·¥ ÆÐŰÁö ÆÄÀÏ(.apk)¿¡ native library¸¦ Æ÷ÇÔÇÒ ¼ö ÀÖ´Â ¹æ¹ýÀ» Á¦°øÇÑ´Ù. Çã¿ì´ë ´ë¸®°¡ ã´ø ¹Ù·Î ±× ¹æ¹ýÀÌ´Ù. ±×·³ ÀÌÁ¦ Çã¿ì´ë ´ë¸®¿Í ÇÔ²² NDK¸¦ ¼³Ä¡ÇØ º¸µµ·Ï ÇÏÀÚ.
 
(1) http://developer.android.com/sdk/ndk/1.6_r1/index.html ¿¡¼­ À©µµ¿ì¿ë ÆÐŰÁö¸¦ ´Ù¿î·Îµå ¹Þ´Â´Ù.
(2) Àû´çÇÑ À§Ä¡¿¡ (1)¿¡¼­ ´Ù¿î·Îµå ¹ÞÀº ¾ÐÃàÆÄÀÏÀ» Ǭ´Ù.
(3) www.cygwin.com¿¡¼­ ÃֽŠcygwin À» ¼³Ä¡ÇÑ´Ù.
(4) ¼³Ä¡ÇÑ Cygwin bash shellÀ» ½ÇÇàÇϰí bash shell¿¡¼­ /cygdrive/<NDK ¼³Ä¡ °æ·Î> ·Î À̵¿ÇØ ‘Build/host-setup.sh’ ¶ó°í ¸í·ÉÀ» ¼öÇàÇÑ´Ù.

ÀÌó·³ ¼øÂ÷ÀûÀ¸·Î µû¶óÇÏ°í ³ª¸é, <È­¸é 4>¿Í °°ÀÌ ‘Host setup complete…’¶ó´Â ¹®±¸°¡ ³ªÅ¸³ª´Âµ¥, ÀÌ·² °æ¿ì ¼Â¾÷ÀÌ ¼º°øÇÑ °ÍÀÌ´Ù.

ÀÌÁ¦ ¼³Ä¡°¡ ³¡³µÀ¸´Ï ¸ÕÀú NDK¿¡ »ùÇ÷ΠÁ¦°øµÇ´Â hello-jni ¿¹Á¦¸¦ ºôµåÇØ º¸ÀÚ. ºôµå½Ã¿¡´Â $make APP=hello-jni¶ó°í ¸í·ÉÀ» ¼öÇàÇÑ´Ù. Àçºôµå½Ã¿¡´Â -B ¿É¼ÇÀ» »ç¿ëÇÏ°í ½ÇÁ¦ build command¸¦ ¸ðµÎ È®ÀÎÇÏ°í ½ÍÀº °æ¿ì V=1 ¿É¼ÇÀ» »ç¿ëÇÑ´Ù.

ºôµå°á°ú·Î apps/hello-jni/project/libs/areabi/libhello-jni.so°¡ »ý¼ºµÇ¾ú´ÂÁö È®ÀÎÇÏÀÚ.

¾î¶»°Ô NDK¿¡¼­ Á¦°øÇÏ´Â ÅøÀ» ÀÌ¿ëÇÏ¿© ¿¹Á¦°¡ ºôµå µÇ´ÂÁö ¾Ë°í ½Í´Ù¸é, apps/hello-jni/Application.mk ¿Í sources/ hello-jni/Android.mk ÆÄÀÏÀ» ¿­¾îº¸ÀÚ.
ÀϹÝÀûÀÎ make ÆÄÀϰú °°Àº ÇüÅÂÀÌ¸ç ºôµå¸¦ À§ÇÑ º¯¼ö¸¦ ¼³Á¤ÇÏ´Â ºÎºÐÀ» È®ÀÎ ÇÒ ¼ö ÀÖ´Ù. ¶ÇÇÑ Application.mk ÆÄÀÏ¿¡´Â ÀÀ¿ëÇÁ·Î±×·¥ ¿¡¼­ ¾î¶² ³×ÀÌÆ¼ºê ¶óÀ̺귯¸® ¸ðµâÀ» »ç¿ëÇÒ °ÍÀÎÁö¿¡ ´ëÇØ ±â¼úÇØ¾ß ÇÑ´Ù. ÀÌ ºÎºÐÀº ³×ÀÌÆ¼ºê ¶óÀ̺귯¸®¸¦ ºôµåÇÏ´Â °Í°ú´Â Á÷Á¢ÀûÀÎ °ü°è°¡ ¾øÀ¸³ª ÀÌ ÆÄÀÏÀ» ÂüÁ¶ÇØ ºôµåÇÒ Å¸±ê ¸ðµâÀ» °áÁ¤Çϱ⠶§¹®¿¡ ÇʼöÀûÀ¸·Î ÀÛ¼ºÇØ¾ß ÇÑ´Ù.

<¸®½ºÆ® 3> Android.mk ÆÄÀÏ
… Áß·«…
 
LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES   := hello-jni.c
 
include $(BUILD_SHARED_LIBRARY)

Android.mk ÆÄÀÏ¿¡´Â ½ÇÁ¦ shared library·Î ºôµåÇÒ c/c++ ÆÄÀÏ ¸ñ·Ï °ú »ç¿ëÇÏ´Â ¶óÀ̺귯¸® ¸ñ·Ï, compile/link option µîÀ» ±â¼úÇØ¾ß Çϴµ¥, À̶§ º¯¼ö LOCAL_MODULE ¿¡ ¸ðµâÀ̸§À» ±â¼úÇÏ°Ô µÈ´Ù. ÀÌ¾î º¯¼ö LOCAL_SRC_FILES ¿¡ ºôµåÇÏ·Á°í ÇÏ´Â ¼Ò½º ÆÄÀϸíÀ» ±â¼úÇϰí, ÆÄÀÏ¸í »çÀÌ´Â ½ºÆäÀ̽º·Î ±¸º°ÇÑ´Ù.

¸¶Áö¸· ÁÙÀÌ shared library, Áï .so ÆÄÀÏ·Î ºôµå Çϰڴٴ ¶æÀÌ´Ù. ÀÌ·¸°Ô ±â¼úÇϸé ÀÚµ¿À¸·Î lib+¸ðµâ¸í+.so ÇüÅÂÀÇ ÆÄÀÏÀ» ºôµåÇÏ°Ô µÈ´Ù.

Ãß°¡·Î ƯÁ¤ ¶óÀ̺귯¸®¸¦ »ç¿ëÇϱâ À§Çؼ­´Â ¾Æ·¡¿Í °°ÀÌ LOCAL_LDLIBS º¯¼ö¿¡ ³»¿ëÀ» ±â¼úÇÑ´Ù. ¾Æ·¡´Â ¾Èµå·ÎÀÌµå ·Î±× ¶óÀ̺귯¸®¸¦ »ç¿ëÇϱâ À§ÇÑ ¿¹ÀÌ´Ù. ¶ÇÇÑ ÀÌ¿¡ ´ëÇÑ Ãß°¡ÀûÀÎ ³»¿ëÀº NDK document Æú´õÀÇ ‘ANDROID-MK.TXT’,’APPLICATION-MK.TXT’,’HOWTO.TXT’ ¹®¼­¸¦ Âü°íÇϱ⠹ٶõ´Ù.

LOCAL_LDLIBS     :=-L$(SYSROOT)/usr/lib/ -llog

ÀÌÁ¦ ³×ÀÌÆ¼ºê ¶óÀ̺귯¸® ºôµå°¡ ³¡³µÀ¸´Ï ³×ÀÌÆ¼ºê ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ´Â Java Äڵ带 »ìÆìº¸ÀÚ. <È­¸é 6>°ú °°ÀÌ apps/hello-jni ÇÁ·ÎÁ§Æ®¸¦ ÀÌŬ¸³½º¿¡¼­ ¿­¾îº¸µµ·Ï ÇÏÀÚ. ¿ÞÂÊ ÆÐŰÁö ÀͽºÇ÷η¯ â¿¡¼­ ¸¶¿ì½º ¿À¸¥ÂÊ ¹öưÀ» Ŭ¸¯ÇÑ µÚ Import ¸Þ´º¸¦ ¼±ÅÃÇÑ´Ù.

À̾î Existing Projects into Workspace¸¦ ¼±ÅÃÇÑÈÄ app/hello-jni/ µð·ºÅ丮¸¦ ¼±ÅÃÇÑ´Ù. À̸¦ ½ÇÇàÇϸé <È­¸é 7>°ú °°ÀÌ Package Explorer¿¡  HelloJni ÇÁ·ÎÁ§Æ®°¡ ·ÎµùµÇ¸é ¼º°øÇѰÍÀÌ´Ù.

ÀÌŬ¸³½º ¸Þ´º¿¡¼­ Run->RunÀ» ¼±ÅÃÇϰųª ´ÜÃàŰ·Î Ctrl+F11À» ¼±ÅÃÇÏ¸é ¿¡¹Ä·¹ÀÌÅÍ¿¡¼­ Hello-jni ÇÁ·ÎÁ§Æ®ÀÇ °á°ú¸¦ È®ÀÎÇÒ¼ö ÀÖ´Ù.

¿¡¹Ä·¹ÀÌÅͰ¡ ½ÇÇàµÇ´Âµ¥ Á¦¹ý ½Ã°£ÀÌ °É¸®¹Ç·Î Àγ»½ÉÀ» °¡Áö°í ±â´Ù¸®±â ¹Ù¶õ´Ù. ¿¡¹Ä·¹ÀÌÅ͸¦ µ¿ÀÛÇϱâ À§Çؼ­´Â Ç÷§Æû ¹öÀü¿¡ ¸Â´Â AVD ÆÄÀÏÀ» ¹Ì¸® »ý¼ºÇØ¾ß Çϴµ¥ ÀÌ ³»¿ëÀº http://developer.android.com/guide/developing/eclipse-adt.htmlÀ» Âü°íÇÏ±æ ¹Ù¶õ´Ù.

´õºÒ¾î ÀÌÀü¿¡ adb shell ¸í·ÉÀ» ÀÌ¿ëÇÑ ¾Èµå·ÎÀÌµå ÆÄÀϽýºÅÛÀ» »ìÆìº¸¾Ò´Âµ¥, À̹ø¿¡´Â ÀÌŬ¸³½º IDE¿¡¼­ DDMSÅøÀ» ÀÌ¿ëÇÏ¿© ¼Õ½±°Ô ÆÄÀϽýºÅÛÀ» È®ÀÎÇØº¸ÀÚ. À̶§ ÀÌŬ¸³½º Åø¹Ù ¿À¸¥Æí¿¡¼­ DDMS perspective ¹öưÀ» ¼±ÅÃÇÑ´Ù. ¿À¸¥Æí¿¡ File Explorer âÀ» ÀÌ¿ëÇÏ¿© data/data/com.example.hellojni Æú´õÀÇ ³»¿ëÀ» È®ÀÎÇÒ ¼ö ÀÖÀ¸¸ç, libÆú´õ¾Æ·¡¿¡ libhello-jni.so ÆÄÀÏÀÌ ÀÖ´Â °Í ¶ÇÇÑ È®ÀÎÇÒ ¼ö ÀÖ´Ù.

<È­¸é 9>¿¡¼­ º¸¿©Áöµí, °á±¹ ¾Èµå·ÎÀ̵å ÀÀ¿ëÇÁ·Î±×·¥Àº system/lib Æú´õÀÇ ¶óÀ̺귯¸® À̿ܿ¡ /data/data/<ÀÚ½ÅÀÇ packageÀ̸§>/lib ¾Æ·¡ ³×ÀÌÆ¼ºê ¶óÀ̺귯¸®¸¦ Ãß°¡·Î Âü°íÇÏ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.
 
³×ÀÌÆ¼ºê ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ´Â Java ÄÚµå ¸Àº¸±â 

Çã¿ì´ë ´ë¸®´Â JavaÄÚµå ¿¡¼­ ¾î¶»°Ô C·Î ÀÛ¼ºÇÑ ³×ÀÌÆ¼ºê Äڵ带 Âü°íÇÏ´ÂÁö ±Ã±ÝÇØÁ³´Ù. À̹ø¿¡´Â Çã¿ì´ë ´ë¸®¿Í ÇÔ²² src/com/example/HelloJni.java Äڵ带 »ìÆìº¸ÀÚ

<¸®½ºÆ® 4> HelloJni.java ÆÄÀÏ
… Áß·«…
public class HelloJni extends Activity
{
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        TextView  tv = new TextView(this);
       tv.setText( stringFromJNI() ); //-- (3)
        setContentView(tv);
    }
 
public native String  stringFromJNI(); //-- (1)
 
… Áß·«…
   static {
        System.loadLibrary("hello-jni"); //-(2)
    }
}

<¸®½ºÆ® 4>´Â stringFromJNI ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ¾òÀº ¹®ÀÚ¿­À» textView¿¡ ³»¿ëÀ¸·Î ³Ö¾îÁÖ´Â °£´ÜÇÑ ¼Ò½º·Î, 3°¡Áö Àǹ̷ΠÀÌ¿ëµÈ´Ù. 

1) native Ű¿öµå¸¦ ºÙÇô¼­ ¼±¾ðºÎ¸¸ ÀÛ¼ºÇÑ´Ù. ³×ÀÌÆ¼ºê ¶óÀ̺귯¸®¿¡ ±¸ÇöºÎ°¡ ÀÖÀ½À» ¾Ë·ÁÁØ´Ù.

2) static {..} ºÎºÐÀº ÀÌ class°¡ ·ÎµùµÉ ¶§ È£ÃâµÇ´Â µÇ´Âµ¥ À̶§ ‘hello-jni’ ¶ó´Â À̸§ÀÇ ³×ÀÌÆ¼ºê ¶óÀ̺귯¸®¸¦ ·ÎµùÇ϶ó´Â ÀǹÌÀÌ´Ù.

3) ³×ÀÌÆ¼ºê ¶óÀ̺귯¸® ÇÔ¼ö¶óµµ º¸ÅëÀÇ Java ¸Þ¼Òµå¿Í °°Àº ¹æ½ÄÀ¸·Î »ç¿ëÇÑ´Ù.
 
À̾î Source/samples/hello-jni.c ÆÄÀÏÀ» ¿­¾î¼­ ³×ÀÌÆ¼ºê ¶óÀ̺귯¸® ±¸ÇöºÎµµ ÇÔ²² »ìÆìº¸µµ·Ï ÇÏÀÚ.

<¸®½ºÆ® 5> ³×ÀÌÆ¼ºê ¶óÀ̺귯¸® ±¸ÇöºÎ ÄÚµå 

Jstring Java_com_example_hellojni_HelloJni_stringFromJNI( JNIEnv* env,
                                            jobject thiz )
{
    return (*env)->NewStringUTF(env, "Hello from JNI !")
}

<¸®½ºÆ® 5>¸¦ º¸¸é ÇÔ¼öÀ̸§ ¾Õ¿¡ ‘Java_com_example_ hellojni_HelloJni_’ °¡ ºÙ¾î Àִµ¥, ÀÌ ºÎºÐÀº JNI ÇÔ¼öÀ̸§ ±ÔÄ¢¿¡ ÀÇÇØ package¸í_Ŭ·¡½º¸íÀÌ Java¿¡¼­ ¼±¾ðÇÑ ÇÔ¼ö À̸§ ¾Õ¿¡ ºÙ°Ô µÈ´Ù. ÇÔ¼öÀÇ ³»¿ëÀº ´Ü¼øÈ÷ “Hello from JNI!” ¶ó´Â ¹®ÀÚ¿­À» Java¿¡¼­ »ç¿ëÇÏ´Â String ŸÀÔÀ¸·Î º¯È¯ÇÏ¿© ¹ÝȯÇÏ´Â ³»¿ëÀÌ´Ù.

 

Âü°íÀÚ·á 
1. http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/jniTOC.html
2. http://developer.android.com/sdk/ndk/1.6_r1/index.html
3. http://www.aton.com/android-native-libraries-for-java-applications/
4. http://www.swig.org/

aboutmenu