Как я могу исправить плохую версию JNI, возвращенную из ошибки JNI_OnLoad на flutter

# #firebase #flutter

Вопрос:

Когда я извлекаю приложение в виде apk и тестирую его на реальном устройстве Android, оно аварийно завершается, но когда я запускаю его как отладочное, оно работает нормально. Причиной ошибки является библиотека pub.dev —> video_editor. Я получил этот вывод об ошибке с Firebase:

 Caused by java.lang.UnsatisfiedLinkError:
Bad JNI version returned from JNI_OnLoad in "/data/app/com.projectName--b7nYjATxtDAUxnuC_rpnQ==/base.apk!/lib/armeabi-v7a/libmobileffmpeg.so": 0
java.lang.Runtime.loadLibrary0 (Runtime.java:1016)
java.lang.System.loadLibrary (System.java:1657)
com.arthenica.mobileffmpeg.Config.<clinit> (Config.java:146)
com.arthenica.mobileffmpeg.Config.nativeFFprobeExecute (Config.java)
com.arthenica.mobileffmpeg.FFprobe.execute (FFprobe.java)
com.arthenica.mobileffmpeg.FFprobe.getMediaInformationFromCommandArguments (FFprobe.java)
com.arthenica.mobileffmpeg.FFprobe.getMediaInformation (FFprobe.java:48)
com.arthenica.flutter.ffmpeg.FlutterFFmpegGetMediaInformationAsyncTask.doInBackground (FlutterFFmpegGetMediaInformationAsyncTask.java:21)
com.arthenica.flutter.ffmpeg.FlutterFFmpegGetMediaInformationAsyncTask.doInBackground (FlutterFFmpegGetMediaInformationAsyncTask.java:2)
android.os.AsyncTask$2.call (AsyncTask.java:333)
java.util.concurrent.FutureTask.run (FutureTask.java:266)
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1162)
java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:636)
java.lang.Thread.run (Thread.java:764)
 

Ответ №1:

Включение ProGuard в версиях старше версии 0.2.4 приводит к ошибкам связывания. Пожалуйста, добавьте следующее правило в свои правила proguard.файл pro для сохранения необходимых имен методов и предотвращения ошибок связывания.

 -keep class com.arthenica.mobileffmpeg.Config {
  native <methods>;
  void log(int, byte[]);
  void statistics(int, float, float, long , int, double, double);
 }
 

а также убедитесь, что MavenCentral() определен как репозиторий в вашем build.gradle и указан перед jcenter().

См. документацию flutter ffmpeg https://pub.dev/packages/flutter_ffmpeg