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文件了