接觸Jni的時候,最繁瑣的就是去生成
.h
頭文件苟径,以前很笨的方法就是通過javah工具生成.h頭文件案站,還要各種指定路徑等繁瑣操作,寫著寫著就有點煩人。現(xiàn)在介紹一種更快捷的方式棘街,通過配置快捷鍵的形式一勞永逸蟆盐。
快捷配置效果預覽
enter image description here
![enter image description here](https://dn-ningso.qbox.me/blog/image/android_ndk_externaltool.png?imageView2/0/q/90%7Cwatermark/2/text/TmluZ1Nv/font/Y29taWMgc2FucyBtcw==/fontsize/280/fill/I0ZGRkZGRg==/dissolve/100/gravity/SouthEast/dx/10/dy/10%7Cimageslim)
enter image description here
javah
![ndk javah](https://dn-ningso.qbox.me/blog/image/android_ndk_javah.png?imageView2/0/q/90%7Cwatermark/2/text/TmluZ1Nv/font/Y29taWMgc2FucyBtcw==/fontsize/280/fill/I0ZGRkZGRg==/dissolve/100/gravity/SouthEast/dx/10/dy/10%7Cimageslim)
ndk javah
javah
Program:$JDKPath$/bin/javah
Parameters:-encoding UTF-8 -d ../jni -jni $FileClass$
Working directory:$ModuleFileDir$/src/main/java
ndk-build
![enter image description here](https://dn-ningso.qbox.me/blog/image/android_ndk_build.png?imageView2/0/q/90%7Cwatermark/2/text/TmluZ1Nv/font/Y29taWMgc2FucyBtcw==/fontsize/280/fill/I0ZGRkZGRg==/dissolve/100/gravity/SouthEast/dx/10/dy/10%7Cimageslim)
enter image description here
ndk-build
Program:/Users/Liam/Library/Android/sdk/ndk-bundle/build/ndk-build
Parameters:
Working directory:$ModuleFileDir$/src/main
ndk-build clean
![ndk build clean](https://dn-ningso.qbox.me/blog/image/android_ndk_build_clean.png?imageView2/0/q/90%7Cwatermark/2/text/TmluZ1Nv/font/Y29taWMgc2FucyBtcw==/fontsize/280/fill/I0ZGRkZGRg==/dissolve/100/gravity/SouthEast/dx/10/dy/10%7Cimageslim)
ndk build clean
ndk-build clean
Program:/Users/Liam/Library/Android/sdk/ndk-bundle/build/ndk-build
Parameters:clean
Working directory:$ModuleFileDir$/src/main
NDK開發(fā)常見的一些錯誤:
Error 1
UnsatisfiedLinkError: No implementation found for int com.liam.nativeplugin.nativeutils.SymLink.createSymLinkJNI(java.lang.String, java.lang.String)
(tried Java_com_liam_nativeplugin_nativeutils_SymLink_createSymLinkJNI and Java_com_liam_nativeplugin_nativeutils_SymLink_createSymLinkJNI__Ljava_lang_String_2Ljava_lang_String_2)
這是剛接觸的時候最會遇到的錯誤類型了承边,意思就是會所,.c
文件定義的JNI接口類型是Java_com_liam_nativeplugin_nativeutils_SymLink_createSymLinkJNI
即包名必須為com.liam.nativeplugin.nativeutils
,類名為必須為SymLink
石挂。
也就是說博助,我們.so中函數(shù)聲明涉及到的package name和class name與調(diào)用它的package name和class name不符。因此我們要改變我們工程中的package name和class name痹愚。使其與.so文件中函數(shù)簽名提示的一致富岳,在這個類中加入native方法的聲明。
知道了這個規(guī)則拯腮,那么錯誤解決方案自然也就懂了窖式。修改正確的package name和class name重新編譯一下就好了。