-
Notifications
You must be signed in to change notification settings - Fork 90
Open
Description
Summary
Adding JNI to a Flutter project makes the app slow at startup and might cause ANR
Steps to reproduce
- Create a flutter app.
- Add JNI package
- Add Strict Mode to Android to see what is going on.
pubspec.yaml
dependencies:
flutter:
sdk: flutter
jni: ^0.14.2Result
This logs shows up
StrictMode policy violation; ~duration=485 ms: android.os.strictmode.DiskReadViolation
at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1596)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:249)
at libcore.io.ForwardingOs.open(ForwardingOs.java:166)
at android.app.ActivityThread$AndroidOs.open(ActivityThread.java:7929)
at libcore.io.IoUtils.canOpenReadOnly(IoUtils.java:275)
at dalvik.system.DexPathList$NativeLibraryElement.findNativeLibrary(DexPathList.java:884)
at dalvik.system.DexPathList.findLibrary(DexPathList.java:595)
at dalvik.system.BaseDexClassLoader.findLibrary(BaseDexClassLoader.java:281)
at java.lang.Runtime.loadLibrary0(Runtime.java:1061)
at java.lang.Runtime.loadLibrary0(Runtime.java:1008)
at java.lang.System.loadLibrary(System.java:1664)
at com.github.dart_lang.jni.JniPlugin.<clinit>(JniPlugin.java:52)
at io.flutter.plugins.GeneratedPluginRegistrant.registerWith(GeneratedPluginRegistrant.java:19)
at java.lang.reflect.Method.invoke(Native Method)
at io.flutter.embedding.engine.plugins.util.GeneratedPluginRegister.registerGeneratedPlugins(GeneratedPluginRegister.java:80)
at io.flutter.embedding.android.FlutterActivity.configureFlutterEngine(FlutterActivity.java:1343)
at io.flutter.embedding.android.FlutterActivityAndFragmentDelegate.onAttach(FlutterActivityAndFragmentDelegate.java:220)
at io.flutter.embedding.android.FlutterActivity.onCreate(FlutterActivity.java:645)
at android.app.Activity.performCreate(Activity.java:8006)
at android.app.Activity.performCreate(Activity.java:7990)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3589)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3780)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2251)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:233)
at android.app.ActivityThread.main(ActivityThread.java:8068)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:631)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:978)
Because of
static {
System.loadLibrary("dartjni");
}In
native/pkgs/jni/android/src/main/java/com/github/dart_lang/jni/JniPlugin.java
Lines 51 to 53 in 22eac2d
| static { | |
| System.loadLibrary("dartjni"); | |
| } |
This might cause ANR errors in Android apps.
Possible solutions
Maybe do this in an other thread ? An Executor or something ?
To prevent blocking the main thread
Metadata
Metadata
Assignees
Type
Projects
Status
No status