1. 程式人生 > >NDK在windows下的開發環境搭建及開發過程

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

刷新 -1 ont static blog 簡單 包名 mfp targe

在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-r10
export=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下的開發環境搭建及開發過程