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Åù¡Ë¤Ç¼Â¹Ô¤¹¤ë
¡ÊºÇ¿·ÈǤÏ6b¤Þ¤Ç½Ð¤Æ¤ë2011/9/6¸½ºß¡Ë
¤½¤ÎºÝ¡¢¥Ç¥£¥ì¥¯¥È¥ê¤Ï¥×¥í¥¸¥§¥¯¥È¤Î¥Ñ¥¹¤Þ¤Ç°ÜÆ°¤·¤Æ
¥Õ¥ë¥Ñ¥¹¤Ç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 {
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¤ò¥³¥ó¥Ñ¥¤¥ë¤Ç¤­¤ë¤â¤Î¡ÊÀßÄê¥Õ¥¡¥¤¥ë¡Ë ¤òƳÆþ
¡ÊƳÆþ¤¹¤ë¤Î·ë¹½ÂçÊѤÀ¤±¤É¡¦¡¦¡¦¡Ë

°Ê²¼Windows¤Ç¤ÎƳÆþÊýË¡¤Ç¤¹
¡ÊMac¤ÏVC¡Ü¡Ü¤Ê¤¤¤«¤éÃΤé¤ó¡¦¡¦¡¦¡Ë

ƳÆþÊýË¡¤Ï°Ê²¼¤ò»²¹Í
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
Last-modified: 2011-09-06 (²Ð) 00:35:11