1. 程式人生 > >10分鐘搭建NDK的Android開發環境

10分鐘搭建NDK的Android開發環境

1. 安裝JDK.

   1.2 雙擊安裝jdk-7u51-windows-i586.exe,安裝過程中JDK和JRE的安裝目錄選擇預設即可。

   1.3 配置JDK環境變數

2. 去官網http://www.eclipse.org/downloads/下載Eclipse,我下載的eclipse-java-kepler-SR2-win32.zip,解壓即可使用。

3. 搭建Android開發環境

  3.1  安裝Android SDK

          3.1.1 去網站http://developer.android.com/sdk/index.html下載adt-bundle-windows-x86-20140321.zip.先說說這個adt-bundle-windows-x86-20140321,其實用它就可以直接做Android應用開發,但是裡面的Eclipse工具不好用,所以我只使用裡面的sdk包。

          3.1.2 將下載來的adt-bundle-windows-x86-20140321.zip解壓,我們要使用的是裡面的sdk檔案包,將這個sdk檔案包放到你想要的目錄,後面要用,解壓的結果見圖一。

      

                                                 (圖一)

  3.2  安裝Eclipse的ADT外掛(Android Development Tools).
           3.2.1  啟動Eclipse, 選擇選單項的Help->Install New Software
           3.2.2  點選Add, 輸入名稱,然後在URL中輸入:
                    

http://dl-ssl.google.com/android/eclipse/,OK!
           3.2.3  選擇需要更新的工具,Finish, 安裝完成後重啟Eclipse。

  3.3 安裝Eclipse的NDK外掛(Android Native Development Tools),這個外掛包裡有C語言相關的工具,安裝方法同3.2.
  3.4  配置ADT外掛
       3.4.1  啟動Eclipse,選擇選單項的Window -> Preferences
       3.4.2  選擇Android,在SDK Location中選擇SDK的安裝目錄,OK!

  3.5 建立虛擬機器

   3.5.1  選擇建立一個Android 模擬裝置。選擇選單項的Window ->AVD Manager-> New ,新建一個模擬裝置,,選用外掛自帶的手機模擬器配置,步驟如圖二中所示:

       第一步:AVD Name:模擬器命名,具體名稱沒有要求。

       第二步:Device:在下拉列表裡選擇手機配值,可以看到某些引數已經配置好,不需要我們設定。

       第三部:Skin:在下拉列表中選擇面板。

       第四步(可選):設定記憶體大小

     以上幾個步驟完成後,點選確認,一個手機模擬器就建成了。

         

                           (圖二)

4. 安裝NDK

   4.2 解壓下載的android-ndk-r9d-windows-x86.zip,將其放到你想要的目錄下。

    注:R7之前的版本,必須要安裝Cygwin才能使用NDK。從R7開始,Windows版本的NDK提供了一個ndk-build.cmd指令碼,可以直接利用這個指令碼編譯。想要做到這一 點,只要為Eclipse Android工程新增一個Builder,就能實現Eclipse的自動編譯NDK,這一點在後面的步驟會有介紹

