Android ndk适配报错分析
*** FATAL EXCEPTION TIME : 656.26746
E/AndroidRuntime(13660): FATAL EXCEPTION: main
E/AndroidRuntime(13660): Process: com.example.ndkproject, PID: 13660
java.lang.UnsatisfiedLinkError: dlopen failed: could not load library "libavfilter.so" needed by "libnative-lib.so"; caused by could not load library "libavformat.so" needed by "libavfilter.so"; caused by cannot locate symbol "atof" referenced by "libavformat.so"...
E/AndroidRuntime(14706): at java.lang.Runtime.loadLibrary(Runtime.java:364)
E/AndroidRuntime(14706): at java.lang.System.loadLibrary(System.java:526)
E/AndroidRuntime(14706): at com.hisense.hisenseplayer.MainActivity.(MainActivity.java:24)
E/AndroidRuntime(14706): at java.lang.Class.newInstanceImpl(Native Method)
E/AndroidRuntime(14706): at java.lang.Class.newInstance(Class.java:1208)
E/AndroidRuntime(14706): at android.app.Instrumentation.newActivity(Instrumentation.java:1061)
E/AndroidRuntime(14706): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2124)
E/AndroidRuntime(14706): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257)
E/AndroidRuntime(14706): at android.app.ActivityThread.access$800(ActivityThread.java:135)
E/AndroidRuntime(14706): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1198)
E/AndroidRuntime(14706): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(14706): at android.os.Looper.loop(Looper.java:136)
E/AndroidRuntime(14706): at android.app.ActivityThread.main(ActivityThread.java:5057)
E/AndroidRuntime(14706): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(14706): at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime(14706): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
E/AndroidRuntime(14706): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:676)
E/AndroidRuntime(14706): at dalvik.system.NativeStart.main(Native Method)
这个问题原因目前定位是因为是android 4.4的原因,在android5.0及以上的设备没有这个问题,本来以为是minsdk的问题,发现在android5.0的设备上minsdk可以设置为14也不会报这些问题,除了这个报错还有下面这个报错也是因为这个原因。
*** FATAL EXCEPTION TIME : 621.9524
E/AndroidRuntime(13513): FATAL EXCEPTION: main
E/AndroidRuntime(13513): Process: com.example.ndkproject, PID: 13513
E/AndroidRuntime(13513): java.lang.UnsatisfiedLinkError: dlopen failed: could not load library "libavcodec.so" needed by "libnative-lib.so"; caused by could not load library "libswresample.so" needed by "libavcodec.so"; caused by could not load library "libavutil.so" needed by "libswresample.so"; caused by cannot locate symbol "mmap64" referenced by "libavutil.so"...
E/AndroidRuntime(13513): at java.lang.Runtime.loadLibrary(Runtime.java:364)
E/AndroidRuntime(13513): at java.lang.System.loadLibrary(System.java:526)
E/AndroidRuntime(13513): at com.example.ndkproject.FFmpegSurface.(FFmpegSurface.java:16)
E/AndroidRuntime(13513): at com.example.ndkproject.MainActivity.onCreate(MainActivity.java:35)
E/AndroidRuntime(13513): at android.app.Activity.performCreate(Activity.java:5240)
E/AndroidRuntime(13513): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
E/AndroidRuntime(13513): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2171)
E/AndroidRuntime(13513): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2257)
E/AndroidRuntime(13513): at android.app.ActivityThread.access$800(ActivityThread.java:135)
E/AndroidRuntime(13513): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1198)
E/AndroidRuntime(13513): at android.os.Handler.dispatchMessage(Handler.java:102)
E/AndroidRuntime(13513): at android.os.Looper.loop(Looper.java:136)
E/AndroidRuntime(13513): at android.app.ActivityThread.main(ActivityThread.java:5057)
E/AndroidRuntime(13513): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(13513): at java.lang.reflect.Method.invoke(Method.java:515)
E/AndroidRuntime(13513): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
E/AndroidRuntime(13513): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:676)
E/AndroidRuntime(13513): at dalvik.system.NativeStart.main(Native Method)
暂时没有解决方案处理这个问题,我现在用得是ffmpeg的二进制文件来执行相关操作,所以引入so库的方式被搁置了~