wang-bin / fvp

Flutter video player plugin for all desktop+mobile platforms. download prebuilt examples from github actions. https://pub.dev/packages/fvp
BSD 3-Clause "New" or "Revised" License
126 stars 20 forks source link

Cannot load so on old version android #55

Closed bailyzheng closed 6 months ago

bailyzheng commented 6 months ago

Describe the bug Throw exception when init.

Expected behavior It seems not load so properly. My device is android 4.1.1 api 16.

Log

java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at io.flutter.embedding.engine.plugins.util.GeneratedPluginRegister.registerGeneratedPlugins(GeneratedPluginRegister.java:80)
    at io.flutter.embedding.android.FlutterActivity.configureFlutterEngine(FlutterActivity.java:1321)
    at com.weijietech.manhattan.MainActivity.configureFlutterEngine(MainActivity.kt:10)
    at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onAttach(FlutterActivityAndFragmentDelegate.java:214)
    at io.flutter.embedding.android.FlutterActivity.onCreate(FlutterActivity.java:643)
    at android.app.Activity.performCreate(Activity.java:5020)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2211)
    at android.app.ActivityThread.access$600(ActivityThread.java:149)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1300)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:153)
    at android.app.ActivityThread.main(ActivityThread.java:5086)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.ExceptionInInitializerError
    at io.flutter.plugins.GeneratedPluginRegistrant.registerWith(GeneratedPluginRegistrant.java:59)
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at io.flutter.embedding.engine.plugins.util.GeneratedPluginRegister.registerGeneratedPlugins(GeneratedPluginRegister.java:80) 
    at io.flutter.embedding.android.FlutterActivity.configureFlutterEngine(FlutterActivity.java:1321) 
    at com.weijietech.manhattan.MainActivity.configureFlutterEngine(MainActivity.kt:10) 
    at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onAttach(FlutterActivityAndFragmentDelegate.java:214) 
    at io.flutter.embedding.android.FlutterActivity.onCreate(FlutterActivity.java:643) 
    at android.app.Activity.performCreate(Activity.java:5020) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2211) 
    at android.app.ActivityThread.access$600(ActivityThread.java:149) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1300) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:153) 
    at android.app.ActivityThread.main(ActivityThread.java:5086) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.UnsatisfiedLinkError: Cannot load library: link_image[1907]:   104 could not load needed library 'libmdk.so' for 'libfvp_plugin.so' (load_library[1109]: Library 'libmdk.so' not found)
    at java.lang.Runtime.loadLibrary(Runtime.java:370)
    at java.lang.System.loadLibrary(System.java:535)
    at com.mediadevkit.fvp.FvpPlugin.<clinit>(FvpPlugin.java:98)
    at io.flutter.plugins.GeneratedPluginRegistrant.registerWith(GeneratedPluginRegistrant.java:59) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at io.flutter.embedding.engine.plugins.util.GeneratedPluginRegister.registerGeneratedPlugins(GeneratedPluginRegister.java:80) 
    at io.flutter.embedding.android.FlutterActivity.configureFlutterEngine(FlutterActivity.java:1321) 
    at com.weijietech.manhattan.MainActivity.configureFlutterEngine(MainActivity.kt:10) 
    at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onAttach(FlutterActivityAndFragmentDelegate.java:214) 
    at io.flutter.embedding.android.FlutterActivity.onCreate(FlutterActivity.java:643) 
    at android.app.Activity.performCreate(Activity.java:5020) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2211) 
    at android.app.ActivityThread.access$600(ActivityThread.java:149) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1300) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:153) 
    at android.app.ActivityThread.main(ActivityThread.java:5086) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584) 
    at dalvik.system.NativeStart.main(Native Method) 
wang-bin commented 6 months ago

What about adding the following lines before this line https://github.com/wang-bin/fvp/blob/d3c3db29451a28656c2189ce159002634b1433e6/android/src/main/java/com/mediadevkit/fvp/FvpPlugin.java#L98

System.loadLibrary("libffmpeg.so");
System.loadLibrary("libc++_shared.so");
System.loadLibrary("libmdk.so");

btw, these libraries were built with ndk r25b, which only supports api level >= 19, so there can be other errors if any new api was used in these libraries.

