1. 程式人生 > >Android 在jni編譯完成後沒有出現so檔案

Android 在jni編譯完成後沒有出現so檔案

Android JNI開發的基本使用,一個Hello World的native方法展示,已經有很多了,比如我網上參考的一個簡單的編譯JNI 的基礎展示

這裡放入連結:http://blog.csdn.net/qjay_dev/article/details/51343312()

這裡遇到了一些問題:

    首先,我不知道是不是我的AS問題,通過AS下載的NDK,有點問題,編譯不通過,老是出現錯誤,沒辦法我又在官網下載了最新的android-ndk-r14b-windows-x86_64

一直到 AS 的 Rebuild Project 在app的build/intermediates/目錄下面始終沒有看到預期的ndk資料夾,找不到想要的so檔案,很是惆悵,然後開始網上搜該問題的解決辦法,各種嘗試,

    保證 ndk目錄沒問題,local.properties檔案中ndk.dir=E\:\\android_sdk\\android-ndk-r14

    gradle.properties檔案裡面設定     android.useDeprecatedNdk=true

 在app的build.gradle裡面 設定:
     defaultConfig{
       ...
       ndk{
         moduleName 'jnidemo'//自定義名稱
       }
     }
  
   android{
      ....
      sourceSets{
         main{
           jniLibs.srcDir 'src/main/jni_src'//告知jni原始碼目錄
         }
      }
   }

  在生成想要的.h和.c/.cpp檔案之後,在jni資料夾下最好生成一個空的.c/.cpp檔案,這可能是AS的一個bug,編譯之後但是還是沒有出現想要的ndk檔案so檔案,
 
在交叉編譯的時候怎麼都無法生成so檔案,javah生成的標頭檔案沒錯,c檔案也沒有錯,java檔案也沒有錯
原因:是JNI資料夾路徑不對
    1 在執行javah命令時,我進入的是cd app/src/main/java 這樣jni資料夾在java資料夾下,作為一個包存在,這樣就無法生成so檔案
       執行javah的正確姿勢:
    2 進入app/src/main目錄:cd app/src/main
       執行javah命令:javah

     javah -d jni -classpath ./Java com.chatone.jni.JniDemo

    3, -d jni 標頭檔案生成到jni資料夾(當前在<Project>\app\src\main目錄下,所以.h所在的目錄為<Project>\app\src\main\jni )
        -classpath ./java 指定去當前路徑下java下尋找包名指定的類
    這樣再rebuild一下,就會生成so檔案了