多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > 互聯(lián)網(wǎng) > NDK開發(fā),沒有你想象的那么難

NDK開發(fā),沒有你想象的那么難

來源:程序員人生   發(fā)布時(shí)間:2014-11-19 08:34:47 閱讀次數(shù):2457次

NDK:Native Development Kit原生開發(fā)工具

NDK能干甚么:NDK使得在android中,java可以調(diào)用C函數(shù)庫。

為何要用NDK:我們都知道,java是半解釋型語言,很容易被反匯編后拿到源代碼文件,在開發(fā)1些重要協(xié)議時(shí),我們?yōu)榱税踩鹨姡褂肅語言來編寫這些重要的部份,來增大系統(tǒng)的安全性。還有,在1些接近硬件環(huán)境下,相信大家都清楚C與java的優(yōu)劣。順帶提1下:NDK其實(shí)不能顯著提升利用效力。why?我們都覺得C語言比起java來講效力要高出很多,1方面,隨著jdk的不斷更新,java的效力也隨之提高;另外一方面,即使使用C語言編碼提高了利用效力,但是在java與C相互調(diào)用時(shí)平白又增大了開消。

對這些問題,這里就不多說了,希望詳細(xì)了解的,請各位自行搜索。

NDK開發(fā),第1步,固然是搭建環(huán)境

首先,去 http://developer.android.com/tools/sdk/ndk/index.html 下載你對應(yīng)平臺的開發(fā)工具

接著,我們需要實(shí)現(xiàn)linux環(huán)境 下載cygwin  http://www.cygwin.com/  (對64位的用戶,可以直接下載我已下載好的,百度的鏈接應(yīng)當(dāng)比在線安裝快1些,正在上傳到我的網(wǎng)盤,稍后將地址放在回復(fù)里面)

選擇在線下載的朋友,建議選擇下圖的地址,(是國內(nèi)的)

選擇好下載源以后就是選擇下載目錄了。我們用鼠標(biāo)點(diǎn)開組件列表中的“Devel”分支,在該分支下,有很多組件,

我們必須的是:binutils,gcc,gcc-mingw,gdb

選好這4個(gè)目錄了以后,就是漫長的等待了,可以去吃頓飯差不多了。

下面該配環(huán)境變量了:NDK環(huán)境變量需要將NDK根目錄(其實(shí)就是ndk-builder.cmd文件的目錄)加入系統(tǒng)環(huán)境變量

                                cygwin環(huán)境變量需要將bin目錄加入系統(tǒng)環(huán)境變量

例如我的路徑是:C:javaandroid-ndk-r7b 和 C:javacygwinin 這兩個(gè)

配置好環(huán)境后就能夠開始編碼了

1、新建1個(gè)android工程

2、在工程目錄下添加名為 jni 的文件夾(必須)

3、在jni文件夾下新建你的.c文件(我的叫Hello.c)

4、在jni文件夾下新建名字為Android.mk文件

.mk文件中加入

?
1
2
3
4
5
LOCAL_PATH := $(call my-dir)    //當(dāng)前路徑(如果你了解shell語言,應(yīng)當(dāng)可以很輕松的理解)
include $(CLEAR_VARS)
LOCAL_MODULE    := Hello        //要生成的.so庫名
LOCAL_SRC_FILES := Hello.c        //你的.c文件名字
include $(BUILD_SHARED_LIBRARY)

現(xiàn)在可以開始寫我們的C代碼了,固然這里不能再去從main函數(shù)開始寫,而是有固定的命名方式

如圖,我的函數(shù)名為:Java_com_example_testndk_MainActivity_helloWorldFromC     (Java_包名_類名_函數(shù)名)

呵呵,寫C的朋友可能要抱怨了,我甚么時(shí)候?qū)戇^這么長的函數(shù)名了。沒辦法,這是jni的規(guī)范,以Java_開頭,后跟java利用的包名加上類名,都是以下劃線分割,最后才是跟我們的C函數(shù)名

