android涔婮NI寮€鍙戞楠ゆ€荤粨
聽 聽杩欏嚑澶╀竴鐩村湪鐮旂┒JNI鐨勫紑鍙戣繃绋嬶紝椤轰究鎶奛DK鐜鎼缓涓€璧锋€荤粨涓嬨€傚湪windows鐜涓嬪紑鍙慾ni闇€瑕乧/c++缂栬瘧鍣ㄧ殑鏀寔锛岀綉缁滀笂鎴戠湅寰堝浜轰娇鐢╟ygwin銆傚懙鍛垫垜涓嶆槸寰堝枩娆娇鐢ㄥ畠锛屾劅瑙夊畨瑁呰捣鏉ユ尯楹荤儲鐨勩€傛垜浣跨敤GNUStep锛屼笅杞藉湴鍧€http://www.gnustep.org/experience/Windows.html銆?/p>
涓嬭浇瀹夎鍚庯紝楠岃瘉鏄惁鎴愬姛銆傛墦寮€GNUstep->Shell锛岃緭鍏ake -v 鍜?gcc -v鍛戒护锛屽鍥炬墍绀恒€?/p>
聽聽
涓嬭浇NDK锛屽湴鍧€http://developer.android.com/tools/sdk/ndk/index.html銆備笅杞藉畬鍚庤В鍘嬪嵆鍙€?/p>
聽閰嶇疆ndk鐜鍙橀噺锛実nustep鏄ā鎷焞inux鐨勭幆澧冪殑锛屾墦寮€gnustep鐨勫畨瑁呯洰褰曚笅鐨凣:\softinstall\GNUstep\GNUstep\GNUstep.conf鏂囦欢锛屾坊鍔犱互涓嬪唴瀹癸細
聽
NDK=/g/softinstall/Android/android-ndk-r8b
export=NDK
璇存槑濡傛灉涓嶇煡閬搉dk鐩綍鍦╨inux涓嬪簲璇ユ槸鍦ㄥ摢閲岋紝浣犲彲浠ユ墦寮€gnustep鐨勫懡浠ょ獥鍙o紝杈撳叆mount锛屽氨鍙互鎵惧埌瀵瑰簲鐨勭洏绗︺€?/p>
楠岃瘉鐜鍙橀噺锛屽涓嬪浘銆偮?a href="https://img.it610.com/image/info3/e8650550450849b79b8792e39e8e63df.png" target="_blank">
浠ヤ笂灏遍厤缃垚鍔熶簡銆?/p>
聽
涓嬭浇杩涘叆姝i鍟︺€侸ni鐨勫紑鍙戞楠ゃ€?/p>
鎵撳紑eclipse锛屾柊寤哄伐绋嬪悕涓簍estJni銆傚湪activity涓坊鍔犱互涓嬩唬鐮?/p>
聽聽
缂栬瘧鍚庣殑鏂囦欢鍦╞in鐩綍涓嬶紝閫氳繃javah鍛戒护鐢熸垚c/c++鐨勬枃浠跺ご銆傚涓嬪浘 聽 聽
- package聽com.xzw.jni;聽
- 聽
- import聽android.os.Bundle;聽
- import聽android.app.Activity;聽
- import聽android.view.Menu;聽
- import聽android.view.MenuItem;聽
- import聽android.widget.TextView;聽
- import聽android.support.v4.app.NavUtils;聽
- /**聽
- 聽*聽聽
- 聽*聽@author聽XuZhiwei聽(xuzhiwei@gmail.com)聽
- 聽*聽sina锛歨ttp://weibo.com/xzw1989聽
- 聽*聽聽
- 聽*聽Create聽at聽2012-8-30聽涓婂崍10:49:45聽
- 聽*/聽
- public聽class聽MainActivity聽extends聽Activity聽{聽聽
- 聽聽聽聽@Override聽
- 聽聽聽聽public聽void聽onCreate(Bundle聽savedInstanceState)聽{聽
- 聽聽聽聽聽聽聽聽super.onCreate(savedInstanceState);聽聽
- 聽聽聽聽}聽
- 聽
- 聽聽聽聽public聽native聽String聽hello();聽
- 聽聽聽聽
- 聽聽聽聽static{聽
- 聽聽聽聽聽聽聽聽System.loadLibrary("testJni");聽
- 聽聽聽聽}聽
- 聽聽聽聽聽
- }聽
浼氬湪椤圭洰鐩綍涓嬬敓鎴恓ni/com_xzw_jni_TestJni.h銆?/p>
澶存枃浠朵唬鐮佸涓嬶細
- /*聽DO聽NOT聽EDIT聽THIS聽FILE聽-聽it聽is聽machine聽generated聽*/聽
- #include聽
聽 - /*聽Header聽for聽class聽com_xzw_jni_TestJni聽*/聽
- 聽
- #ifndef聽_Included_com_xzw_jni_TestJni聽
- #define聽_Included_com_xzw_jni_TestJni聽
- #ifdef聽__cplusplus聽
- extern聽"C"聽{聽
- #endif聽
- /*聽
- 聽*聽Class:聽聽聽聽聽com_xzw_jni_TestJni聽
- 聽*聽Method:聽聽聽聽hello聽
- 聽*聽Signature:聽()Ljava/lang/String;聽
- 聽*/聽
- JNIEXPORT聽jstring聽JNICALL聽Java_com_xzw_jni_TestJni_hello聽
- 聽聽(JNIEnv聽*,聽jobject);聽
- 聽
- #ifdef聽__cplusplus聽
- }聽
- #endif聽
- #endif聽
聽
鏍规嵁澶存枃浠剁紪鍐檆浠g爜
聽聽
- #include聽
聽 - #include聽
聽 - 聽聽
- jstring聽
- Java_com_xzw_jni_TestJni_hello聽
- 聽聽(JNIEnv*聽env,聽jobject聽thiz){聽
- 聽聽聽聽聽聽return聽(*env)->NewStringUTF(env,聽"鍝堝搱瀹屾垚鑷姩鍖栫紪璇懧?");聽
- }聽
鎺ヤ笅鏉ョ紪鍐櫬燗ndroid.mk,璇ユ枃浠跺彲浠ョ洿鎺ヤ粠NDK鐨剆amples涓嬬殑hello-jni鐨刯ni鏂囦欢涓嬬洿鎺ラ潬杩囨潵鏀规敼灏卞彲浠ヤ簡銆備篃璐翠笅浠g爜鍝堛€?/p>
聽
- #聽Copyright聽(C)聽2009聽The聽Android聽Open聽Source聽Project聽
- #聽
- #聽Licensed聽under聽the聽Apache聽License,聽Version聽2.0聽(the聽"License");聽
- #聽you聽may聽not聽use聽this聽file聽except聽in聽compliance聽with聽the聽License.聽
- #聽You聽may聽obtain聽a聽copy聽of聽the聽License聽at聽
- #聽
- #聽聽聽聽聽聽http://www.apache.org/licenses/LICENSE-2.0聽
- #聽
- #聽Unless聽required聽by聽applicable聽law聽or聽agreed聽to聽in聽writing,聽software聽
- #聽distributed聽under聽the聽License聽is聽distributed聽on聽an聽"AS聽IS"聽BASIS,聽
- #聽WITHOUT聽WARRANTIES聽OR聽CONDITIONS聽OF聽ANY聽KIND,聽either聽express聽or聽implied.聽
- #聽See聽the聽License聽for聽the聽specific聽language聽governing聽permissions聽and聽
- #聽limitations聽under聽the聽License.聽
- #聽
- LOCAL_PATH聽:=聽$(call聽my-dir)聽
- 聽
- include聽$(CLEAR_VARS)聽
- 聽
- LOCAL_MODULE聽聽聽聽:=聽testJni聽
- LOCAL_SRC_FILES聽:=聽testJni.c聽
- 聽
- include聽$(BUILD_SHARED_LIBRARY)聽
鍏朵腑浣犲彧闇€瑕佽LOCAL_MODULE鍜孡OCAL_SRC_FILES灏卞彲浠ヤ簡銆?/p>
璇存槑:LOCAL_MODULE鏄弿杩版ā鍧楃殑锛岀敤鏉ョ粰java璋冪敤鐨勬ā鍧楀悕锛屼細鐢熸垚瀵瑰簲鐨刲ibtestJni.so
LOCAL_SRC_FILES灏辨槸婧愭枃浠跺暒锛屽涓枃浠剁┖鏍奸殧寮€鍗冲彲銆?/p>
聽
鎺ヤ笅鏉ワ紝鎴戜滑瑕佸紑濮嬬紪璇戠敓鎴恠o鏂囦欢鍜€?/p>
鎵撳紑gnustep鐨勫懡浠ょ獥鍙o紝杩涘叆鍒伴」鐩簳涓嬶紝杈撳叆$NDK/ndk-build鍛戒护锛屽嵆鍙嚜鍔ㄧ敓鎴恖ibs/armeabi/libtestJni.so鏂囦欢銆?/p>
鎺ヤ笅鏉ュ氨鏄痡ava璋冪敤鏉ャ€傜洿鎺ヤ笂浠g爜聽
- package聽com.xzw.jni;聽
- 聽
- import聽android.os.Bundle;聽
- import聽android.app.Activity;聽
- import聽android.view.Menu;聽
- import聽android.view.MenuItem;聽
- import聽android.widget.TextView;聽
- import聽android.support.v4.app.NavUtils;聽
- /**聽
- 聽*聽聽
- 聽*聽@author聽XuZhiwei聽(xuzhiwei@gmail.com)聽
- 聽*聽sina锛歨ttp://weibo.com/xzw1989聽
- 聽*聽聽
- 聽*聽Create聽at聽2012-8-30聽涓婂崍10:49:45聽
- 聽*/聽
- public聽class聽TestJni聽extends聽Activity聽{聽聽
- 聽聽聽聽@Override聽
- 聽聽聽聽public聽void聽onCreate(Bundle聽savedInstanceState)聽{聽
- 聽聽聽聽聽聽聽聽super.onCreate(savedInstanceState);聽
- 聽聽聽聽聽聽聽聽TextView聽tv聽=聽new聽TextView(this);聽
- 聽聽聽聽聽聽聽聽tv.setText(hello());聽
- 聽聽聽聽聽聽聽聽setContentView(tv);聽
- 聽聽聽聽}聽
- 聽
- 聽聽聽聽public聽native聽String聽hello();聽
- 聽聽聽聽
- 聽聽聽聽static{聽
- 聽聽聽聽聽聽聽聽System.loadLibrary("testJni");聽
- 聽聽聽聽}聽
- 聽聽聽聽聽
- }聽
杩愯缁撴灉濡備笅
聽
聽
更多相关文章
- 代码中设置drawableleft
- android 3.0 隐藏 系统标题栏
- Android开发中activity切换动画的实现
- Android(安卓)学习 笔记_05. 文件下载
- Android中直播视频技术探究之—摄像头Camera视频源数据采集解析
- 技术博客汇总
- android 2.3 wifi (一)
- AndRoid Notification的清空和修改
- Android中的Chronometer