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

來源:互聯網
上載者:User

標籤:ndk

      在Android應用的開發工程中,不管是遊戲還是普通應用,都時常會用到.so即動態連結程式庫,關於.so是什麼玩意兒,有什麼好處,這個大家可以在網上查一下,本人不做過多解釋。.so本是linux下的檔案類型,所以編譯.so必須要在linux環境下,那麼如何在win下進行編譯呢?隨便在網上搜下,教程也是五花八門,不清不楚,沒有一定功底,即便看著教程到最後估計還是功敗垂成,更別說初學者,看了保證頭暈眼花,本人也是根據網上的一些例子,總結了一個個人認為還算比較簡單的一個.so的編譯方法:GNUstep(網上有不少用cygwin的,大家也可以去研究下)。

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

1.NDK(本NDK版本為10):連結: http://pan.baidu.com/s/1bn1xDQB 密碼: 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 密碼: 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中建立一個項目工程,包名:com.byl.testjni,主類名MainActivity(這個要看清楚,接下來會要求你正確輸入他們的路徑和名稱):


建立完畢後,開啟cmd,輸入javah命令運行:


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

接下來,定位到該工程項目中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:這個例子很簡單,就是列印一字串,跟實際應用開發中所要編寫的複雜的方法等相錯甚遠,所以真正學會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.