Android 在jni編譯完成後沒有出現so檔案
阿新 • • 發佈:2019-02-20
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檔案了