-
Notifications
You must be signed in to change notification settings - Fork 390
Description
After migrating from the default IOClient to cronet_http via native_dio_adapter, the app is experiencing native JNI crashes reported on Google Play Console. The crashes occur intermittently and are affecting production users, though they are not persistent (users experience them occasionally, not every launch).
The app was previously stable with default IOClient and no JNI-related crashes were observed.
Crash Statistics
Two primary crash patterns account for 78% of all crashes:
1. Crash Pattern 1 (44% of crashes):
[split_config.arm64_v8a.apk!libdartjni.so] global_jni_env.c - globalEnv_CallObjectMethod
2. Crash Pattern 2 (34% of crashes):
[split_config.arm64_v8a.apk!libdartjni.so] global_jni_env.c - globalEnv_CallVoidMethod
Environment
- Flutter: 3.27.1
- Dart: 3.6.0
- cronet_http: ^1.6.0
- native_dio_adapter: ^1.5.0
- dio: ^5.9.0
- Platform: Android (arm64_v8a)
- Target Devices: Production devices with Google Play Services
Dependencies
dependencies:
flutter:
sdk: flutter
dio: ^5.9.0
cronet_http: ^1.6.0
native_dio_adapter: ^1.5.0
dio_smart_retry: ^7.0.1
# ... other dependenciesImplementation Code
// Configure Dio instance
Dio dio = Dio();
// Using NON default adapter - iOS specific addition
dio.httpClientAdapter = NativeAdapter(
createCupertinoConfiguration: () => URLSessionConfiguration.ephemeralSessionConfiguration()
..cache = null // Completely disable caching
..requestCachePolicy = NSURLRequestCachePolicy.NSURLRequestReloadIgnoringCacheData);Stack Traces
Crash Pattern 1 - globalEnv_CallObjectMethod (44%)
Click to expand full backtrace
#00 pc 0x000000000031562c /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeVirtualOrInterfaceWithVarArgs<_jmethodID*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, std::__va_list)+1640)
#01 pc 0x000000000060efa8 /apex/com.android.art/lib64/libart.so (art::JNI<false>::CallObjectMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list)+180)
#02 pc 0x000000000000edfc /data/app/~~pai6AifDQxJwGFvtuRXX6A==/com.app.live-7G40J9G6eT0dysSf_ihTNg==/split_config.arm64_v8a.apk!libdartjni.so (globalEnv_CallObjectMethod+342) (BuildId: 08541ae1a4196bcaa5c201e6a89cbfc41db2f31d)
#03 pc 0x00000000002615dc /data/app/~~pai6AifDQxJwGFvtuRXX6A==/com.app.live-7G40J9G6eT0dysSf_ihTNg==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#04 pc 0x00000000002ae970 /data/app/~~pai6AifDQxJwGFvtuRXX6A==/com.app.live-7G40J9G6eT0dysSf_ihTNg==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#05 pc 0x000000000063cf3c /data/app/~~pai6AifDQxJwGFvtuRXX6A==/com.app.live-7G40J9G6eT0dysSf_ihTNg==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#06 pc 0x000000000072396c /data/app/~~pai6AifDQxJwGFvtuRXX6A==/com.app.live-7G40J9G6eT0dysSf_ihTNg==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#07 pc 0x00000000007328cc /data/app/~~pai6AifDQxJwGFvtuRXX6A==/com.app.live-7G40J9G6eT0dysSf_ihTNg==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#08 pc 0x00000000006af33c /data/app/~~pai6AifDQxJwGFvtuRXX6A==/com.app.live-7G40J9G6eT0dysSf_ihTNg==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#09 pc 0x00000000006af1c8 /data/app/~~pai6AifDQxJwGFvtuRXX6A==/com.app.live-7G40J9G6eT0dysSf_ihTNg==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#10 pc 0x000000000026b638 /data/app/~~pai6AifDQxJwGFvtuRXX6A==/com.app.live-7G40J9G6eT0dysSf_ihTNg==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#11 pc 0x000000000026b29c /data/app/~~pai6AifDQxJwGFvtuRXX6A==/com.app.live-7G40J9G6eT0dysSf_ihTNg==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#12 pc 0x000000000026b208 /data/app/~~pai6AifDQxJwGFvtuRXX6A==/com.app.live-7G40J9G6eT0dysSf_ihTNg==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#13 pc 0x000000000026af4c /data/app/~~pai6AifDQxJwGFvtuRXX6A==/com.app.live-7G40J9G6eT0dysSf_ihTNg==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#14 pc 0x00000000006ae554 /data/app/~~pai6AifDQxJwGFvtuRXX6A==/com.app.live-7G40J9G6eT0dysSf_ihTNg==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#15 pc 0x000000000026aebc /data/app/~~pai6AifDQxJwGFvtuRXX6A==/com.app.live-7G40J9G6eT0dysSf_ihTNg==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#16 pc 0x0000000000263d3c /data/app/~~pai6AifDQxJwGFvtuRXX6A==/com.app.live-7G40J9G6eT0dysSf_ihTNg==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#17 pc 0x000000000086b500 /data/app/~~pai6AifDQxJwGFvtuRXX6A==/com.app.live-7G40J9G6eT0dysSf_ihTNg==/split_config.arm64_v8a.apk!libflutter.so (BuildId: fa30a3aeecc8debd0d43411c85ed486060157f89)
#18 pc 0x00000000009b0f58 /data/app/~~pai6AifDQxJwGFvtuRXX6A==/com.app.live-7G40J9G6eT0dysSf_ihTNg==/split_config.arm64_v8a.apk!libflutter.so (BuildId: fa30a3aeecc8debd0d43411c85ed486060157f89)
#19 pc 0x00000000007cf7a8 /data/app/~~pai6AifDQxJwGFvtuRXX6A==/com.app.live-7G40J9G6eT0dysSf_ihTNg==/split_config.arm64_v8a.apk!libflutter.so (BuildId: fa30a3aeecc8debd0d43411c85ed486060157f89)
#20 pc 0x000000000047f760 /data/app/~~pai6AifDQxJwGFvtuRXX6A==/com.app.live-7G40J9G6eT0dysSf_ihTNg==/split_config.arm64_v8a.apk!libflutter.so (BuildId: fa30a3aeecc8debd0d43411c85ed486060157f89)
#21 pc 0x0000000000483258 /data/app/~~pai6AifDQxJwGFvtuRXX6A==/com.app.live-7G40J9G6eT0dysSf_ihTNg==/split_config.arm64_v8a.apk!libflutter.so (BuildId: fa30a3aeecc8debd0d43411c85ed486060157f89)
#22 pc 0x0000000000018b6c /system/lib64/libutils.so (android::Looper::pollInner(int)+1252)
#23 pc 0x0000000000018624 /system/lib64/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+124)
#24 pc 0x000000000001a188 /system/lib64/libandroid.so (ALooper_pollOnce+104)
#25 pc 0x0000000000483364 /data/app/~~pai6AifDQxJwGFvtuRXX6A==/com.app.live-7G40J9G6eT0dysSf_ihTNg==/split_config.arm64_v8a.apk!libflutter.so (BuildId: fa30a3aeecc8debd0d43411c85ed486060157f89)
#26 pc 0x0000000000481468 /data/app/~~pai6AifDQxJwGFvtuRXX6A==/com.app.live-7G40J9G6eT0dysSf_ihTNg==/split_config.arm64_v8a.apk!libflutter.so (BuildId: fa30a3aeecc8debd0d43411c85ed486060157f89)
#27 pc 0x000000000048129c /data/app/~~pai6AifDQxJwGFvtuRXX6A==/com.app.live-7G40J9G6eT0dysSf_ihTNg==/split_config.arm64_v8a.apk!libflutter.so (BuildId: fa30a3aeecc8debd0d43411c85ed486060157f89)
#28 pc 0x0000000000104fc4 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+208)
#29 pc 0x000000000009e764 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+68)
Crash Pattern 2 - globalEnv_CallVoidMethod (34%)
Click to expand full backtrace
#00 pc 0x000000000031562c /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeVirtualOrInterfaceWithVarArgs<_jmethodID*>(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, _jmethodID*, std::__va_list)+1640)
#01 pc 0x0000000000620a84 /apex/com.android.art/lib64/libart.so (art::JNI<false>::CallVoidMethodV(_JNIEnv*, _jobject*, _jmethodID*, std::__va_list)+180)
#02 pc 0x0000000000010558 /data/app/~~aNdNDucFtiPNKW5Hjvn1KA==/com.app.live-OFfTTdTT6xFvB_i1IThx0Q==/split_config.arm64_v8a.apk!libdartjni.so (globalEnv_CallVoidMethod+587) (BuildId: 08541ae1a4196bcaa5c201e6a89cbfc41db2f31d)
#03 pc 0x00000000002615dc /data/app/~~aNdNDucFtiPNKW5Hjvn1KA==/com.app.live-OFfTTdTT6xFvB_i1IThx0Q==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#04 pc 0x0000000000294d68 /data/app/~~aNdNDucFtiPNKW5Hjvn1KA==/com.app.live-OFfTTdTT6xFvB_i1IThx0Q==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#05 pc 0x000000000063cd38 /data/app/~~aNdNDucFtiPNKW5Hjvn1KA==/com.app.live-OFfTTdTT6xFvB_i1IThx0Q==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#06 pc 0x000000000072397c /data/app/~~aNdNDucFtiPNKW5Hjvn1KA==/com.app.live-OFfTTdTT6xFvB_i1IThx0Q==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#07 pc 0x00000000007328cc /data/app/~~aNdNDucFtiPNKW5Hjvn1KA==/com.app.live-OFfTTdTT6xFvB_i1IThx0Q==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#08 pc 0x00000000006af33c /data/app/~~aNdNDucFtiPNKW5Hjvn1KA==/com.app.live-OFfTTdTT6xFvB_i1IThx0Q==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#09 pc 0x00000000006af1c8 /data/app/~~aNdNDucFtiPNKW5Hjvn1KA==/com.app.live-OFfTTdTT6xFvB_i1IThx0Q==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#10 pc 0x000000000026b638 /data/app/~~aNdNDucFtiPNKW5Hjvn1KA==/com.app.live-OFfTTdTT6xFvB_i1IThx0Q==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#11 pc 0x000000000026b29c /data/app/~~aNdNDucFtiPNKW5Hjvn1KA==/com.app.live-OFfTTdTT6xFvB_i1IThx0Q==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#12 pc 0x000000000026b208 /data/app/~~aNdNDucFtiPNKW5Hjvn1KA==/com.app.live-OFfTTdTT6xFvB_i1IThx0Q==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#13 pc 0x000000000026af4c /data/app/~~aNdNDucFtiPNKW5Hjvn1KA==/com.app.live-OFfTTdTT6xFvB_i1IThx0Q==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#14 pc 0x00000000006ae554 /data/app/~~aNdNDucFtiPNKW5Hjvn1KA==/com.app.live-OFfTTdTT6xFvB_i1IThx0Q==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#15 pc 0x000000000026aebc /data/app/~~aNdNDucFtiPNKW5Hjvn1KA==/com.app.live-OFfTTdTT6xFvB_i1IThx0Q==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#16 pc 0x0000000000263d3c /data/app/~~aNdNDucFtiPNKW5Hjvn1KA==/com.app.live-OFfTTdTT6xFvB_i1IThx0Q==/split_config.arm64_v8a.apk (BuildId: 369f5a6f1c3cb3706116077ff581902d)
#17 pc 0x000000000086b500 /data/app/~~aNdNDucFtiPNKW5Hjvn1KA==/com.app.live-OFfTTdTT6xFvB_i1IThx0Q==/split_config.arm64_v8a.apk!libflutter.so (BuildId: fa30a3aeecc8debd0d43411c85ed486060157f89)
#18 pc 0x00000000009b0f58 /data/app/~~aNdNDucFtiPNKW5Hjvn1KA==/com.app.live-OFfTTdTT6xFvB_i1IThx0Q==/split_config.arm64_v8a.apk!libflutter.so (BuildId: fa30a3aeecc8debd0d43411c85ed486060157f89)
#19 pc 0x00000000007cf7a8 /data/app/~~aNdNDucFtiPNKW5Hjvn1KA==/com.app.live-OFfTTdTT6xFvB_i1IThx0Q==/split_config.arm64_v8a.apk!libflutter.so (BuildId: fa30a3aeecc8debd0d43411c85ed486060157f89)
#20 pc 0x000000000047f760 /data/app/~~aNdNDucFtiPNKW5Hjvn1KA==/com.app.live-OFfTTdTT6xFvB_i1IThx0Q==/split_config.arm64_v8a.apk!libflutter.so (BuildId: fa30a3aeecc8debd0d43411c85ed486060157f89)
#21 pc 0x0000000000483258 /data/app/~~aNdNDucFtiPNKW5Hjvn1KA==/com.app.live-OFfTTdTT6xFvB_i1IThx0Q==/split_config.arm64_v8a.apk!libflutter.so (BuildId: fa30a3aeecc8debd0d43411c85ed486060157f89)
#22 pc 0x0000000000018b6c /system/lib64/libutils.so (android::Looper::pollInner(int)+1252)
#23 pc 0x0000000000018624 /system/lib64/libutils.so (android::Looper::pollOnce(int, int*, int*, void**)+124)
#24 pc 0x000000000001a188 /system/lib64/libandroid.so (ALooper_pollOnce+104)
#25 pc 0x0000000000483364 /data/app/~~aNdNDucFtiPNKW5Hjvn1KA==/com.app.live-OFfTTdTT6xFvB_i1IThx0Q==/split_config.arm64_v8a.apk!libflutter.so (BuildId: fa30a3aeecc8debd0d43411c85ed486060157f89)
#26 pc 0x0000000000481468 /data/app/~~aNdNDucFtiPNKW5Hjvn1KA==/com.app.live-OFfTTdTT6xFvB_i1IThx0Q==/split_config.arm64_v8a.apk!libflutter.so (BuildId: fa30a3aeecc8debd0d43411c85ed486060157f89)
#27 pc 0x000000000048129c /data/app/~~aNdNDucFtiPNKW5Hjvn1KA==/com.app.live-OFfTTdTT6xFvB_i1IThx0Q==/split_config.arm64_v8a.apk!libflutter.so (BuildId: fa30a3aeecc8debd0d43411c85ed486060157f89)
#28 pc 0x0000000000104fc4 /apex/com.android.runtime/lib64/bionic/libc.so (__pthread_start(void*)+208)
#29 pc 0x000000000009e764 /apex/com.android.runtime/lib64/bionic/libc.so (__start_thread+68)
Expected Behavior
The app should function without native crashes when using cronet_http through native_dio_adapter, similar to the stability experienced with the default IOClient.
Actual Behavior
Native JNI crashes occur intermittently (not on every app launch) in production, specifically in libdartjni.so at globalEnv_CallObjectMethod and globalEnv_CallVoidMethod. These crashes affect app performance metrics, with slow warm load times reported on Google Play Console.
Additional Context
-
Intermittent Nature: The crashes are not persistent - users experience them occasionally, not consistently on every launch
-
Performance Impact: In addition to crashes, Google Play Console is reporting slow warm load times for the app after introducing cronet_http
Additional Information Needed
Please let me know if you need:
- Full
pubspec.yaml(provided above) - App initialization code (
main.dart) - ProGuard rules (if applicable)
- Device-specific information from crash reports
Main.dart
FutureOr main() async {
runAppWithFlavor();
}
Future runAppWithFlavor({
List Function()? getFlavorRoutes, // Optional routes
}) async {
WidgetsFlutterBinding.ensureInitialized();
_configureSystemUI();
await Firebase.initializeApp(options: firebaseOptions);
Logger.info("MAIN Starting DI");
await setupLocator();
await LocalNotifications.initialize();
await FirebaseNotifications.initialize();
setupEnhancedErrorHandling();
// Router setup
final router = GoRouter(
initialLocation: '/',
routes: [
...getCommonRoutes(),
...?getFlavorRoutes?.call(),
],
observers: [FirebaseAnalyticsObserver(analytics: FirebaseAnalytics.instance)]
);
di.dart
final locator = GetIt.instance;
// Setup Dependency Injection
Future setupLocator() async {
//Shared preferences
final prefs = await SharedPreferencesWithCacheSingleton.getInstance();
locator.registerSingleton(prefs);
// Configure Dio instance
Dio dio = Dio();
//Using NON default adapter - iOS specific addition
dio.httpClientAdapter = NativeAdapter(
createCupertinoConfiguration: () => URLSessionConfiguration.ephemeralSessionConfiguration()
..cache = null // Completely disable caching
..requestCachePolicy = NSURLRequestCachePolicy.NSURLRequestReloadIgnoringCacheData);
// Define base options
dio.options = BaseOptions(
connectTimeout: const Duration(seconds: 8),
receiveTimeout: const Duration(seconds: Const.timeout),
headers: {
'User-Agent': Const.userAgent,
'Accept-Encoding': 'gzip, deflate, br',
'Cache-Control': 'no-cache, no-store, must-revalidate',
'Pragma': 'no-cache',
},
);
}
app/build.gradle
compileSdk = flutter.compileSdkVersion
ndkVersion = "28.0.12433566"