最近在調試 車輛識別demo,說實話,雖然最初接觸jni的時候,是在eclipse工程中進行開發的, 不事後面遇到的項目都是直接放到了android 源碼中編譯的,因此對於在eclipse中的ndk開發,其實記憶有點模糊了,包括 Android.mk的編寫,都有點小區別吧。java
這裏簡單記錄下,權當簡單回顧吧。android
1)cygwin cygwin仍是蠻強大的,至關因而在window環境上,提供了個 unix操做的環境吧。後面在window上編譯 so還得靠它;編程
2)android-ndk-*** ,這個的版本不少,也不清楚目前最新的版本是多少了,不過都沒有太大的關係,我使用的 android-ndk-r8b,這個是提供了編譯 so須要的工具,並且也提供了些 jni 的sample;bash
cygwin 的安裝就有點坑了,若是是選擇 從網絡上下載安裝,也不清楚是哪一個網址能成功下載的,估計得***才行;不過以前安裝的時候,的確是選擇 網絡安裝,也能成功安裝,只是忘了選擇哪一個網址了,此次也試了不少了網點,不過不是網速太慢,就是中途有報錯了。網絡
因此後面選擇的是本地安裝了,還好以前安裝過一次成功的,此次本地安裝完後,直接把以前安裝好的 bin目錄,直接替換如今安裝的bin目錄,而後須要安裝的一些東西就不會缺乏了。dom
1)簡單映射下硬盤,方便後面的操做,以下圖,後面直接 cd win_c,就是切換到 c盤啦eclipse
2)配置下 ndk路徑,在 .bashrc 中添加 如圖所示內容,相應的ndk路徑根據本身本身實際狀況而定,我這邊是直接放在了 d盤ide
3)配好了環境,固然是須要 source 一下啦工具
4)完成了上面幾步,咱們就來看下有沒有生效啦,ndk提供的demo就派上用場了,切換到 ndk 的samples目錄,我這裏測的是hello-jni, 切到hello_jni 目錄下後,ndk-build 下。(我這裏可能有點問題,雖然install 成功了,後面copy到libs/armeabi的時候出錯了,不過這絲絕不影響咱們後面實際項目的使用,只要install沒報錯就ok了)ui
前面的工做作好了,如今就能夠來編編咱們的項目了,切到項目工程 的jni目錄下(通常jni相關的都放在了jni目錄下,固然這個目錄視本身實際狀況而定),
而後很簡單的ndk-build 下下,ok,須要的so 成功生成了,咱們能夠看到 這時會在工程的 libs/armerbi下生成了咱們須要的so。
本地時間 19:02,並且是週六,其實不想寫了,不過又想一想不能偷懶,因此仍是接着簡單寫下下~ 1)javah + native 類路徑,生成相應的 .h文件
2)根據 .h 文件,新建對應的 .cpp文件,並實現相應的方法
3)javap -s + native類路徑,查看java 方法簽名。(我的以爲這個仍是挺好用的,不過也只有在 咱們的jni須要放到 android 源碼中編譯的時候,須要寫 方法映射 的時候才用的上)
前面說的是調通別人提供的demo,這在將demo的功能移值到實際項目中的時候,仍是遇到了點問題。首先就是新建了native 類,從新 生成so的問題。
找不到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了
--------------------
這個問題就得說下 adb push 和 adb install 的區別了,若是直接adb push 到安裝目錄的話,libs目錄下是不會有so文件的,若是是 adb install的話,則是有的。
而我調試的,由於簽名關係,只能採用 adb push的方式,這種狀況下,須要加載的so就須要手動的push 到system/lib目錄下了。