C/C++¤Ç¥Í¥¤¥Æ¥£¥Ö¥³¡¼¥É¤ÇAndroid¥¢¥×¥ê¤òºî¤í¤¦ Android NDK¤òƳÆþÊýË¡¤Ë¤Ä¤¤¤Æ(by¥¢¥Ö¥Ê¥¤¤ª·»¤Á¤ã¤ó) ¡ûƳÆþ¤Î¥á¥ê¥Ã¥È ¡¼ÂºÝ®ÅÙº¹¤ÏVM²ð¤·¤Æ¤Ê¤¤¤Î¤ÇJava¤ËÈæ¤Ù¤Æ£±£°Çܤ¯¤é¤¤Â®¤¤ http://labs.techfirm.co.jp/android/iguchi/1782 ¡ÊÃí¡§ºÇ¶á¤ÏñÂΤÇÆ°¤«¤»¤ë¤è¤¦¤Ë¤Ê¤Ã¤Æ¤¤¿¤é¤·¤¤¡Ë ¢Android SDK¤Ç¤Ï¤Þ¤À¼ÂÁõ¤µ¤ì¤Æ¤Ê¤¤µ¡Ç½¤¬»È¤¨¤ë ¡ÊOpenGL ES¤Î´Ø¿ô´Ø·¸¤È¤«¡Ë °Ê²¼Æ³ÆþÊýË¡ ¡¦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¤«¤é¥³¥Þ¥ó¥É¤Ç¥Ó¥ë¥É¤¹¤ë±©Ìܤˤʤ뤷¡¢ ¥¤¥ó¥¯¥ë¡¼¥É¥é¥¤¥Ö¥é¥ê¤¬»È¤¨¤ë¤Î¤«¤â¨ºÂ¤Ë¤ï¤«¤é¤Ê¤¤¤·¡¢ ¥¤¥ó¥Æ¥ê¥»¥ó¥¹¤â»È¤¨¤Ê¤¤¤Î¤ÇÈó¾ï¤ËÂçÊÑ °Ê²¼Windows¤Ç¤ÎƳÆþÊýË¡¤Ç¤¹ ¡ÊMac¤ÏVC¡Ü¡Ü¤Ê¤¤¤«¤éÃΤé¤ó¡¦¡¦¡¦¡Ë ¤½¤³¤Ç£Ö£Ã¡Ü¡Ü¤«¤é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¥²¡¼¥à¤¬ºîÀ®¤Ç¤¤Þ¤¹