NDK在windows下的開發環境搭建及開發過程

來源:互聯網
上載者:User

標籤:tar   編寫   lips   san   eclipse   應用開發   ace   hello   eclips   

      在Android應用的開發project中。無論是遊戲還是普通應用。都時常會用到.so即動態連結程式庫,關於.so是什麼玩意兒,有什麼優點。這個大家能夠在網上查一下,本人不做過多解釋。

.so本是linux下的檔案類型,所以編譯.so必需要在linux環境下,那麼怎樣在win下進行編譯呢?隨便在網上搜下,教程也是五花八門,不清不楚,沒有一定功底,即便看著教程到最後預計還是功敗垂成,更別說剛開始學習的人,看了保證頭暈眼花,本人也是依據網上的一些範例。總結了一個個人覺得還算比較簡單的一個.so的編譯方法:GNUstep(網上有不少用cygwin的。大家也能夠去研究下)。

    進入正題。win下.so開發環境搭建:(因為資源在網上不太好找,於是本人將須要的工具都放進了網盤)

1.NDK(本NDK版本號碼為10):連結: http://pan.baidu.com/s/1bn1xDQB password: lr7d 

2.gnustep-core-0.34.0-setup.exe。gnustep-devel-1.4.0-setup.exe,gnustep-msys-system-0.30.0-setup.exe 連結: http://pan.baidu.com/s/1ntLwd53 password: kuuj 

下載並安裝完成後(安裝路徑預設就可以):

首先。在eclipse中匯入NDK所在路徑(解壓完成後的路徑)


然後。在c盤(本人的安裝路徑在c盤),找到檔案GNUstep.conf並開啟以配置環境變數:


在該檔案最後兩行加入或改動:(注意你NDK的路徑)

NDK=E:/baiyuliang/android-ndk-r10export=NDK
開啟GNUstep,並輸入make -v,確定(enter鍵),再輸入gcc -v。出現例如以癥狀:


輸入cd $NDK,出現又出現癥狀:


則表示開發環境已搭建成功!

好了。接下來我們做一個簡單的範例以學習怎樣使用GNUstep來做NDK的開發:

在eclipse中建立一個項目project,包名:com.byl.testjni,主類名MainActivity(這個要看清楚,接下來會要求你正確輸入他們的路徑和名稱):


建立完成後,開啟cmd,輸入javah命令執行:


出現顯示,則表示一切順利,可繼續往下進行,假設出現找不到該命令,則要檢查下你的jdk環境變數是否配置正確。

接下來。定位到該project項目中src目錄硬碟中的所在路徑:



開啟項目中的MainActivity。增加下面代碼:

    public native String hello();//定義.so中的方法名       static{            System.loadLibrary("testJni");//定義產生的.so的名稱    }
這個是須要事先寫在調用.so的Activity中的,在編譯時間會自己主動在標頭檔裡組建定義的方法名,以及最後產生的.so名稱,接下來在cmd中輸入下面命令,產生c頭檔案:

javah -d ../jni com.byl.testjni.MainActivity
千萬注意路徑不要寫錯。確定後,假設什麼都沒提示,則表示運行成功,eclipse中右鍵-重新整理項目:


然後在jni目錄中建立一個c檔案。名稱為與.so名稱一致,即testJni.c:


接下來。仍在jni目錄中編寫Android.mk檔案,Android.mk檔案可在NDK安裝路徑下的samples/hello-jni/jni中找到,直接複製過來:


開啟Android.mk,並改動當中的LOCAL_MODULE和LOCAL_SRC_FILES:

LOCAL_MODULE是描寫敘述模組的,用來給java調用的模組名。會產生相應的libtestJni.so;
LOCAL_SRC_FILES是源檔案,多個檔案空格隔開就可以。


關鍵的一步來了。開啟GNUstep,開始編譯並產生.so檔案:

1.輸入命令。定位到項目(TestJni)所在位置:

cd /E/AndroidProject/TestJni
2.輸入命令,產生testJni.so檔案:

$NDK/ndk-build



所看到的,則表示執行成功,重新整理項目,看libs下testJni.so檔案是不是已經靜靜的躺在那裡了?(注意:產生的檔案預設前面會加一個lib即libtestJni.so)


以下就是見證奇蹟的時刻:

開啟MainActivity,在Oncreate方法中。調用hello()方法並列印,假設顯示”HelloJni!“即表示.so產生無誤而且調用成功。

Log.e("jj", hello());
執行,看LogCat:



OK!完美執行。

此後,就能夠把一些重要的變數。或者服務地址什麼的放在.so裡面了,然後將產生的.so放進項目就能夠使用啦!

PS:這個範例非常easy。就是列印一字串,跟實際應用開發中所要編寫的複雜的方法等相錯甚遠,所以真正學會NDK開發還須要下苦功夫的!

注意事項:

有童鞋可能用這個範例上產生的.so直接放在其他項目上使用時出現調用方法不成功的問題,在這裡告訴大家一下,編譯.so時所使用的Activity路徑一定要與項目中調用.so中方法的Activity路勁一致,比方:A項目中的AActivity要調用一個.so。那麼能夠直接在本項目中產生.so,假設另建立一個單獨的項目如B項目去產生.so時,那麼B項目中Activity路徑要與A全然一樣:

A項目:com.byl.testjni.AActivity,

那麼B項目也必須為:com.byl.testjni.AActivity


demo原始碼:http://download.csdn.net/detail/baiyuliang2013/8505977

NDK在windows下的開發環境搭建及開發過程

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.