bailyzheng commented 6 months ago
java.lang.reflect.InvocationTargetException
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at io.flutter.embedding.engine.plugins.util.GeneratedPluginRegister.registerGeneratedPlugins(GeneratedPluginRegister.java:80)
    at io.flutter.embedding.android.FlutterActivity.configureFlutterEngine(FlutterActivity.java:1321)
    at com.weijietech.manhattan.MainActivity.configureFlutterEngine(MainActivity.kt:10)
    at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onAttach(FlutterActivityAndFragmentDelegate.java:214)
    at io.flutter.embedding.android.FlutterActivity.onCreate(FlutterActivity.java:643)
    at android.app.Activity.performCreate(Activity.java:5020)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2211)
    at android.app.ActivityThread.access$600(ActivityThread.java:149)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1300)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:153)
    at android.app.ActivityThread.main(ActivityThread.java:5086)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
    at dalvik.system.NativeStart.main(Native Method)
 Caused by: java.lang.ExceptionInInitializerError
    at io.flutter.plugins.GeneratedPluginRegistrant.registerWith(GeneratedPluginRegistrant.java:59)
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at io.flutter.embedding.engine.plugins.util.GeneratedPluginRegister.registerGeneratedPlugins(GeneratedPluginRegister.java:80) 
    at io.flutter.embedding.android.FlutterActivity.configureFlutterEngine(FlutterActivity.java:1321) 
    at com.weijietech.manhattan.MainActivity.configureFlutterEngine(MainActivity.kt:10) 
    at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onAttach(FlutterActivityAndFragmentDelegate.java:214) 
    at io.flutter.embedding.android.FlutterActivity.onCreate(FlutterActivity.java:643) 
    at android.app.Activity.performCreate(Activity.java:5020) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2211) 
    at android.app.ActivityThread.access$600(ActivityThread.java:149) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1300) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:153) 
    at android.app.ActivityThread.main(ActivityThread.java:5086) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584) 
    at dalvik.system.NativeStart.main(Native Method) 
 Caused by: java.lang.UnsatisfiedLinkError: Couldn't load libffmpeg.so: findLibrary returned null
    at java.lang.Runtime.loadLibrary(Runtime.java:365)
    at java.lang.System.loadLibrary(System.java:535)
    at com.mediadevkit.fvp.FvpPlugin.<clinit>(FvpPlugin.java:100)
    at io.flutter.plugins.GeneratedPluginRegistrant.registerWith(GeneratedPluginRegistrant.java:59) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at io.flutter.embedding.engine.plugins.util.GeneratedPluginRegister.registerGeneratedPlugins(GeneratedPluginRegister.java:80) 
    at io.flutter.embedding.android.FlutterActivity.configureFlutterEngine(FlutterActivity.java:1321) 
    at com.weijietech.manhattan.MainActivity.configureFlutterEngine(MainActivity.kt:10) 
    at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onAttach(FlutterActivityAndFragmentDelegate.java:214) 
    at io.flutter.embedding.android.FlutterActivity.onCreate(FlutterActivity.java:643) 
    at android.app.Activity.performCreate(Activity.java:5020) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2211) 
    at android.app.ActivityThread.access$600(ActivityThread.java:149) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1300) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:153) 
    at android.app.ActivityThread.main(ActivityThread.java:5086) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584) 
    at dalvik.system.NativeStart.main(Native Method)

@wang-bin Still not work. Since I did not use fvp on android platform. I simply not load when android api level less than 19. So that app start routine will not be blocked.

    if (Build.VERSION.SDK_INT >= 19) {
      System.loadLibrary("fvp_plugin");
    }
wang-bin commented 6 months ago

I see, you can use other backend, fvp should not throw exceptions. what about this

    try {
        System.loadLibrary("fvp_plugin");
    } catch (UnsatisfiedLinkError e) {
        Log.w("FvpPlugin", "static initializer: loadLibrary fvp_plugin error: " + e);
    }
bailyzheng commented 6 months ago

@wang-bin It works in this way. It can be more adaptive. Merge this next version please.

wang-bin commented 6 months ago

sure

wang-bin commented 6 months ago

new version is available