5. NDK例項的實現
 5.1 啟動Eclipse,新建Android工程(此處名為TestNDK),如圖三所示:

     
 

                                              (圖三)
 5.2 在TestNDK工程的根目錄下新建資料夾jni,之後找到NDK的安裝目錄(\samples\hello-jni\jni)下的 Android.mk和hello-jni.c 這兩個檔案,將其拷貝到TestNDK->jni資料夾下面。

    注:如果你很好奇jni資料夾裡的hello-jni.c裡的函式命名如此刁鑽,是怎麼寫的,並且你如果你想的更遠,已經在考慮自己以後怎麼寫這種檔案,那麼我告訴你它裡面的函式命名是直接貼上的一個頭檔案裡的內容。這個標頭檔案可以通過反編譯下邊提到的HelloJni.java得到。如果你以後要確實要進行NDK開發,那麼你肯定要掌握反編譯的方法。為了你能夠少走彎路,推薦我的另一篇文章《1分鐘攻克NDK開發中javah不能反編譯的問題》,連結網址http://blog.csdn.net/golden1314521/article/details/23039417 。
 5.3 找到NDK的安裝目錄(\samples\hello-jni\src\com\example\hellojni)下的HelloJni.java檔案,將其拷貝到TestNDK工程src資料夾對應的包下。
 5.4 修改專案檔案AndroidManifest.xml,將activity標籤下的 android:name =“.TestNDKActivity”修改為 android:name =“.HelloJni”。(注:此處的
TestNDKACtivity為專案自動生成的,專案不同,此處也會不同)  
5.5 新建並配置一個Builder
  5.5.1 點選Project->Properties->Builders->New,新建立一個Builder。在彈出的對話方塊上面點選Program,OK!如圖四所示:

     
 

                                                     (圖四)
  5.5.2 在彈出的對話方塊【Edit Configuration】中,配置選項卡【Main】:
      Location中需要填入nkd-build.cmd的路徑(NDK安裝目錄下)。
      Working Diretcoty中需要填入TestNDK的工程根目錄。
       如圖五所示:

     

                                    (圖五)
  5.5.3 配置選項卡【Refresh】,如圖六所示:
      勾選“Refresh resources upon completion”,
      勾選“The entire workspace”,
      勾選“Recuresively include sub-folders”。

    

                                      (圖六)
   5.5.4 配置選項卡【Build Options】,如圖七所示:
      勾選“After a “Clean””,
      勾選“During manual builds”,
      勾選“During auto builds”,
      勾選“Specify working set of relevant resources”。
      點選“Specify Resources…”勾選TestNDK工程的“jni“目錄 ,Finish!

      儲存設定,OK!

      

                                     (圖七)

   5.5.5 Project->clean->選擇工程->點選OK。當在console裡面看到如圖八所示的資訊,則表示一切正常,此時就已經是自動編譯程式碼了。

                                                                 (圖八)

假如你使用的是NDK-R9版本中的例子,你在console裡面會看到比上圖要多的編譯資訊,截圖如下       

                                       (圖八)

這時候你要檢查一下工程根目錄下的libs目錄下的子目錄,要刪除libs中多餘的子資料夾,只留下armeabi資料夾和以jar為字尾名的jar包。

如果你是新手,為了避免不必要的麻煩,請你安裝NDK時選擇R7版本(android-ndk-r7-windows.zip)。

                  
    5.5.6  右鍵點選工程TestNDK,Run As -> Android Application, 執行程式。當出現圖九所示資訊時,NDK例項執行成功!

        

                        (圖九)

如果程式執行出錯,顯示“應用程式**(程序:com.example.***)意外停止,請重試”的錯誤提示,如圖(十)所示


                                                                          (圖十)

這個錯誤產生的原因極有可能是你的JNI檔案的命名或包的宣告寫錯了。查一下程式執行的日誌logcat,顯示錯誤為“java.lang.UnsatisfiedLinkError:stringFromJNI”,說的是Java層呼叫本地方法stringFromJNI時,卻沒有找到這個本地方法,所以除了錯。

 那麼Android虛擬機器怎麼查詢這個本地方法的呢?先說一下Android工程的環境:包名稱是com.example.testndk,應用名稱是HelloJni,如果Java層呼叫了本地方法String stringFromJNI(),那麼Android虛擬機器就會由這三個變數生成一個名字:jstring Java_com_example_testndk_HelloJni_stringFromJNI( JNIEnv* env, jobject thiz ) ,並在本地方法中嚴格按照這個名字查詢同名的本地方法。如果找不到,就會返回上圖的錯誤。所以要確認一下JNI檔案的命名或包的宣告是否與Java檔案中的一致。

   在本地檔案(即C或C++檔案)改正此錯誤後,執行,正常顯示。