1. 程式人生 > >NDK開發_cwin配置+程式設計簡單步驟

NDK開發_cwin配置+程式設計簡單步驟

      最近在除錯 車輛識別demo,說實話,雖然最初接觸jni的時候,是在eclipse工程中進行開發的,不過後面遇到的專案都是直接放到了android 原始碼中編譯的,所以對於在eclipse中的ndk開發,其實記憶有點模糊了,包括 Android.mk的編寫,都有點小區別吧。

      這裡簡單記錄下,權當簡單回顧吧。

===========================================================================================

一、需要準備和安裝 的東東

    1>cygwin   cygwin還是蠻強大的,相當於是在window環境上,提供了個 unix操作的環境吧。後面在window上編譯 so還得靠它;

    2>android-ndk-*** ,這個的版本很多,也不清楚目前最新的版本是多少了,不過都沒有太大的關係,我使用的 android-ndk-r8b,這個是提供了編譯 so需要的工具,而且也提供了些 jni 的sample;

 

    cygwin 的安裝就有點坑了,如果是選擇 從網路上下載安裝,也不清楚是哪個網址能成功下載的,估計得翻牆才行;不過之前安裝的時候,的確是選擇 網路安裝,也能成功安裝,只是忘了選擇哪個網址了,這次也試了很多了網點,不過不是網速太慢,就是中途有報錯了。

   所以後面選擇的是本地安裝了,還好之前安裝過一次成功的,這次本地安裝完後,直接把之前安裝好的 bin目錄,直接替換現在安裝的bin目錄,然後需要安裝的一些東西就不會缺少了。

 

二、cygwin 的簡單使用

  1>簡單對映下硬碟,方便後面的操作,如下圖,後面直接 cd win_c,就是切換到 c盤啦

      

  2>配置下 ndk路徑,在 .bashrc 中新增 如圖所示內容,相應的ndk路徑根據自己自己實際情況而定,我這邊是直接放在了 d盤

   

    

  3>配好了環境,當然是需要 source 一下啦

       

   4>完成了上面幾步,我們就來看下有沒有生效啦,ndk提供的demo就派上用場了,切換到 ndk 的samples目錄,我這裡測的是hello-jni,

      切到hello_jni 目錄下後,ndk-build 下。(我這裡可能有點問題,雖然install 成功了,後面copy到libs/armeabi的時候出錯了,不過這絲毫不影響我們後面實際專案的使用,只要install沒報錯就ok了)

     

三、編譯 車輛識別專案 jni

       前面的工作做好了,現在就可以來編編我們的專案了,切到專案工程 的jni目錄下(一般jni相關的都放在了jni目錄下,當然這個目錄視自己實際情況而定),

   然後很簡單的ndk-build 下下,ok,需要的so 成功生成了,我們可以看到 這時會在工程的 libs/armerbi下生成了我們需要的so。

       

   

========= JNI 程式設計 最最簡單步驟=====================================================================

     本地時間 19:02,而且是週六,其實不想寫了,不過又想想不能偷懶,所以還是接著簡單寫下下~

 

    1>javah + native 類路徑,生成相應的 .h檔案

              

     2>根據 .h 檔案,新建對應的 .cpp檔案,並實現相應的方法

     3>javap -s + native類路徑,檢視java 方法簽名。(個人覺得這個還是挺好用的,不過也只有在 我們的jni需要放到 android 原始碼中編譯的時候,需要寫 方法對映 的時候才用的上)

          

   

        2017-1-11

     =======================================================================================

        前面說的是調通別人提供的demo,這在將demo的功能移值到實際專案中的時候,還是遇到了點問題。首先就是新建了native 類,重新 生成so的問題。

    【遇到的問題】

     1、javah +native 類名,提示找不到 類 Bitmap

        

        找不到Bitmap,那就是android.jar 沒找到,ok, -classpath 指定下android.jar路徑

        
      這時報錯 找不到“com.visdom.lprtest.LPR”了,

      原來完整的用法應該是如下圖所示,除了指定需要的jar,還需要指定當前路徑,不過同樣的寫法在cmd中輸入是可以的,在cygwin中就報錯了,原因不詳。

      不過這樣能生成 .h就可以了,不影響下一步的進行了。(這裡得說明下,如果寫的native方法,不需要import其他類的話,直接 javah + native類就可以生成 .h了)

     

 

     下面再相對應的修改下 jni目錄下的Android.mk 需要編譯的檔案,就可以在cygwin中切到該jni目錄下,ndk-build了

  

  好了,下面就可以看到在armeabi目錄下生成我們需要的libLPRJNI.so了

   

 -------------------- 

 2、安裝apk後,切到 data/data/包名/libs 目錄下,發現沒有 .so檔案???

     這個問題就得說下 adb push 和 adb install 的區別了,如果直接adb push 到安裝目錄的話,libs目錄下是不會有so檔案的,如果是 adb install的話,則是有的。

 而我除錯的,因為簽名關係,只能採用 adb push的方式,這種情況下,需要載入的so就需要手動的push 到system/lib目錄下了。