至于參數(shù)情勢和返回值類型,我們可以去jdk目錄下翻閱jni.h文件(我的jni文件目錄:C:javajdk1.7.0_25includejni),有很多函數(shù)模板(不同于C++模板)

由于源碼太多大家自己去查看吧,我就不貼圖了

在jni.h文件的第104行這里可以看到我們返回的jstring本質(zhì)上就是1個(gè)結(jié)構(gòu)體指針,從C代碼里面可以看到就是1個(gè)指向字符串的指針,在java里也就是1個(gè)數(shù)組。

好了,C代碼講授終了,回到我們android工程。

從剛才的C代碼函數(shù)名,大家應(yīng)當(dāng)就能夠知道我的java類名了(這是必須的,由于要逐一對應(yīng)嘛)
需要注意的是圖中紅色方框中的靜態(tài)代碼塊


學(xué)過java大家都知道,1個(gè) 類在初始化的時(shí)候最早履行的不是構(gòu)造方法而是靜態(tài)代碼塊,沒錯(cuò)也就是這里之所以把System.loadLibrary()放到靜態(tài)代碼塊的緣由。從名字我們就能夠猜到了,加載庫(“Hello”)

還記得我們在Android.mk中聲明的那個(gè)Hello嗎,就是那里的名字

緊接著,看到第12行代碼,回想java知識了,用native修飾的方法,表示java的本地方法,也就是我們的C函數(shù)了。(其實(shí)這樣的函數(shù)在android SDK)中其實(shí)不少見,比如我們經(jīng)常使用到的多媒體類MediaPlayer,大家可以去看看源碼,這里我就不發(fā)了,里面有很多native方法,由于要調(diào)用音頻驅(qū)動嘛。



至此,NDK工程就結(jié)束了,來測試1下吧。首先編譯我們的C代碼。打開cmd,切換到工程目錄下(工程目錄?右鍵工程名,properties,如上圖)輸入ndk-builder(當(dāng)時(shí)的環(huán)境變量設(shè)置成功了嗎?去看看安卓工程的libs文件夾里面是否是多出來了個(gè)libHello.so文件)
然后我們再運(yùn)行我們的安卓工程吧。



最后,我再說1點(diǎn)自己的看法吧,首先就是C語言的基礎(chǔ),結(jié)構(gòu)體指針1定要掌握的好,好好看看jni.h文件給出了哪些函數(shù),其中還有支持C與java交互的函數(shù),要想用好NDK,先用好JNI

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 91精品国产亚一区二区三区 | 午夜免费福利在线 | 色悠久久久久综合欧美99 | 国产日韩欧美一区二区三区综合 | 久久久青草青青国产亚洲免观 | 国产农村妇女毛片精品久久 | 自拍中文字幕 | 亚洲一区自拍 | 国产一成人精品福利网站 | 免费69视频 | 91在线精品亚洲一区二区 | 日本一区二区视频在线观看 | 欧美日韩国产一区 | 亚洲精品毛片久久久久久久 | 国产精品自拍一区 | 日本不卡一区二区三区视频 | 动漫精品成人免费网站 | 精品国产日韩一区三区 | 日韩爱爱小视频 | 亚洲精品第一第二区 | 国产精品一区伦免视频播放 | 亚洲国产成a人v在线观看 | 免费在线亚洲 | 18欧美同性videos可播放 | 他添的我好湿好爽视频 | 亚洲国产天堂久久综合2261144 | 成人精品一区二区三区 | 欧美伊人 | 欧美性xxxx| 国产一区二区三区四区在线观看 | 欧美黑人ⅹxxx片 | 毛色毛片免费看 | 麻豆影视大全 | 免费一级毛片清高播放 | 全黄冷激性性视频 | 宅男午夜在线 | 国产综合亚洲欧美日韩一区二区 | 亚洲国产一区二区三区在线观看 | 久久国产精品高清一区二区三区 | 尤物视频最新网址 | 欧美黄色片免费观看 |