? ?之前寫了一篇JNI的使用,這里其實也是JNI的使用,只不過現在的使用更加方便,不需要什么cygwin或者gnu去創建那邊麻煩,直接eclipse完成所有操作。
先前的一篇:http://xuzhiwei.blog.51cto.com/978424/976839
?1、首先現在Android的SDK和NDK
2、sdk中以及集成了eclipse,打開eclipse并下載CDT插件支持,一會兒寫c++使用。
??? CDT下載地址:http://www.eclipse.org/cdt/
3、配置NDK環境,windows->preferences->Android->NDK進行配置。
4、創建項目
5、創建完成后,右擊項目Android Tools->Add Native Support就可以了。eclipse怎么制作界面?
自動為我們生成了JNI的目錄,以及編譯的Android.mk等文件。
6、好了,開始寫代碼。
創建NativeUtils.java
1 2 3 4 5 6 7 8 9 | package ?com.xzw.firstndk; /** ? *?與c++的接口類,用來生成.h頭文件 ? *?@author?xzw ? * ? */ public ?class ?NativeUtils?{ ???? public ?static ?native ?String?getWords(); } |
現在要生成.h的頭文件,之前是在cmd里面通過javah命令來生成的,這里我們使用ant來自動為我們生成頭文件。
創建build_headers.xml然后以ant editor的方式打開,使用快捷鍵ALT+/生成模板。eclipsejava。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <? xml ?version = "1.0" ?encoding = "UTF-8" ?> <!--?======================================================================? ????? 2014-6-19?下午2:07:38???????????????????????????????????????????????????????? ????? FirstNDK???? ????? description ??????????????????? ?????? XMYJ???????????????????????????????????????????????????????????????? ????? ======================================================================?--> < project ?name = "FirstNDK" ?default = "BuilderHeaders" > ???? < description > ???????????? description ???? </ description > ???? <!--?=================================? ?????????? target:?BuilderHeaders?????????????? ????????? =================================?--> ???? < target ?name = "BuilderHeaders" ?depends = "BuildNativeHeader" /> ???? <!--?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-? ?????????? target:?BuildNativeHeader?????????????????????? ????????? -?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?-?--> ???? < target ?name = "BuildNativeHeader" > ???????? <!-- ???????? destdir:輸出目標目錄 ???????? classpath:類路徑 ???????? class:要生成的類 ???????? --> ???????? < javah ?destdir = "./jni" ?classpath = "bin/classes" ?class = "com.xzw.firstndk.NativeUtils" ></ javah > ???? </ target > </ project > |
右擊運行ant,然后刷新jni目錄就可以看到.h文件了,也把一些依賴庫給我們創建好了,方便很多。
如圖
打開com_xzw_firstndk_NativeUtils.h可以看到:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /*?DO?NOT?EDIT?THIS?FILE?-?it?is?machine?generated?*/ #include?<jni.h> /*?Header?for?class?com_xzw_firstndk_NativeUtils?*/ #ifndef?_Included_com_xzw_firstndk_NativeUtils #define?_Included_com_xzw_firstndk_NativeUtils #ifdef?__cplusplus extern ?"C" ?{ #endif /* ? *?Class:?????com_xzw_firstndk_NativeUtils ? *?Method:????getWords ? *?Signature:?()Ljava/lang/String; ? */ JNIEXPORT?jstring?JNICALL?Java_com_xzw_firstndk_NativeUtils_getWords ?? (JNIEnv?*,?jclass); #ifdef?__cplusplus } #endif #endif |
現在開始實現,打開FirstNDK.cpp,引入.h頭文件
eclipse提示功能也是很不錯的,alt+/快捷快速提示,
1 2 3 4 5 6 7 8 9 10 11 12 | #include?<jni.h> #include?"com_xzw_firstndk_NativeUtils.h" /* ? *?Class:?????com_xzw_firstndk_NativeUtils ? *?Method:????getWords ? *?Signature:?()Ljava/lang/String; ? */ JNIEXPORT?jstring?JNICALL?Java_com_xzw_firstndk_NativeUtils_getWords ?? (JNIEnv?*env,?jclass?clazz){ ???? return ?env->NewStringUTF( "hello?firt?ndk" ); } |
好了,c++部分ok了,現在來調用咯。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | package ?com.xzw.firstndk; import ?android.app.Activity; import ?android.os.Bundle; import ?android.widget.TextView; public ?class ?MainActivity? extends ?Activity?{ ???? TextView?resultText; ???? ????? @Override ???? protected ?void ?onCreate(Bundle?savedInstanceState)?{ ???????? super .onCreate(savedInstanceState); ???????? setContentView(R.layout.activity_main);? ???????? resultText?=?(TextView)findViewById(R.id.result); ???????? //調用c++的輸出,顯示出來 ???????? resultText.setText(NativeUtils.getWords()); ???????? ????? } ? ????? static { ???????? System.loadLibrary( "FirstNDK" ); ???? } } |
完成了,默認生成的是armeabi架構的so文件,如果需要生成多中架構的支持的so,需要在jni目錄下創建Application.mk文件。
1 | APP_ABI?:=armeabi?armeabi-v7a?x86 |
添加好了,運行起來就可以在libs目錄下看到這幾個架構的文件夾了。eclipse怎么運行android程序、搞定手工了。
本文轉自xuzw13 51CTO博客,原文鏈接:http://blog.51cto.com/xuzhiwei/1428192,如需轉載請自行聯系原作者
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态