java.lang.UnsatisfiedLinkError: No implementation found for void ming.com.assimptest.MyGLRenderer.SurfaceCreatedNative() (tried Java_ming_com_assimptest_MyGLRenderer_SurfaceCreatedNative and Java_ming_com_assimptest_MyGLRenderer_SurfaceCreatedNative__)
這個異常在編寫jni的時候常常出現(xiàn)
- 包名不對找都,jni方法必須要對應(yīng)包名
- 打包(包內(nèi)有多個cpp文件)時類型不對执桌,應(yīng)該選用SHARE,而不是STATIC
#引入cpp文件,第一個變量是路徑瓣颅,第二個是變量名,會把這個路徑下的所有文件打包成庫,注意這里用SHARE
aux_source_directory(${CURRENT_DIR}/src/main/cpp/jniCalls ModelAssimp)
add_library(ModelAssimpNative SHARED ${ModelAssimp})
3.文件夾不對
正常情況下是四個文件夾(我這里依賴了一個aar,aar里有四個lib的文件夾)迹蛤,但是你可能用CmakeLists.txt只編譯了一個文件夾集歇,那么其他架構(gòu)中最后就沒有Cmake編譯出來的so,就會報錯叮雳,用ndk filterAbi過濾一下
4.System.loadLibrary調(diào)用的位置不對
我原以為在哪兒都行,就寫到一個Activity(從未調(diào)用)中麻敌,但是死活報這個錯栅炒,于是放入一個調(diào)用過的類中,就好了术羔。
5.總以為自己包名寫對了赢赊,但是其實并沒有寫對,比如包名是moudle聂示,但是在Jni文件中卻是module域携。如下圖,如果真正對應(yīng)上的話鱼喉,左邊會有紅綠的小箭頭秀鞭,否則是沒有的
image.png
6.混淆,避免混淆掉so內(nèi)部調(diào)用的Java類扛禽。