C/C++¤Ç¥Í¥¤¥Æ¥£¥Ö¥³¡¼¥É¤ÇAndroid¥¢¥×¥ê¤òºî¤í¤¦
Android NDK¤òƳÆþÊýË¡¤Ë¤Ä¤¤¤Æ(by¥¢¥Ö¥Ê¥¤¤ª·»¤Á¤ã¤ó)

¡ûƳÆþ¤Î¥á¥ê¥Ã¥È
­¡¼ÂºÝ®ÅÙº¹¤ÏVM²ð¤·¤Æ¤Ê¤¤¤Î¤ÇJava¤ËÈæ¤Ù¤Æ£±£°Çܤ¯¤é¤¤Â®¤¤ 
http://labs.techfirm.co.jp/android/iguchi/1782 
¡ÊÃí¡§ºÇ¶á¤ÏñÂΤÇÆ°¤«¤»¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤­¤¿¤é¤·¤¤¡Ë 

­¢Android SDK¤Ç¤Ï¤Þ¤À¼ÂÁõ¤µ¤ì¤Æ¤Ê¤¤µ¡Ç½¤¬»È¤¨¤ë
¡ÊOpenGL ES¤Î´Ø¿ô´Ø·¸¤È¤«¡Ë

windowsƳÆþ¤Ç°Ê²¼¤Ï¤Þ¤Ã¤¿ÅÀ¤Î¥á¥â¡Ê»²¹Í¤Þ¤Ç¤Ë¡Ë 
¡¦Cygwin¤¬É¬ÍפÇƳÆþ»þ¤Ë 
gcc 
gdb 
make 

¤Ë¥Á¥§¥Ã¥¯¤òÉÕ¤±¤Æ¡ÊSkip¾õÂÖ¤ò²ò½ü¤·¤Æ¡Ë¡¢¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë 

¡¦C/C++¥Õ¥¡¥¤¥ë¤ò¥Ó¥ë¥É¤¹¤ë¤Ë¤ÏAndroid.mk¤òÍÑ°Õ¤¹¤ë 
ºÇ¿·ÈÇandroid-ndk-r5b¤Ïndk-build¤ò¥·¥§¥ë¡ÊCygwinÅù¡Ë¤Ç¼Â¹Ô¤¹¤ë 
¤½¤ÎºÝ¡¢¥Ç¥£¥ì¥¯¥È¥ê¤Ï¥×¥í¥¸¥§¥¯¥È¤Î¥Ñ¥¹¤Þ¤Ç°ÜÆ°¤·¤Æ 
¥Õ¥ë¥Ñ¥¹¤Çndk-build¤ò»ØÄꤷ¤Æ¥·¥§¥ë¥¹¥¯¥ê¥×¥È¤ò¼Â¹Ô¤¹¤ë 
(¥×¥í¥¸¥§¥¯¥È¤Î¥Ñ¥¹¤«¤éndk-build¤ò¼Â¹Ô¤¹¤ë) 
android-ndk¤Î¥Õ¥©¥ë¥À¤ò 

C:\Cygwin/home/¥æ¡¼¥¶Ì¾/android-ndk-r5b 

¤ËÃÖ¤¯¤ÈCygwin¤ÎÀßÄê¤ò¤·¤Ê¤¯¤Æ¤¤¤¤¤Î¤Ç¥Ó¥ë¥É¤¹¤ë¤È¤­³Ú 
¥Ó¥ë¥É¤Î»ÅÊý¤Ï¤³¤³»²¾È 
http://www.nakamura-shoten.com/software/androidmemo/android_ndk.php 

¥×¥í¥¸¥§¥¯¥È¤Ëlibs/armeabi/lib¥é¥¤¥Ö¥é¥ê̾.so¥Õ¥¡¥¤¥ë¤¬ºîÀ®¤µ¤ì 
¤³¤Î.so¥Õ¥¡¥¤¥ë¤òAndroid SDK¤«¤é¸Æ¤Ó½Ð¤¹¡ÊÀèƬ¤Ëlib¤Ï¤«¤Ê¤é¤º¤Ä¤¯ÌÏÍÍ¡Ë 
¡¦£Î£Ä£Ë¤Î¸Æ¤Ó½Ð¤·´Ø¿ô¤Ï£Ê£á£ö£á¤Î¥Ñ¥Ã¥±¡¼¥¸Ì¾¡¢¸Æ¤Ó½Ð¤·¥¯¥é¥¹Ì¾¤Ë°Í¸¤¹¤ë 

£Ê£Î£É(Java Native Interface)¤Ë´Ø¤·¤Æ¤Ï¤³¤Á¤é¤ò»²¹Í 
http://www.fireproject.jp/feature/jni/index.html 
http://www.ne.jp/asahi/hishidama/home/tech/java/jni_code.html 
¶ñÂÎŪ¤Ë¤Ï¼¡¤Î´¶¤¸ 
Java_¥Ñ¥Ã¥±¡¼¥¸Ì¾_¥Ñ¥Ã¥±¡¼¥¸³ÈÄ¥»Ò_¸Æ¤Ó½Ð¤·¥¯¥é¥¹Ì¾_´Ø¿ô̾ 

¤¿¤È¤¨¤Ð¡¢Java¦¤Î¥Ñ¥Ã¥±¡¼¥¸Ì¾¤È¸Æ¤Ó½Ð¤·¥¯¥é¥¹Ì¾¤¬ 

package android.app; 
public class MainActivity extends Activity { 
} 

¤Ê¤é¤Ð¡¢Android SDK¦¤«¤é¸Æ¤Ó½Ð¤·¤¿¤¤Android NDK´Ø¿ô̾¤Ï 

