Skip to content

[jni_flutter] JNI library not available in Flutter apps (release mode only) #3280

@deminearchiver

Description

@deminearchiver

I have migrated my JNI plugins to use the newly-released jni_flutter package.

After that, my app started crashing upon trying to call a function from the jni_flutter library, but only in release mode. In both debug and profile modes it works fine.

Below is the native stack trace. materium is my app's package name. device_info_ffi is one of my JNI-based plugins.

D/FlutterArchivePlugin( 6559): onAttachedToEngine - IN
D/FlutterArchivePlugin( 6559): doOnAttachedToEngine - IN
D/FlutterArchivePlugin( 6559): doOnAttachedToEngine - OUT
D/FlutterArchivePlugin( 6559): onAttachedToEngine - OUT
I/flutter ( 6559): [IMPORTANT:flutter/shell/platform/android/android_context_gl_impeller.cc(104)] Using the Impeller rendering backend (OpenGLES).
E/flutter ( 6559): [ERROR:flutter/runtime/dart_vm_initializer.cc(40)] Unhandled Exception: Exception in Java: java.lang.ClassNotFoundException: Didn't find class "com/github/dart_lang/jni_flutter/JniFlutterPlugin" on path: DexPathList[[zip file "/data/app/~~3b1MtVYmZULZZp-_uzZIYA==/dev.deminearchiver.materium-n1bZdR0DgA4GRfp4hSSg1A==/base.apk"],nativeLibraryDirectories=[/data/app/~~3b1MtVYmZULZZp-_uzZIYA==/dev.deminearchiver.materium-n1bZdR0DgA4GRfp4hSSg1A==/lib/x86_64, /data/app/~~3b1MtVYmZULZZp-_uzZIYA==/dev.deminearchiver.materium-n1bZdR0DgA4GRfp4hSSg1A==/base.apk!/lib/x86_64, /system/lib64, /system_ext/lib64]]
E/flutter ( 6559): java.lang.ClassNotFoundException: Didn't find class "com/github/dart_lang/jni_flutter/JniFlutterPlugin" on path: DexPathList[[zip file "/data/app/~~3b1MtVYmZULZZp-_uzZIYA==/dev.deminearchiver.materium-n1bZdR0DgA4GRfp4hSSg1A==/base.apk"],nativeLibraryDirectories=[/data/app/~~3b1MtVYmZULZZp-_uzZIYA==/dev.deminearchiver.materium-n1bZdR0DgA4GRfp4hSSg1A==/lib/x86_64, /data/app/~~3b1MtVYmZULZZp-_uzZIYA==/dev.deminearchiver.materium-n1bZdR0DgA4GRfp4hSSg1A==/base.apk!/lib/x86_64, /system/lib64, /system_ext/lib64]]
E/flutter ( 6559): 	at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:259)
E/flutter ( 6559): 	at java.lang.ClassLoader.loadClass(ClassLoader.java:642)
E/flutter ( 6559): 	at java.lang.ClassLoader.loadClass(ClassLoader.java:578)
E/flutter ( 6559): 	at android.os.MessageQueue.nativePollOnce(Native Method)
E/flutter ( 6559): 	at android.os.MessageQueue.nextLegacy(MessageQueue.java:985)
E/flutter ( 6559): 	at android.os.MessageQueue.next(MessageQueue.java:1094)
E/flutter ( 6559): 	at android.os.Looper.loopOnce(Looper.java:197)
E/flutter ( 6559): 	at android.os.Looper.loop(Looper.java:367)
E/flutter ( 6559): 	at android.app.ActivityThread.main(ActivityThread.java:9287)
E/flutter ( 6559): 	at java.lang.reflect.Method.invoke(Native Method)
E/flutter ( 6559): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:566)
E/flutter ( 6559): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:929)
E/flutter ( 6559): 
E/flutter ( 6559): #0      Jni.throwException (package:jni/src/jni.dart:209)
E/flutter ( 6559): #1      _check (package:jni/src/accessors.dart:16)
E/flutter ( 6559): #2      JniClassLookupResultMethods.checkedClassRef (package:jni/src/accessors.dart:110)
E/flutter ( 6559): #3      Jni.findClass (package:jni/src/jni.dart:197)
E/flutter ( 6559): #4      new JClass.forName (package:jni/src/jclass.dart:17)
E/flutter ( 6559): #5      JniFlutterPlugin._class (package:jni_flutter/src/generated_plugin.dart:49)
E/flutter ( 6559): #6      JniFlutterPlugin.applicationContext (package:jni_flutter/src/generated_plugin.dart)
E/flutter ( 6559): #7      androidApplicationContext (package:jni_flutter/src/jni_flutter.dart:14)
E/flutter ( 6559): #8      DeviceInfoAndroid._androidDeviceInfo (package:device_info_ffi/src/device_info_android.dart:374)
E/flutter ( 6559): #9      DeviceInfoAndroid.deviceInfo (package:device_info_ffi/src/device_info_android.dart:368)
E/flutter ( 6559): #10     DeviceInfo.deviceInfo (package:device_info_ffi/src/device_info.dart:5)
E/flutter ( 6559): #11     DeviceInfo.androidInfo (package:device_info_ffi/src/device_info.dart:7)
E/flutter ( 6559): #12     main (package:materium/main.dart:173)
E/flutter ( 6559): <asynchronous suspension>
E/flutter ( 6559): 

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions