Android 在jni編譯完成後沒有出現so文件

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

這裏放入鏈接:http://blog.csdn.net/qjay_dev/article/details/51343312(Android JNI/NDK開發之基本姿勢<一>

這裏遇到了一些問題:

    首先,我不知道是不是我的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文件了



   

發佈了53 篇原創文章 · 獲贊 8 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章