jint Java_android_app_MainActivity_call(JNIEnv* env, jobject thiz¡Ë 

¤È¤¤¤¦¤è¤¦¤Ê̾Á°¤Î´Ø¿ô¤Ë¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤ 

¤Ê¤ª¡¢Android SDK¦¤«¤é¸Æ¤Ó½Ð¤¹¤È¤­¤Ï 

// static¥Õ¥£¡¼¥ë¥É¤Ç°ìÅ٤Τ߸ƤӽФ· 
static { 
System.loadLibrary("¥é¥¤¥Ö¥é¥ê̾"); 
} 

¥é¥¤¥Ö¥é¥êÆɤ߹þ¤ß¤Ë¤Ï¡¢System.loadLibary¥á¥½¥Ã¥É¤ò»È¤¦ 
¸Æ¤Ó½Ð¤¹´Ø¿ô¤Ï¼¡¤Î¤è¤¦¤Ënative¥­¡¼¥ï¡¼¥É¤òÉÕ¤±¤Æ¥Õ¥£¡¼¥ë¥ÉÀë¸À¤·¤È¤¯ 

public native int call(int x, int y); 

¼ÂºÝ»È¤¦¤È¤­¤Ï¤³¤ó¤Ê´¶¤¸¤ÇÉáÄ̤˸ƤӽФ»¤ÐÎɤ¤ 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 

TextView tv = new TextView(this); 
tv.setText("add(5, 3)->" + call(5, 3)); 


setContentView(tv); 
} 


¤³¤Î¤Þ¤Þ¤À¤ÈNDK¤òÁ´ÉôCygwin¤«¤é¥³¥Þ¥ó¥É¤Ç¥Ó¥ë¥É¤¹¤ë±©Ìܤˤʤ뤷¡¢ 
¥¤¥ó¥¯¥ë¡¼¥É¥é¥¤¥Ö¥é¥ê¤¬»È¤¨¤ë¤Î¤«¤â¨ºÂ¤Ë¤ï¤«¤é¤Ê¤¤¤·¡¢ 
¥¤¥ó¥Æ¥ê¥»¥ó¥¹¤â»È¤¨¤Ê¤¤¤Î¤ÇÈó¾ï¤ËÂçÊÑ 

¤½¤³¤Ç£Ö£Ã¡Ü¡Ü¤«¤éNDK¤ò¥³¥ó¥Ñ¥¤¥ë¤Ç¤­¤ë¤â¤Î¡ÊÀßÄê¥Õ¥¡¥¤¥ë¡Ë 
¤ò¸«¤Ä¤±¤ÆƳÆþ¡ÊƳÆþ¤¹¤ë¤Î·ë¹½ÂçÊѤÀ¤±¤É¡¦¡¦¡¦¡Ë 
http://d.hatena.ne.jp/zunchax/20110218/1298000472 
ƳÆþ¤Î¥á¥ê¥Ã¥È¤Ïmakefile¤òºî¤é¤Ê¤¯¤Æ¤è¤¤¤·¡ÊÂ礭¤¤¡ª¡ª¡Ë 
¥¤¥ó¥Æ¥ê¥»¥ó¥¹µ¡Ç½¤¬»È¤¨¤ë¡ÊÂ礭¤¤¡ª¡ª¡Ë 
ƳÆþ¤Î¤á¤ó¤É¤¯¤µ¤µº¹¤·°ú¤¤¤Æ¤âÆþ¤ì¤ë²ÁÃͤ¢¤ë¤«¤Ê¤È¡¦¡¦¡¦ 

Ãí°Õ¤È¤·¤Æ¤Ï¡¢ant¤ò¿·µ¬¤ËÆþ¤ì¤ë¿Í¤Ï 
¤³¤Î¥Ú¡¼¥¸¤ÎºÇ¸å¤Î¤Û¤¦¤Ë¤¢¤ëant¤ÎJAVA_HOME¤Î´Ä¶­¥Ñ¥¹¤ÎÀßÄê¤ò 
¥Ð¥Ã¥Á¥Õ¥¡¥¤¥ëµ¯Æ°¤¹¤ëÁ°¤Ë¤·¤Æ¤ª¤¯¤³¤È 

¤¢¤È¡¢¼«Ê¬¤Ç¿·¤·¤¯ºî¤ë¤È¤­¤Ï 
local.properties 
build.xml 
¤¬É¬Íפˤʤë¤Î¤Ç 
Ëè²ó¡¢¥³¥Ô¡¼¤¹¤ë¤³¤È 

¤³¤ì¤Ç 
¡¦Android SDK¤ÏEclipse 
¡¦Android NDK¤ÏVC++ 
¤Ç½ñ¤±¤ë´Ä¶­¤¬À°¤¤¤Þ¤·¤¿

Æä˽èÍý¤¬½Å¤¤¡¢ÉÁ²è¡ÊOpenGL ES¡Ë²ó¤ê¤ÏÁ´ÉôNDK¤Ç½ñ¤­¤¿¤¤¤Ç¤¹¤Í

¥Ð¡¼¥¸¥ç¥ó2.3¤Ë¥¢¥Ã¥×¥°¥ì¡¼¥É¤¹¤ì¤Ð²»À¼½èÍý¤âOpenSL ES¤Ç¤Ç¤­¤ë¤Î¤Ç
´°Á´¤ËC/C++¤ÇAndroid¥²¡¼¥à¤¬ºîÀ®¤Ç¤­¤Þ¤¹


¥È¥Ã¥×   ¿·µ¬ °ìÍ÷ ñ¸ì¸¡º÷ ºÇ½ª¹¹¿·   ¥Ø¥ë¥×   ºÇ½ª¹¹¿·¤ÎRSS