dart-lang / http

A composable API for making HTTP requests in Dart.
https://pub.dev/packages/http
BSD 3-Clause "New" or "Revised" License
1.02k stars 353 forks source link

Cronet JNI crash in release and profile builds #1241

Open lukehutch opened 3 months ago

lukehutch commented 3 months ago

I am getting an NDK crash in libdartjni.so (GetApplicationContext+60) when I upload a release build of my APK to the Play Store. (The debug build runs fine locally.)

image

I eventually ran into this additional issue of profile builds crashing locally (Android emulator, API level 34), which I then figured out had the same cause:

https://github.com/flutter/flutter/issues/149229

This is a JNI crash, so I filed this JNI bug: https://github.com/dart-lang/native/issues/1150 However, @HosseinYousefi asked me to also file a Cronet bug, because that is the only project I am using that makes JNI calls.

Here are the Cronet setup steps I am using:

pubscec.yaml:

  http: ^1.0.0
  cronet_http: ^1.2.1
  cupertino_http: ^1.4.0

main.dart:

void main() {
  // Set up Cronet http client on Android or Cupertino http client on iOS
  if (Platform.isAndroid) {
    final engine =
        CronetEngine.build(cacheMode: CacheMode.memory, cacheMaxSize: 1000000);
    runWithClient(run, () => CronetClient.fromCronetEngine(engine));
  } else if (Platform.isIOS || Platform.isMacOS) {
    final config = URLSessionConfiguration.ephemeralSessionConfiguration()
      ..cache = URLCache.withCapacity(memoryCapacity: 1000000);
    runWithClient(run, () => CupertinoClient.fromSessionConfiguration(config));
  } else {
    // Run with the default IOClient
    run();
  }
}

void run() {
  runApp(const MyApp());
}

I created this project as an attempt at a minimal reproducer, which adds only the above to the default Flutter project:

https://github.com/lukehutch/cronetcrash

I cannot reproduce the crash using this project, but it causes a different issue: release builds freeze on startup, before the UI is fully drawn (debug and profile builds start up fully):

Here is the logcat from the app startup when the release build freezes:

logcat output ```console 2024-06-20 12:50:03.915 17290-21963 NearbyMediums com.google.android.gms.persistent I No BLE Fast/GATT advertisements found in the latest cycle. 2024-06-20 12:50:08.054 1985-1985 StatusBarIconController com.android.systemui D ignoring old pipeline callbacks, because the new mobile icons are enabled 2024-06-20 12:50:08.064 1985-2119 EGL_emulation com.android.systemui D app_time_stats: avg=8053.20ms min=8053.20ms max=8053.20ms count=1 2024-06-20 12:50:10.686 1789-3771 ActivityManager system_server I Force stopping com.example.cronetcrash appid=10193 user=0: from pid 22103 2024-06-20 12:50:10.689 1789-3771 ProcessStats system_server W Tracking association SourceState{5793463 com.google.android.googlequicksearchbox:search/10132 BTop #268263} whose proc state 2 is better than process ProcessState{e2f934a com.google.android.gms.persistent/10123 pkg=com.google.android.gms} proc state 4 (17 skipped) 2024-06-20 12:50:10.690 1789-3771 AppsFilter system_server I interaction: PackageSetting{fa8e23e app.clicksocial/10192} -> PackageSetting{56e64c9 com.example.cronetcrash/10193} BLOCKED 2024-06-20 12:50:10.693 2144-2144 CarrierSvcBindHelper com.android.phone D onHandleForceStop: [com.example.cronetcrash] 2024-06-20 12:50:10.694 2144-2144 CarrierSvcBindHelper com.android.phone D No carrier app for: 0 2024-06-20 12:50:10.795 1789-3771 Compatibil...geReporter system_server D Compat change id reported: 161252188; UID 10193; state: DISABLED 2024-06-20 12:50:10.795 1789-3771 ActivityTaskManager system_server W callingPackage for (uid=2000, pid=22115) has no WPC 2024-06-20 12:50:10.796 1789-3771 Compatibil...geReporter system_server D Compat change id reported: 265464455; UID 10193; state: DISABLED 2024-06-20 12:50:10.796 1789-3771 Compatibil...geReporter system_server D Compat change id reported: 265452344; UID 10193; state: DISABLED 2024-06-20 12:50:10.796 1789-3771 Compatibil...geReporter system_server D Compat change id reported: 266124927; UID 10193; state: DISABLED 2024-06-20 12:50:10.796 1789-3771 Compatibil...geReporter system_server D Compat change id reported: 265451093; UID 10193; state: DISABLED 2024-06-20 12:50:10.796 1789-3771 Compatibil...geReporter system_server D Compat change id reported: 265456536; UID 10193; state: DISABLED 2024-06-20 12:50:10.796 1789-3771 Compatibil...geReporter system_server D Compat change id reported: 255940284; UID 10193; state: DISABLED 2024-06-20 12:50:10.796 1789-3771 Compatibil...geReporter system_server D Compat change id reported: 236283604; UID 10193; state: DISABLED 2024-06-20 12:50:10.796 1789-3771 Compatibil...geReporter system_server D Compat change id reported: 263959004; UID 10193; state: DISABLED 2024-06-20 12:50:10.796 1789-3771 Compatibil...geReporter system_server D Compat change id reported: 264304459; UID 10193; state: DISABLED 2024-06-20 12:50:10.796 1789-3771 Compatibil...geReporter system_server D Compat change id reported: 264301586; UID 10193; state: DISABLED 2024-06-20 12:50:10.796 1789-3771 Compatibil...geReporter system_server D Compat change id reported: 254631730; UID 10193; state: DISABLED 2024-06-20 12:50:10.796 1789-3771 Compatibil...geReporter system_server D Compat change id reported: 273509367; UID 10193; state: DISABLED 2024-06-20 12:50:10.796 1789-3771 Compatibil...geReporter system_server D Compat change id reported: 263259275; UID 10193; state: DISABLED 2024-06-20 12:50:10.796 1789-3771 Compatibil...geReporter system_server D Compat change id reported: 174042980; UID 10193; state: DISABLED 2024-06-20 12:50:10.796 1789-3771 Compatibil...geReporter system_server D Compat change id reported: 174042936; UID 10193; state: DISABLED 2024-06-20 12:50:10.796 1789-3771 Compatibil...geReporter system_server D Compat change id reported: 181136395; UID 10193; state: DISABLED 2024-06-20 12:50:10.796 1789-3771 Compatibil...geReporter system_server D Compat change id reported: 194480991; UID 10193; state: ENABLED 2024-06-20 12:50:10.799 1789-3771 Compatibil...geReporter system_server D Compat change id reported: 184838306; UID 10193; state: DISABLED 2024-06-20 12:50:10.799 1789-3771 Compatibil...geReporter system_server D Compat change id reported: 185004937; UID 10193; state: DISABLED 2024-06-20 12:50:10.801 1789-3771 Compatibil...geReporter system_server D Compat change id reported: 205907456; UID 10193; state: ENABLED 2024-06-20 12:50:10.804 1985-2031 WindowManagerShell com.android.systemui V Transition requested: android.os.BinderProxy@9263dfb TransitionRequestInfo { type = OPEN, triggerTask = TaskInfo{userId=0 taskId=29 displayId=0 isRunning=true baseIntent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x30000000 cmp=com.example.cronetcrash/.MainActivity } baseActivity=ComponentInfo{com.example.cronetcrash/com.example.cronetcrash.MainActivity} topActivity=ComponentInfo{com.example.cronetcrash/com.example.cronetcrash.MainActivity} origActivity=null realActivity=ComponentInfo{com.example.cronetcrash/com.example.cronetcrash.MainActivity} numActivities=1 lastActiveTime=1130910330 supportsMultiWindow=true resizeMode=1 isResizeable=true minWidth=-1 minHeight=-1 defaultMinSize=220 token=WCT{android.window.IWindowContainerToken$Stub$Proxy@74d0e18} topActivityType=1 pictureInPictureParams=null shouldDockBigOverlays=false launchIntoPipHostTaskId=-1 lastParentTaskIdBeforePip=-1 displayCutoutSafeInsets=Rect(0, 151 - 0, 0) topActivityInfo=ActivityInfo{4aa8071 com.example.cronetcrash.MainActivity} launchCookies=[] positionInParent=Point(0, 0) parentTaskId=-1 isFocused=false isVisible=false isVisibleRequested=false isSleeping=false topActivityInSizeCompat=false topActivityEligibleForLetterboxEducation= false topActivityLetterboxed= false isFromDoubleTap= false topActivityLetterboxVerticalPosition= -1 topActivityLetterboxHorizontalPosition= -1 topActivityLetterboxWidth=-1 topActivityLetterboxHeight=-1 locusId=null displayAreaFeatureId=1 cameraCompatControlState=hidden}, remoteTransition = null, displayChange = null } 2024-06-20 12:50:10.807 1789-3771 Compatibil...geReporter system_server D Compat change id reported: 194833441; UID 10193; state: ENABLED 2024-06-20 12:50:10.807 1789-3771 ActivityTaskManager system_server I START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x30000000 cmp=com.example.cronetcrash/.MainActivity (has extras)} with LAUNCH_SINGLE_TOP from uid 2000 (BAL_ALLOW_PERMISSION) result code=0 2024-06-20 12:50:10.813 1789-1808 Compatibil...geReporter system_server D Compat change id reported: 135634846; UID 10193; state: DISABLED 2024-06-20 12:50:10.813 1789-3752 Compatibil...geReporter system_server D Compat change id reported: 168419799; UID 10193; state: DISABLED 2024-06-20 12:50:10.813 1789-3752 Compatibil...geReporter system_server D Compat change id reported: 273564678; UID 10193; state: DISABLED 2024-06-20 12:50:10.815 1789-1823 Compatibil...geReporter system_server D Compat change id reported: 143937733; UID 10193; state: ENABLED 2024-06-20 12:50:10.828 1789-3752 CoreBackPreview system_server D Window{bdeca8d u0 Splash Screen com.example.cronetcrash}: Setting back callback OnBackInvokedCallbackInfo{mCallback=android.window.IOnBackInvokedCallback$Stub$Proxy@f4ffc53, mPriority=0, mIsAnimationCallback=false} 2024-06-20 12:50:10.829 1789-1861 Compatibil...geReporter system_server D Compat change id reported: 265195908; UID 10193; state: ENABLED 2024-06-20 12:50:10.847 1719-1719 Zygote pid-1719 D Forked child process 22118 2024-06-20 12:50:10.847 1789-1823 ActivityManager system_server I Start proc 22118:com.example.cronetcrash/u0a193 for next-top-activity {com.example.cronetcrash/com.example.cronetcrash.MainActivity} 2024-06-20 12:50:10.861 22118-22118 ple.cronetcrash pid-22118 I Using CollectorTypeCC GC. 2024-06-20 12:50:10.864 22118-22118 ple.cronetcrash pid-22118 W Unexpected CPU variant for x86: x86_64. Known variants: atom, sandybridge, silvermont, goldmont, goldmont-plus, tremont, kabylake, default 2024-06-20 12:50:10.868 22118-22118 ple.cronetcrash pid-22118 E Not starting debugger since process cannot load the jdwp agent. 2024-06-20 12:50:10.883 22118-22118 Compatibil...geReporter pid-22118 D Compat change id reported: 171979766; UID 10193; state: ENABLED 2024-06-20 12:50:10.883 22118-22118 Compatibil...geReporter pid-22118 D Compat change id reported: 242716250; UID 10193; state: ENABLED 2024-06-20 12:50:10.886 1789-3771 Compatibil...geReporter system_server D Compat change id reported: 170503758; UID 10193; state: ENABLED 2024-06-20 12:50:10.888 22118-22118 ApplicationLoaders pid-22118 D Returning zygote-cached class loader: /system_ext/framework/androidx.window.extensions.jar 2024-06-20 12:50:10.888 22118-22118 ApplicationLoaders pid-22118 D Returning zygote-cached class loader: /system_ext/framework/androidx.window.sidecar.jar 2024-06-20 12:50:10.894 22118-22118 nativeloader pid-22118 D Configuring clns-6 for other apk /data/app/~~Wk4RNE3RvwRYv4K1Jt8Dsw==/com.example.cronetcrash-jc66EvNax78dJSak16OK8w==/base.apk. target_sdk_version=34, uses_libraries=, library_path=/data/app/~~Wk4RNE3RvwRYv4K1Jt8Dsw==/com.example.cronetcrash-jc66EvNax78dJSak16OK8w==/lib/x86_64:/data/app/~~Wk4RNE3RvwRYv4K1Jt8Dsw==/com.example.cronetcrash-jc66EvNax78dJSak16OK8w==/base.apk!/lib/x86_64, permitted_path=/data:/mnt/expand:/data/user/0/com.example.cronetcrash 2024-06-20 12:50:10.915 22118-22118 GraphicsEnvironment pid-22118 V Currently set values for: 2024-06-20 12:50:10.915 22118-22118 GraphicsEnvironment pid-22118 V angle_gl_driver_selection_pkgs=[] 2024-06-20 12:50:10.916 22118-22118 GraphicsEnvironment pid-22118 V angle_gl_driver_selection_values=[] 2024-06-20 12:50:10.916 22118-22118 GraphicsEnvironment pid-22118 V ANGLE GameManagerService for com.example.cronetcrash: false 2024-06-20 12:50:10.916 22118-22118 GraphicsEnvironment pid-22118 V com.example.cronetcrash is not listed in per-application setting 2024-06-20 12:50:10.916 22118-22118 GraphicsEnvironment pid-22118 V Neither updatable production driver nor prerelease driver is supported. 2024-06-20 12:50:10.919 1789-3752 ActivityManager system_server I Flag disabled. Ignoring finishAttachApplication from uid: 10193. pid: 22118 2024-06-20 12:50:10.921 2768-2768 GsaVoiceInteractionSrv com....android.googlequicksearchbox I Handling ACTION_STOP_HOTWORD 2024-06-20 12:50:10.927 2768-3367 HwDetectorWithState com....android.googlequicksearchbox E a: 3 2024-06-20 12:50:10.932 1789-3771 ActivityTaskManager system_server W takeTaskSnapshot: taskId=29 not found or not visible 2024-06-20 12:50:10.946 22118-22139 libEGL pid-22118 D loaded /vendor/lib64/egl/libEGL_emulation.so 2024-06-20 12:50:10.949 22118-22139 libEGL pid-22118 D loaded /vendor/lib64/egl/libGLESv1_CM_emulation.so 2024-06-20 12:50:10.946 22118-22118 ple.cronetcrash pid-22118 W type=1400 audit(0.0:409): avc: denied { read } for name="max_map_count" dev="proc" ino=600210 scontext=u:r:untrusted_app:s0:c193,c256,c512,c768 tcontext=u:object_r:proc_max_map_count:s0 tclass=file permissive=0 app=com.example.cronetcrash 2024-06-20 12:50:10.953 22118-22139 libEGL pid-22118 D loaded /vendor/lib64/egl/libGLESv2_emulation.so 2024-06-20 12:50:10.957 406-406 BpBinder surfaceflinger I onLastStrongRef automatically unlinking death recipients: 2024-06-20 12:50:11.045 1985-2119 OpenGLRenderer com.android.systemui E Unable to match the desired swap behavior. 2024-06-20 12:50:11.070 2265-2859 EGL_emulation com...le.android.apps.nexuslauncher D app_time_stats: avg=3849.12ms min=0.70ms max=42177.03ms count=11 2024-06-20 12:50:11.095 1985-2031 WindowManagerShell com.android.systemui V onTransitionReady android.os.BinderProxy@9263dfb: {id=85 t=OPEN f=0x0 trk=0 r=[0@Point(0, 0)] c=[{WCT{android.window.IWindowContainerToken$Stub$Proxy@4b5a11d} m=OPEN f=NONE leash=Surface(name=Task=29)/@0x847f906 sb=Rect(0, 0 - 1344, 2992) eb=Rect(0, 0 - 1344, 2992) d=0},{WCT{android.window.IWindowContainerToken$Stub$Proxy@1da9f92} m=TO_BACK f=SHOW_WALLPAPER leash=Surface(name=Task=1)/@0x5290bc7 sb=Rect(0, 0 - 1344, 2992) eb=Rect(0, 0 - 1344, 2992) d=0}]} 2024-06-20 12:50:11.095 1789-1805 WindowManager system_server V Sent Transition #85 createdAt=06-20 12:50:10.796 via request=TransitionRequestInfo { type = OPEN, triggerTask = TaskInfo{userId=0 taskId=29 displayId=0 isRunning=true baseIntent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x30000000 cmp=com.example.cronetcrash/.MainActivity } baseActivity=ComponentInfo{com.example.cronetcrash/com.example.cronetcrash.MainActivity} topActivity=ComponentInfo{com.example.cronetcrash/com.example.cronetcrash.MainActivity} origActivity=null realActivity=ComponentInfo{com.example.cronetcrash/com.example.cronetcrash.MainActivity} numActivities=1 lastActiveTime=1130910330 supportsMultiWindow=true resizeMode=1 isResizeable=true minWidth=-1 minHeight=-1 defaultMinSize=220 token=WCT{RemoteToken{9835566 Task{7c7da51 #29 type=standard I=com.example.cronetcrash/.MainActivity}}} topActivityType=1 pictureInPictureParams=null shouldDockBigOverlays=false launchIntoPipHostTaskId=-1 lastParentTaskIdBeforePip=-1 displayCutoutSafeInsets=Rect(0, 151 - 0, 0) topActivityInfo=ActivityInfo{3d4a0a7 com.example.cronetcrash.MainActivity} launchCookies=[] positionInParent=Point(0, 0) parentTaskId=-1 isFocused=false isVisible=false isVisibleRequested=false isSleeping=false topActivityInSizeCompat=false topActivityEligibleForLetterboxEducation= false topActivityLetterboxed= false isFromDoubleTap= false topActivityLetterboxVerticalPosition= -1 topActivityLetterboxHorizontalPosition= -1 topActivityLetterboxWidth=-1 topActivityLetterboxHeight=-1 locusId=null displayAreaFeatureId=1 cameraCompatControlState=hidden}, remoteTransition = null, displayChange = null } 2024-06-20 12:50:11.095 1789-1805 WindowManager system_server V startWCT=WindowContainerTransaction { changes = {} hops = [] errorCallbackToken=null taskFragmentOrganizer=null } 2024-06-20 12:50:11.095 1789-1805 WindowManager system_server V info={id=85 t=OPEN f=0x0 trk=0 r=[0@Point(0, 0)] c=[{WCT{RemoteToken{9835566 Task{7c7da51 #29 type=standard I=com.example.cronetcrash/.MainActivity}}} m=OPEN f=NONE leash=Surface(name=Task=29)/@0xc415aa8 sb=Rect(0, 0 - 1344, 2992) eb=Rect(0, 0 - 1344, 2992) d=0},{WCT{RemoteToken{8783630 Task{6349ac1 #1 type=home}}} m=TO_BACK f=SHOW_WALLPAPER leash=Surface(name=Task=1)/@0x62ac9ea sb=Rect(0, 0 - 1344, 2992) eb=Rect(0, 0 - 1344, 2992) d=0}]} 2024-06-20 12:50:11.095 1985-2031 WindowManagerShell com.android.systemui V Playing animation for (#85)android.os.BinderProxy@9263dfb@0 2024-06-20 12:50:11.095 1985-2031 WindowManagerShell com.android.systemui V try handler com.android.wm.shell.transition.DefaultMixedHandler@7a3e8b3 2024-06-20 12:50:11.095 1985-2031 WindowManagerShell com.android.systemui V try handler com.android.wm.shell.keyguard.KeyguardTransitionHandler@f22ce70 2024-06-20 12:50:11.095 1985-2031 WindowManagerShell com.android.systemui V try handler com.android.wm.shell.activityembedding.ActivityEmbeddingController@75835e9 2024-06-20 12:50:11.095 1985-2031 WindowManagerShell com.android.systemui V try handler com.android.wm.shell.recents.RecentsTransitionHandler@c32226e 2024-06-20 12:50:11.095 1985-2031 ShellRecents com.android.systemui V RecentsTransitionHandler.startAnimation: no controller found 2024-06-20 12:50:11.095 1985-2031 WindowManagerShell com.android.systemui V try handler com.android.wm.shell.pip.PipTransition@6ea5d0f 2024-06-20 12:50:11.095 1985-2031 WindowManagerShell com.android.systemui V try handler com.android.wm.shell.splitscreen.StageCoordinator@2be619c 2024-06-20 12:50:11.095 1985-2031 WindowManagerShell com.android.systemui V try handler com.android.wm.shell.transition.RemoteTransitionHandler@77547a5 2024-06-20 12:50:11.095 1985-2031 WindowManagerShell com.android.systemui V Transition doesn't have explicit remote, search filters for match for {id=85 t=OPEN f=0x0 trk=0 r=[0@Point(0, 0)] c=[{WCT{android.window.IWindowContainerToken$Stub$Proxy@4b5a11d} m=OPEN f=NONE leash=Surface(name=Task=29)/@0x847f906 sb=Rect(0, 0 - 1344, 2992) eb=Rect(0, 0 - 1344, 2992) d=0},{WCT{android.window.IWindowContainerToken$Stub$Proxy@1da9f92} m=TO_BACK f=SHOW_WALLPAPER leash=Surface(name=Task=1)/@0x5290bc7 sb=Rect(0, 0 - 1344, 2992) eb=Rect(0, 0 - 1344, 2992) d=0}]} 2024-06-20 12:50:11.095 1985-2031 WindowManagerShell com.android.systemui V Checking filter Pair{{types=[] flags=0x0] notFlags=0x0 checks=[{atype=dream independent=true modes=[OPEN,TO_FRONT] flags=NONE mustBeTask=false order=ANY topActivity=null},{atype=home independent=true modes=[CLOSE,TO_BACK] flags=NONE mustBeTask=false order=ANY topActivity=null}]} RemoteTransition { remoteTransition = android.window.IRemoteTransition$Stub$Proxy@a3c655e, appThread = android.app.IApplicationThread$Stub$Proxy@74dfd3f, debugName = LauncherToDream }} 2024-06-20 12:50:11.095 1985-2031 WindowManagerShell com.android.systemui V Checking filter Pair{{types=[] flags=0x0] notFlags=0x100 checks=[{atype=home independent=true modes=[OPEN,TO_FRONT] flags=NONE mustBeTask=false order=TOP topActivity=ComponentInfo{com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity}},{atype=standard independent=true modes=[CLOSE,TO_BACK] flags=NONE mustBeTask=false order=ANY topActivity=null}]} RemoteTransition { remoteTransition = android.window.IRemoteTransition$Stub$Proxy@d18360c, appThread = android.app.IApplicationThread$Stub$Proxy@d0edb55, debugName = QuickstepLaunchHome }} 2024-06-20 12:50:11.095 1985-2031 WindowManagerShell com.android.systemui V Delegate animation for #85 to null 2024-06-20 12:50:11.095 1985-2031 WindowManagerShell com.android.systemui V try handler com.android.wm.shell.transition.DefaultTransitionHandler@6881146 2024-06-20 12:50:11.095 1985-2031 WindowManagerShell com.android.systemui V start default transition animation, info = {id=85 t=OPEN f=0x0 trk=0 r=[0@Point(0, 0)] c=[{WCT{android.window.IWindowContainerToken$Stub$Proxy@4b5a11d} m=OPEN f=NONE leash=Surface(name=Task=29)/@0x847f906 sb=Rect(0, 0 - 1344, 2992) eb=Rect(0, 0 - 1344, 2992) d=0},{WCT{android.window.IWindowContainerToken$Stub$Proxy@1da9f92} m=TO_BACK f=SHOW_WALLPAPER leash=Surface(name=Task=1)/@0x5290bc7 sb=Rect(0, 0 - 1344, 2992) eb=Rect(0, 0 - 1344, 2992) d=0}]} 2024-06-20 12:50:11.096 1985-2031 WindowManagerShell com.android.systemui V loadAnimation: anim=android.view.animation.AnimationSet@8e95d60 animAttr=0x13 type=OPEN isEntrance=false 2024-06-20 12:50:11.097 1985-2031 WindowManagerShell com.android.systemui V loadAnimation: anim=android.view.animation.AnimationSet@376ef8c animAttr=0x12 type=OPEN isEntrance=true 2024-06-20 12:50:11.098 1985-2031 WindowManagerShell com.android.systemui V animated by com.android.wm.shell.transition.DefaultTransitionHandler@6881146 2024-06-20 12:50:11.170 22118-22141 ziparchive pid-22118 W Unable to open '/data/user_de/0/com.google.android.gms/app_chimera/m/00000011/DynamiteLoader.uncompressed.dm': No such file or directory 2024-06-20 12:50:11.170 22118-22141 ziparchive pid-22118 W Unable to open '/data/user_de/0/com.google.android.gms/app_chimera/m/00000011/DynamiteLoader.uncompressed.dm': No such file or directory 2024-06-20 12:50:11.172 22118-22141 DynamiteModule pid-22118 I Considering local module com.google.android.gms.cronet_dynamite:0 and remote module com.google.android.gms.cronet_dynamite:3111 2024-06-20 12:50:11.172 22118-22141 DynamiteModule pid-22118 I Selected remote version of com.google.android.gms.cronet_dynamite, version >= 3111 2024-06-20 12:50:11.172 22118-22141 DynamiteModule pid-22118 V Dynamite loader version >= 2, using loadModule2NoCrashUtils 2024-06-20 12:50:11.174 1789-3771 Compatibil...geReporter system_server D Compat change id reported: 161145287; UID 10193; state: ENABLED 2024-06-20 12:50:11.176 22118-22118 Compatibil...geReporter pid-22118 D Compat change id reported: 237531167; UID 10193; state: DISABLED 2024-06-20 12:50:11.177 22118-22118 OpenGLRenderer pid-22118 W Unknown dataspace 0 2024-06-20 12:50:11.179 22118-22141 System pid-22118 W ClassLoader referenced unknown path: 2024-06-20 12:50:11.180 22118-22141 nativeloader pid-22118 D Configuring clns-7 for other apk . target_sdk_version=34, uses_libraries=, library_path=/data/app/~~c4zL3Ti8pgChk_0HRX3yhg==/com.google.android.gms-EItnci8PPxRxqiTfexSmBg==/lib/x86_64:/data/app/~~c4zL3Ti8pgChk_0HRX3yhg==/com.google.android.gms-EItnci8PPxRxqiTfexSmBg==/base.apk!/lib/x86_64, permitted_path=/data:/mnt/expand:/data/user/0/com.google.android.gms 2024-06-20 12:50:11.190 22118-22141 ziparchive pid-22118 W Unable to open '/data/user_de/0/com.google.android.gms/app_chimera/m/00000010/CronetDynamite.uncompressed.dm': No such file or directory 2024-06-20 12:50:11.190 22118-22141 ziparchive pid-22118 W Unable to open '/data/user_de/0/com.google.android.gms/app_chimera/m/00000010/CronetDynamite.uncompressed.dm': No such file or directory 2024-06-20 12:50:11.199 1789-1817 CoreBackPreview system_server D Window{2616ff0 u0 com.example.cronetcrash/com.example.cronetcrash.MainActivity}: Setting back callback OnBackInvokedCallbackInfo{mCallback=android.window.IOnBackInvokedCallback$Stub$Proxy@503a09e, mPriority=0, mIsAnimationCallback=false} 2024-06-20 12:50:11.206 22118-22141 nativeloader pid-22118 D Configuring clns-8 for other apk . target_sdk_version=34, uses_libraries=ALL, library_path=/data/user_de/0/com.google.android.gms/app_chimera/m/00000010/CronetDynamite.uncompressed.apk!/lib/x86_64:/data/user_de/0/com.google.android.gms/app_chimera/m/00000010/CronetDynamite.uncompressed.apk!/lib/arm64-v8a, permitted_path=/data:/mnt/expand 2024-06-20 12:50:11.207 163-163 hwservicemanager hwservicemanager I getTransport: Cannot find entry android.hardware.graphics.mapper@4.0::IMapper/default in either framework or device VINTF manifest. 2024-06-20 12:50:11.212 22118-22136 OpenGLRenderer pid-22118 W Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without... 2024-06-20 12:50:11.214 22118-22142 Gralloc4 pid-22118 I mapper 4.x is not supported 2024-06-20 12:50:11.219 22118-22136 OpenGLRenderer pid-22118 W Failed to initialize 101010-2 format, error = EGL_SUCCESS 2024-06-20 12:50:11.231 22118-22141 cr_CronetLibraryLoader pid-22118 I Cronet version: 126.0.6423.0, arch: x86_64 2024-06-20 12:50:11.241 22118-22151 cr_CronetLibraryLoader pid-22118 I HTTP flags log line: Using live production flag values from Google 2024-06-20 12:50:11.248 1789-1817 ConnectivityService system_server D requestNetwork for uid/pid:10193/22118 activeRequest: null callbackRequest: 1426 [NetworkRequest [ REQUEST id=1427, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VCN_MANAGED Uid: 10193 RequestorUid: 10193 RequestorPkg: com.example.cronetcrash UnderlyingNetworks: Null] ]] callback flags: 0 order: 2147483647 2024-06-20 12:50:11.250 1789-1921 ConnectivityService system_server D NetReassign [1427 : null → 105] [c 0] [a 0] [i 1] 2024-06-20 12:50:11.250 1789-1914 WifiNetworkFactory system_server D got request NetworkRequest [ REQUEST id=1427, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VCN_MANAGED Uid: 10193 RequestorUid: 10193 RequestorPkg: com.example.cronetcrash UnderlyingNetworks: Null] ] 2024-06-20 12:50:11.250 1789-1914 UntrustedW...orkFactory system_server D got request NetworkRequest [ REQUEST id=1427, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VCN_MANAGED Uid: 10193 RequestorUid: 10193 RequestorPkg: com.example.cronetcrash UnderlyingNetworks: Null] ] 2024-06-20 12:50:11.250 1789-1914 OemPaidWif...orkFactory system_server D got request NetworkRequest [ REQUEST id=1427, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VCN_MANAGED Uid: 10193 RequestorUid: 10193 RequestorPkg: com.example.cronetcrash UnderlyingNetworks: Null] ] 2024-06-20 12:50:11.250 1789-1914 MultiInter...orkFactory system_server D got request NetworkRequest [ REQUEST id=1427, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VCN_MANAGED Uid: 10193 RequestorUid: 10193 RequestorPkg: com.example.cronetcrash UnderlyingNetworks: Null] ] ---------------------------- PROCESS STARTED (22118) for package com.example.cronetcrash ---------------------------- 2024-06-20 12:50:11.251 1789-1921 ConnectivityService system_server D NetReassign [no changes] [c 0] [a 1] [i 0] 2024-06-20 12:50:11.377 1985-2119 EGL_emulation com.android.systemui D app_time_stats: avg=3312.69ms min=3312.69ms max=3312.69ms count=1 2024-06-20 12:50:11.392 1985-2031 WindowManagerShell com.android.systemui V Transition animation finished (aborted=false), notifying core (#85)android.os.BinderProxy@9263dfb@0 2024-06-20 12:50:11.394 1789-1805 WindowManager system_server V Finish Transition #85: created at 06-20 12:50:10.796 collect-started=0.048ms request-sent=7.356ms started=30.539ms ready=81.965ms sent=297.307ms finished=596.644ms 2024-06-20 12:50:11.398 1985-2031 WindowManagerShell com.android.systemui V Track 0 became idle 2024-06-20 12:50:11.398 1985-2031 WindowManagerShell com.android.systemui V All active transition animations finished 2024-06-20 12:50:11.407 22118-22136 OpenGLRenderer com.example.cronetcrash E Unable to match the desired swap behavior. 2024-06-20 12:50:11.409 1985-2119 EGL_emulation com.android.systemui D app_time_stats: avg=3038.41ms min=0.46ms max=42446.84ms count=14 2024-06-20 12:50:11.531 22118-22142 emuglGLESv2_enc com.example.cronetcrash E device/generic/goldfish-opengl/system/GLESv2_enc/GL2Encoder.cpp:s_glGetUniformLocation:2206 GL error 0x502 2024-06-20 12:50:11.531 22118-22142 emuglGLESv2_enc com.example.cronetcrash E device/generic/goldfish-opengl/system/GLESv2_enc/GL2Encoder.cpp:s_glGetUniformLocation:2206 GL error 0x502 2024-06-20 12:50:11.532 22118-22142 emuglGLESv2_enc com.example.cronetcrash E device/generic/goldfish-opengl/system/GLESv2_enc/GL2Encoder.cpp:s_glGetUniformLocation:2206 GL error 0x502 2024-06-20 12:50:11.533 22118-22142 emuglGLESv2_enc com.example.cronetcrash E device/generic/goldfish-opengl/system/GLESv2_enc/GL2Encoder.cpp:s_glGetUniformLocation:2206 GL error 0x502 2024-06-20 12:50:11.533 22118-22142 emuglGLESv2_enc com.example.cronetcrash E device/generic/goldfish-opengl/system/GLESv2_enc/GL2Encoder.cpp:s_glGetUniformLocation:2206 GL error 0x502 2024-06-20 12:50:11.533 22118-22142 emuglGLESv2_enc com.example.cronetcrash E device/generic/goldfish-opengl/system/GLESv2_enc/GL2Encoder.cpp:s_glGetUniformLocation:2206 GL error 0x502 2024-06-20 12:50:11.632 1789-1817 ActivityTaskManager system_server W Request to remove task ignored for non-existent task 28 2024-06-20 12:50:11.634 1789-1805 ActivityTaskManager system_server I Displayed com.example.cronetcrash/.MainActivity for user 0: +835ms 2024-06-20 12:50:11.634 1789-1805 ActivityTaskManager system_server I Fully drawn com.example.cronetcrash/.MainActivity: +835ms 2024-06-20 12:50:11.637 2265-3045 OneSearchS...stProvider com...le.android.apps.nexuslauncher D Shut down the binder channel 2024-06-20 12:50:11.637 2265-2309 ImeTracker com...le.android.apps.nexuslauncher I com.google.android.apps.nexuslauncher:14b03ef5: onRequestHide at ORIGIN_CLIENT_HIDE_SOFT_INPUT reason HIDE_SOFT_INPUT 2024-06-20 12:50:11.638 2265-2465 IPCThreadState com...le.android.apps.nexuslauncher I oneway function results for code 2 on binder at 0x7040658c6e80 will be dropped but finished with status UNKNOWN_TRANSACTION 2024-06-20 12:50:11.643 1789-3771 ImeTracker system_server I com.google.android.apps.nexuslauncher:14b03ef5: onCancelled at PHASE_SERVER_SHOULD_HIDE 2024-06-20 12:50:11.644 1789-3752 Compatibil...geReporter system_server D Compat change id reported: 214016041; UID 10193; state: ENABLED 2024-06-20 12:50:11.644 1789-3752 ImeTracker system_server I com.example.cronetcrash:48b06ab3: onRequestHide at ORIGIN_SERVER_HIDE_INPUT reason HIDE_UNSPECIFIED_WINDOW 2024-06-20 12:50:11.644 1789-3752 ImeTracker system_server I com.example.cronetcrash:48b06ab3: onCancelled at PHASE_SERVER_SHOULD_HIDE 2024-06-20 12:50:11.648 2665-2665 GoogleInpu...hodService com...gle.android.inputmethod.latin I GoogleInputMethodService.onFinishInput():3227 2024-06-20 12:50:11.650 2665-2665 GoogleInpu...hodService com...gle.android.inputmethod.latin I GoogleInputMethodService.updateDeviceLockedStatus():2087 repeatCheckTimes = 0, unlocked = true 2024-06-20 12:50:11.650 2665-2665 GoogleInpu...hodService com...gle.android.inputmethod.latin I GoogleInputMethodService.onStartInput():1877 onStartInput(EditorInfo{inputType=0x0(NULL) imeOptions=0x0 privateImeOptions=null actionName=UNSPECIFIED actionLabel=null actionId=0 initialSelStart=-1 initialSelEnd=-1 initialCapsMode=0x0 hintText=null label=null packageName=com.example.cronetcrash fieldId=0 fieldName=null extras=null}, false) 2024-06-20 12:50:11.650 2665-2665 GoogleInpu...hodService com...gle.android.inputmethod.latin I GoogleInputMethodService.shouldHideHeaderOnInitialState():4008 ShouldHideHeaderOnInitialState = false 2024-06-20 12:50:11.650 2665-2665 GoogleInpu...hodService com...gle.android.inputmethod.latin I GoogleInputMethodService.updateDeviceLockedStatus():2087 repeatCheckTimes = 2, unlocked = true 2024-06-20 12:50:12.013 1985-2069 WindowOnBackDispatcher com.android.systemui W sendCancelIfRunning: isInProgress=falsecallback=android.view.ViewRootImpl$$ExternalSyntheticLambda17@4e78a65 2024-06-20 12:50:12.013 1789-3771 CoreBackPreview system_server D Window{bdeca8d u0 Splash Screen com.example.cronetcrash EXITING}: Setting back callback null 2024-06-20 12:50:12.014 1789-1817 InputManager-JNI system_server W Input channel object 'bdeca8d Splash Screen com.example.cronetcrash (client)' was disposed without first being removed with the input manager! 2024-06-20 12:50:13.916 17290-21963 NearbyMediums com.google.android.gms.persistent I No BLE Fast/GATT advertisements found in the latest cycle. 2024-06-20 12:50:14.809 1789-2843 TaskPersister system_server E File error accessing recents directory (directory doesn't exist?). ```

After the app has frozen on startup, I can't attach the debugger in Android Studio to it (there is nothing shown to attach to). The pause button in the VS Code debugger does nothing.

Here is the logcat that is shown when killing the app from the VS Code debugger after the app is frozen:

logcat output ```console 2024-06-20 12:53:18.051 1985-1985 StatusBarIconController com.android.systemui D ignoring old pipeline callbacks, because the new mobile icons are enabled 2024-06-20 12:53:21.007 1789-3449 ActivityManager system_server I Force stopping com.example.cronetcrash appid=10193 user=0: from pid 22176 2024-06-20 12:53:21.010 1789-3449 ActivityManager system_server I Killing 22118:com.example.cronetcrash/u0a193 (adj 0): stop com.example.cronetcrash due to from pid 22176 2024-06-20 12:53:21.011 1789-1806 DisplayManagerService system_server D Drop pending events for gone uid 10193 2024-06-20 12:53:21.012 1789-3449 ActivityTaskManager system_server W Force removing ActivityRecord{6422378 u0 com.example.cronetcrash/.MainActivity t29 f}}: app died, no saved state 2024-06-20 12:53:21.015 1985-2031 WindowManagerShell com.android.systemui V Transition requested: android.os.BinderProxy@7fe950e TransitionRequestInfo { type = CLOSE, triggerTask = TaskInfo{userId=0 taskId=29 displayId=0 isRunning=false baseIntent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x30000000 cmp=com.example.cronetcrash/.MainActivity } baseActivity=null topActivity=null origActivity=null realActivity=ComponentInfo{com.example.cronetcrash/com.example.cronetcrash.MainActivity} numActivities=0 lastActiveTime=1130910404 supportsMultiWindow=true resizeMode=1 isResizeable=true minWidth=-1 minHeight=-1 defaultMinSize=220 token=WCT{android.window.IWindowContainerToken$Stub$Proxy@fa3eb2f} topActivityType=1 pictureInPictureParams=null shouldDockBigOverlays=false launchIntoPipHostTaskId=-1 lastParentTaskIdBeforePip=-1 displayCutoutSafeInsets=Rect(0, 151 - 0, 0) topActivityInfo=null launchCookies=[] positionInParent=Point(0, 0) parentTaskId=-1 isFocused=true isVisible=true isVisibleRequested=true isSleeping=false topActivityInSizeCompat=false topActivityEligibleForLetterboxEducation= false topActivityLetterboxed= false isFromDoubleTap= false topActivityLetterboxVerticalPosition= -1 topActivityLetterboxHorizontalPosition= -1 topActivityLetterboxWidth=-1 topActivityLetterboxHeight=-1 locusId=null displayAreaFeatureId=1 cameraCompatControlState=hidden}, remoteTransition = null, displayChange = null } 2024-06-20 12:53:21.034 1789-3449 AppsFilter system_server I interaction: PackageSetting{fa8e23e app.clicksocial/10192} -> PackageSetting{cbc603c com.example.cronetcrash/10193} BLOCKED 2024-06-20 12:53:21.037 1789-3752 ProcessStats system_server W Tracking association SourceState{4485d11 com.google.android.apps.nexuslauncher/10162 BTop #268300} whose proc state 2 is better than process ProcessState{db2c9c4 com.google.android.googlequicksearchbox:search/10132 pkg=com.google.android.googlequicksearchbox} proc state 6 (19 skipped) 2024-06-20 12:53:21.044 2144-2144 CarrierSvcBindHelper com.android.phone D onHandleForceStop: [com.example.cronetcrash] 2024-06-20 12:53:21.045 2144-2144 CarrierSvcBindHelper com.android.phone D No carrier app for: 0 2024-06-20 12:53:21.073 406-406 BpBinder surfaceflinger I onLastStrongRef automatically unlinking death recipients: 2024-06-20 12:53:21.084 9019-9102 OpenGLRenderer com....android.googlequicksearchbox E Unable to match the desired swap behavior. 2024-06-20 12:53:21.084 2265-2859 OpenGLRenderer com...le.android.apps.nexuslauncher E Unable to match the desired swap behavior. 2024-06-20 12:53:21.088 1789-3110 ActivityManager system_server I Force stopping com.example.cronetcrash appid=10193 user=0: from pid 22181 2024-06-20 12:53:21.088 1789-3110 WindowManager system_server I Force removing ActivityRecord{6422378 u0 com.example.cronetcrash/.MainActivity t29 f} isExiting} 2024-06-20 12:53:21.088 1789-3110 WindowManager system_server W removeAppToken: Attempted to remove non-existing token: Token{42d2b6 ActivityRecord{6422378 u0 com.example.cronetcrash/.MainActivity t29 f} isExiting}} 2024-06-20 12:53:21.089 1789-3110 AppsFilter system_server I interaction: PackageSetting{fa8e23e app.clicksocial/10192} -> PackageSetting{cbc603c com.example.cronetcrash/10193} BLOCKED 2024-06-20 12:53:21.092 2144-2144 CarrierSvcBindHelper com.android.phone D onHandleForceStop: [com.example.cronetcrash] 2024-06-20 12:53:21.092 2144-2144 CarrierSvcBindHelper com.android.phone D No carrier app for: 0 2024-06-20 12:53:21.161 1789-1817 ActivityManager system_server V Got obituary of 22118:com.example.cronetcrash 2024-06-20 12:53:21.161 1789-2251 ImeTracker system_server I com.example.cronetcrash:cb461e89: onRequestHide at ORIGIN_SERVER_HIDE_INPUT reason HIDE_REMOVE_CLIENT 2024-06-20 12:53:21.161 1789-2251 ImeTracker system_server I com.example.cronetcrash:cb461e89: onCancelled at PHASE_SERVER_SHOULD_HIDE 2024-06-20 12:53:21.162 1789-2101 WindowManager system_server I WIN DEATH: Window{2616ff0 u0 com.example.cronetcrash/com.example.cronetcrash.MainActivity} 2024-06-20 12:53:21.162 1789-2101 InputManager-JNI system_server W Input channel object '2616ff0 com.example.cronetcrash/com.example.cronetcrash.MainActivity (client)' was disposed without first being removed with the input manager! 2024-06-20 12:53:21.163 1789-1921 ConnectivityService system_server D releasing NetworkRequest [ REQUEST id=1427, [ Capabilities: INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VCN_MANAGED Uid: 10193 RequestorUid: 10193 RequestorPkg: com.example.cronetcrash UnderlyingNetworks: Null] ] (release request) 2024-06-20 12:53:21.165 1719-1719 Zygote pid-1719 I Process 22118 exited due to signal 9 (Killed) 2024-06-20 12:53:21.214 2265-2310 QuickstepModelDelegate com...le.android.apps.nexuslauncher D notifyAppTargetEvent action=1 launchLocation=workspace/0/[-1,-1]/[1,1] 2024-06-20 12:53:21.215 1789-2789 AppSearchIcing system_server W icing-search-engine.cc:283: Error: 5, Message: Document (com.google.android.googlequicksearchbox$OneSearchZeroStateGoogleSuggestions/default, zp) not found. 2024-06-20 12:53:21.216 2265-3045 OneSearchS...stProvider com...le.android.apps.nexuslauncher E Failed to fetch suggestions from AppSearch, fallback to AGA java.util.concurrent.CompletionException: java.util.NoSuchElementException: No value present at java.util.concurrent.CompletableFuture.encodeThrowable(CompletableFuture.java:308) at java.util.concurrent.CompletableFuture.completeThrowable(CompletableFuture.java:323) at java.util.concurrent.CompletableFuture$UniAccept.tryFire(CompletableFuture.java:684) at java.util.concurrent.CompletableFuture.postComplete(CompletableFuture.java:486) at java.util.concurrent.CompletableFuture.completeExceptionally(CompletableFuture.java:2138) at com.google.android.apps.nexuslauncher.allapps.H0.onResult(Unknown Source:59) at android.app.appsearch.SearchSessionUtil$1.lambda$onResult$0(SearchSessionUtil.java:129) at android.app.appsearch.SearchSessionUtil$1.$r8$lambda$_nlk9WiPjSfaAsqKYmp0aPvSRC0(SearchSessionUtil.java:1) at android.app.appsearch.SearchSessionUtil$1$$ExternalSyntheticLambda0.run(R8$$SyntheticClass:13) at android.os.Handler.handleCallback(Handler.java:958) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:205) at android.os.Looper.loop(Looper.java:294) at android.os.HandlerThread.run(HandlerThread.java:67) Caused by: java.util.NoSuchElementException: No value present at java.util.Optional.get(Optional.java:144) at com.google.android.apps.nexuslauncher.allapps.H0.onResult(Unknown Source:16) at android.app.appsearch.SearchSessionUtil$1.lambda$onResult$0(SearchSessionUtil.java:129)  at android.app.appsearch.SearchSessionUtil$1.$r8$lambda$_nlk9WiPjSfaAsqKYmp0aPvSRC0(SearchSessionUtil.java:1)  at android.app.appsearch.SearchSessionUtil$1$$ExternalSyntheticLambda0.run(R8$$SyntheticClass:13)  at android.os.Handler.handleCallback(Handler.java:958)  at android.os.Handler.dispatchMessage(Handler.java:99)  at android.os.Looper.loopOnce(Looper.java:205)  at android.os.Looper.loop(Looper.java:294)  at android.os.HandlerThread.run(HandlerThread.java:67)  2024-06-20 12:53:21.217 2265-3045 OneSearchS...stProvider com...le.android.apps.nexuslauncher D Created the binder channel successfully for end point service =com.google.android.apps.search.googleapp.search.suggest.plugins.onesearch.server.OneSearchSuggestService , mChannel=z1{delegate=s1{logId=63, target=directaddress:///AndroidComponentAddress%5BIntent%20%7B%20act=grpc.io.action.BIND%20cmp=com.google.android.googlequicksearchbox/com.google.android.apps.search.googleapp.search.suggest.plugins.onesearch.server.OneSearchSuggestService%20%7D%5D}} , mOneSearchConnection=X1.T@78885a7 2024-06-20 12:53:21.228 2768-2768 GsaVoiceInteractionSrv com....android.googlequicksearchbox I Handling ACTION_START_HOTWORD 2024-06-20 12:53:21.229 2768-3366 GsaVoiceInteractionSrv com....android.googlequicksearchbox I disregardVoiceMatch: false 2024-06-20 12:53:21.230 2768-3366 GsaVoiceInteractionSrv com....android.googlequicksearchbox I Cannot start hotword, hotword has been explicitly disabled. 2024-06-20 12:53:21.237 2767-3011 AiAiEcho com.google.android.as I Predicting[0]: 2024-06-20 12:53:21.237 2767-3011 AiAiEcho com.google.android.as I EchoTargets: Filtered by AiAi flag check: 2024-06-20 12:53:21.237 2767-3011 AiAiEcho com.google.android.as I Ranked targets strategy: SORT, count: 0, ranking metadata: 2024-06-20 12:53:21.238 2767-3011 AiAiEcho com.google.android.as I #postPredictionTargets: Sending updates to UISurface home with targets# 0 (types=[]) 2024-06-20 12:53:21.355 9019-9019 A com....android.googlequicksearchbox I Created gRPC endpoint to "search" for service class com.google.android.apps.search.googleapp.search.suggest.plugins.onesearch.server.OneSearchSuggestService 2024-06-20 12:53:21.361 1985-2119 EGL_emulation com.android.systemui D app_time_stats: avg=17268.06ms min=1.57ms max=189500.80ms count=11 2024-06-20 12:53:21.366 1789-1805 WindowManager system_server V Sent Transition #86 createdAt=06-20 12:53:21.012 via request=TransitionRequestInfo { type = CLOSE, triggerTask = TaskInfo{userId=0 taskId=29 displayId=0 isRunning=false baseIntent=Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x30000000 cmp=com.example.cronetcrash/.MainActivity } baseActivity=null topActivity=null origActivity=null realActivity=ComponentInfo{com.example.cronetcrash/com.example.cronetcrash.MainActivity} numActivities=0 lastActiveTime=1130910404 supportsMultiWindow=true resizeMode=1 isResizeable=true minWidth=-1 minHeight=-1 defaultMinSize=220 token=WCT{RemoteToken{9835566 Task{7c7da51 #29 type=standard I=com.example.cronetcrash/.MainActivity}}} topActivityType=1 pictureInPictureParams=null shouldDockBigOverlays=false launchIntoPipHostTaskId=-1 lastParentTaskIdBeforePip=-1 displayCutoutSafeInsets=Rect(0, 151 - 0, 0) topActivityInfo=null launchCookies=[] positionInParent=Point(0, 0) parentTaskId=-1 isFocused=true isVisible=true isVisibleRequested=true isSleeping=false topActivityInSizeCompat=false topActivityEligibleForLetterboxEducation= false topActivityLetterboxed= false isFromDoubleTap= false topActivityLetterboxVerticalPosition= -1 topActivityLetterboxHorizontalPosition= -1 topActivityLetterboxWidth=-1 topActivityLetterboxHeight=-1 locusId=null displayAreaFeatureId=1 cameraCompatControlState=hidden}, remoteTransition = null, displayChange = null } 2024-06-20 12:53:21.366 1789-1805 WindowManager system_server V startWCT=WindowContainerTransaction { changes = {} hops = [] errorCallbackToken=null taskFragmentOrganizer=null } 2024-06-20 12:53:21.366 1789-1805 WindowManager system_server V info={id=86 t=CLOSE f=0x0 trk=0 r=[0@Point(0, 0)] c=[{WCT{RemoteToken{9835566 Task{7c7da51 #29 type=standard I=com.example.cronetcrash/.MainActivity}}} m=CLOSE f=NONE leash=Surface(name=Task=29)/@0xc415aa8 sb=Rect(0, 0 - 1344, 2992) eb=Rect(0, 0 - 1344, 2992) d=0},{WCT{RemoteToken{8783630 Task{6349ac1 #1 type=home}}} m=TO_FRONT f=SHOW_WALLPAPER leash=Surface(name=Task=1)/@0x62ac9ea sb=Rect(0, 0 - 1344, 2992) eb=Rect(0, 0 - 1344, 2992) d=0},{null m=TO_FRONT f=IS_WALLPAPER leash=Surface(name=WallpaperWindowToken{31d9d12 token=android.os.Binder@458249d})/@0x4b3f28c sb=Rect(0, 0 - 1344, 2992) eb=Rect(0, 0 - 1344, 2992) d=0}]} 2024-06-20 12:53:21.369 1985-2031 WindowManagerShell com.android.systemui V onTransitionReady android.os.BinderProxy@7fe950e: {id=86 t=CLOSE f=0x0 trk=0 r=[0@Point(0, 0)] c=[{WCT{android.window.IWindowContainerToken$Stub$Proxy@6dfd641} m=CLOSE f=NONE leash=Surface(name=Task=29)/@0xb4fd2c5 sb=Rect(0, 0 - 1344, 2992) eb=Rect(0, 0 - 1344, 2992) d=0},{WCT{android.window.IWindowContainerToken$Stub$Proxy@7dc37e6} m=TO_FRONT f=SHOW_WALLPAPER leash=Surface(name=Task=1)/@0xc92f41a sb=Rect(0, 0 - 1344, 2992) eb=Rect(0, 0 - 1344, 2992) d=0},{null m=TO_FRONT f=IS_WALLPAPER leash=Surface(name=WallpaperWindowToken{31d9d12 token=android.os.Binder@458249d})/@0x70e0b4b sb=Rect(0, 0 - 1344, 2992) eb=Rect(0, 0 - 1344, 2992) d=0}]} 2024-06-20 12:53:21.369 1985-2031 WindowManagerShell com.android.systemui V Playing animation for (#86)android.os.BinderProxy@7fe950e@0 2024-06-20 12:53:21.369 1985-2031 WindowManagerShell com.android.systemui V try handler com.android.wm.shell.transition.DefaultMixedHandler@7a3e8b3 2024-06-20 12:53:21.369 1985-2031 WindowManagerShell com.android.systemui V try handler com.android.wm.shell.keyguard.KeyguardTransitionHandler@f22ce70 2024-06-20 12:53:21.369 1985-2031 WindowManagerShell com.android.systemui V try handler com.android.wm.shell.activityembedding.ActivityEmbeddingController@75835e9 2024-06-20 12:53:21.369 1985-2031 WindowManagerShell com.android.systemui V try handler com.android.wm.shell.recents.RecentsTransitionHandler@c32226e 2024-06-20 12:53:21.369 1985-2031 ShellRecents com.android.systemui V RecentsTransitionHandler.startAnimation: no controller found 2024-06-20 12:53:21.369 1985-2031 WindowManagerShell com.android.systemui V try handler com.android.wm.shell.pip.PipTransition@6ea5d0f 2024-06-20 12:53:21.369 1985-2031 WindowManagerShell com.android.systemui V try handler com.android.wm.shell.splitscreen.StageCoordinator@2be619c 2024-06-20 12:53:21.369 1985-2031 WindowManagerShell com.android.systemui V try handler com.android.wm.shell.transition.RemoteTransitionHandler@77547a5 2024-06-20 12:53:21.369 1985-2031 WindowManagerShell com.android.systemui V Transition doesn't have explicit remote, search filters for match for {id=86 t=CLOSE f=0x0 trk=0 r=[0@Point(0, 0)] c=[{WCT{android.window.IWindowContainerToken$Stub$Proxy@6dfd641} m=CLOSE f=NONE leash=Surface(name=Task=29)/@0xb4fd2c5 sb=Rect(0, 0 - 1344, 2992) eb=Rect(0, 0 - 1344, 2992) d=0},{WCT{android.window.IWindowContainerToken$Stub$Proxy@7dc37e6} m=TO_FRONT f=SHOW_WALLPAPER leash=Surface(name=Task=1)/@0xc92f41a sb=Rect(0, 0 - 1344, 2992) eb=Rect(0, 0 - 1344, 2992) d=0},{null m=TO_FRONT f=IS_WALLPAPER leash=Surface(name=WallpaperWindowToken{31d9d12 token=android.os.Binder@458249d})/@0x70e0b4b sb=Rect(0, 0 - 1344, 2992) eb=Rect(0, 0 - 1344, 2992) d=0}]} 2024-06-20 12:53:21.369 1985-2031 WindowManagerShell com.android.systemui V Checking filter Pair{{types=[] flags=0x0] notFlags=0x0 checks=[{atype=dream independent=true modes=[OPEN,TO_FRONT] flags=NONE mustBeTask=false order=ANY topActivity=null},{atype=home independent=true modes=[CLOSE,TO_BACK] flags=NONE mustBeTask=false order=ANY topActivity=null}]} RemoteTransition { remoteTransition = android.window.IRemoteTransition$Stub$Proxy@a3c655e, appThread = android.app.IApplicationThread$Stub$Proxy@74dfd3f, debugName = LauncherToDream }} 2024-06-20 12:53:21.369 1985-2031 WindowManagerShell com.android.systemui V Checking filter Pair{{types=[] flags=0x0] notFlags=0x100 checks=[{atype=home independent=true modes=[OPEN,TO_FRONT] flags=NONE mustBeTask=false order=TOP topActivity=ComponentInfo{com.google.android.apps.nexuslauncher/com.google.android.apps.nexuslauncher.NexusLauncherActivity}},{atype=standard independent=true modes=[CLOSE,TO_BACK] flags=NONE mustBeTask=false order=ANY topActivity=null}]} RemoteTransition { remoteTransition = android.window.IRemoteTransition$Stub$Proxy@d18360c, appThread = android.app.IApplicationThread$Stub$Proxy@d0edb55, debugName = QuickstepLaunchHome }} 2024-06-20 12:53:21.369 1985-2031 WindowManagerShell com.android.systemui V Delegate animation for #86 to null 2024-06-20 12:53:21.369 1985-2031 WindowManagerShell com.android.systemui V try handler com.android.wm.shell.transition.DefaultTransitionHandler@6881146 2024-06-20 12:53:21.369 1985-2031 WindowManagerShell com.android.systemui V start default transition animation, info = {id=86 t=CLOSE f=0x0 trk=0 r=[0@Point(0, 0)] c=[{WCT{android.window.IWindowContainerToken$Stub$Proxy@6dfd641} m=CLOSE f=NONE leash=Surface(name=Task=29)/@0xb4fd2c5 sb=Rect(0, 0 - 1344, 2992) eb=Rect(0, 0 - 1344, 2992) d=0},{WCT{android.window.IWindowContainerToken$Stub$Proxy@7dc37e6} m=TO_FRONT f=SHOW_WALLPAPER leash=Surface(name=Task=1)/@0xc92f41a sb=Rect(0, 0 - 1344, 2992) eb=Rect(0, 0 - 1344, 2992) d=0},{null m=TO_FRONT f=IS_WALLPAPER leash=Surface(name=WallpaperWindowToken{31d9d12 token=android.os.Binder@458249d})/@0x70e0b4b sb=Rect(0, 0 - 1344, 2992) eb=Rect(0, 0 - 1344, 2992) d=0}]} 2024-06-20 12:53:21.370 1985-2031 WindowManagerShell com.android.systemui V loadAnimation: anim=android.view.animation.AnimationSet@25b5fd4 animAttr=0x10 type=CLOSE isEntrance=true 2024-06-20 12:53:21.370 1985-2031 WindowManagerShell com.android.systemui V loadAnimation: anim=android.view.animation.AnimationSet@68298c3 animAttr=0x11 type=CLOSE isEntrance=false 2024-06-20 12:53:21.371 1985-2031 WindowManagerShell com.android.systemui V animated by com.android.wm.shell.transition.DefaultTransitionHandler@6881146 2024-06-20 12:53:21.376 1789-1976 ImeTracker system_server I com.google.android.apps.nexuslauncher:b0b0a9d7: onRequestHide at ORIGIN_SERVER_HIDE_INPUT reason HIDE_UNSPECIFIED_WINDOW 2024-06-20 12:53:21.376 1789-1976 ImeTracker system_server I com.google.android.apps.nexuslauncher:b0b0a9d7: onCancelled at PHASE_SERVER_SHOULD_HIDE 2024-06-20 12:53:21.377 2665-2665 GoogleInpu...hodService com...gle.android.inputmethod.latin I GoogleInputMethodService.onFinishInput():3227 2024-06-20 12:53:21.378 1789-1809 WindowManager system_server W Failed to deliver inset control state change to w=Window{2616ff0 u0 com.example.cronetcrash/com.example.cronetcrash.MainActivity EXITING} android.os.DeadObjectException at android.os.BinderProxy.transactNative(Native Method) at android.os.BinderProxy.transact(BinderProxy.java:584) at android.view.IWindow$Stub$Proxy.insetsControlChanged(IWindow.java:479) at com.android.server.wm.WindowState.notifyInsetsControlChanged(WindowState.java:3802) at com.android.server.wm.InsetsStateController.lambda$notifyPendingInsetsControlChanged$3(InsetsStateController.java:343) at com.android.server.wm.InsetsStateController.$r8$lambda$8yykPRG1GyNq_J17QvL9d5xANMc(InsetsStateController.java:0) at com.android.server.wm.InsetsStateController$$ExternalSyntheticLambda2.run(R8$$SyntheticClass:0) at com.android.server.wm.WindowAnimator.executeAfterPrepareSurfacesRunnables(WindowAnimator.java:294) at com.android.server.wm.RootWindowContainer.performSurfacePlacementNoTrace(RootWindowContainer.java:811) at com.android.server.wm.RootWindowContainer.performSurfacePlacement(RootWindowContainer.java:756) at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacementLoop(WindowSurfacePlacer.java:177) at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacement(WindowSurfacePlacer.java:126) at com.android.server.wm.WindowSurfacePlacer.performSurfacePlacement(WindowSurfacePlacer.java:115) at com.android.server.wm.WindowSurfacePlacer$Traverser.run(WindowSurfacePlacer.java:57) at android.os.Handler.handleCallback(Handler.java:958) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loopOnce(Looper.java:205) at android.os.Looper.loop(Looper.java:294) at android.os.HandlerThread.run(HandlerThread.java:67) at com.android.server.ServiceThread.run(ServiceThread.java:46) 2024-06-20 12:53:21.378 2665-2665 GoogleInpu...hodService com...gle.android.inputmethod.latin I GoogleInputMethodService.updateDeviceLockedStatus():2087 repeatCheckTimes = 0, unlocked = true 2024-06-20 12:53:21.378 2665-2665 GoogleInpu...hodService com...gle.android.inputmethod.latin I GoogleInputMethodService.onStartInput():1877 onStartInput(EditorInfo{inputType=0x0(NULL) imeOptions=0x0 privateImeOptions=null actionName=UNSPECIFIED actionLabel=null actionId=0 initialSelStart=-1 initialSelEnd=-1 initialCapsMode=0x0 hintText=null label=null packageName=com.google.android.apps.nexuslauncher fieldId=0 fieldName=null extras=null}, false) 2024-06-20 12:53:21.378 2665-2665 GoogleInpu...hodService com...gle.android.inputmethod.latin I GoogleInputMethodService.shouldHideHeaderOnInitialState():4008 ShouldHideHeaderOnInitialState = false 2024-06-20 12:53:21.379 2665-2665 GoogleInpu...hodService com...gle.android.inputmethod.latin I GoogleInputMethodService.updateDeviceLockedStatus():2087 repeatCheckTimes = 2, unlocked = true 2024-06-20 12:53:21.391 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D query= size=45 2024-06-20 12:53:21.392 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=revenuecat rest call dart,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=revenuecat rest call dart searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: 4cf0382e-a320-4691-9647-f60720ef5d2e 2024-06-20 12:53:21.392 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=revenuecat rest call,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=revenuecat rest call searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: b2276d8f-0588-4b52-81fb-883536cc5326 2024-06-20 12:53:21.392 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=upper muley twist,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=upper muley twist searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: 1e28d636-cda3-4fd2-aee7-b85fff960cad 2024-06-20 12:53:21.392 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=dart import http,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=dart import http searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: e8dc2548-a7a4-46d0-a6e2-7b5842e30ed5 2024-06-20 12:53:21.392 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=dart http request add bearer header,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=dart http request add bearer header searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: 7bae4c75-41ef-4cb6-9c33-edba27b3cbcb 2024-06-20 12:53:21.392 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=revenuecat docs webhooks,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=revenuecat docs webhooks searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: 2ea7c1ad-29eb-4313-bc09-788922cfce52 2024-06-20 12:53:21.392 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=papago park,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=papago park searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: 77db512f-e7c4-4960-a7db-1a854ad71b3a 2024-06-20 12:53:21.392 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=cohab canyon trail,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=cohab canyon trail searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: e250fc10-ba86-4cf6-80b3-15b7fd2e094e 2024-06-20 12:53:21.392 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=meetinghouse locator lds,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=meetinghouse locator lds searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: 0b5a9129-6552-4c5d-b358-41b70d7f5ece 2024-06-20 12:53:21.393 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=how to find out the gmail address that a google voice number is registered to,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=how to find out the gmail address that a google voice number is registered to searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: 2b2f0a23-6845-4d2b-bb57-ea0c655e9bcd 2024-06-20 12:53:21.393 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=pigeonparser.h,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=pigeonparser.h searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: 877c7d17-1791-4652-916d-0d33cc42e74f 2024-06-20 12:53:21.393 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=git post-commit hook increment flutter build number,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=git post-commit hook increment flutter build number searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: 2441e491-370c-4a0b-bafe-dd27694249ca 2024-06-20 12:53:21.393 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=git pre-commit hook increment flutter build number,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=git pre-commit hook increment flutter build number searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: 638befef-fa5e-4170-8fc6-db52194ce4d2 2024-06-20 12:53:21.393 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=pointer is missing a nullability type specifier (_nonnull, _nullable, or _null_unspecified) pigeonparser.h:13,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=pointer is missing a nullability type specifier (_nonnull, _nullable, or _null_unspecified) pigeonparser.h:13 searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: 6042dfe8-a379-456c-bb06-2913550f1ff1 2024-06-20 12:53:21.393 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=df dance studio calendar,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=df dance studio calendar searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: 90e99bce-19ef-4b2c-91df-dc14005d2e12 2024-06-20 12:53:21.393 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=rotate video 90 degrees ffmpeg,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=rotate video 90 degrees ffmpeg searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: 5aa19c65-53f0-4e68-b34e-62c74798d5f4 2024-06-20 12:53:21.393 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=sed replace in files,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=sed replace in files searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: 712cf502-3930-41b7-87f0-11edcdb3a34f 2024-06-20 12:53:21.393 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=dart_pre_commit,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=dart_pre_commit searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: 5fefe7cf-d1dc-47e5-b665-e7a9ba41a68f 2024-06-20 12:53:21.393 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=git hook increment flutter build number,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=git hook increment flutter build number searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: 793d6e64-e5e3-49c4-836f-2669da9405fc 2024-06-20 12:53:21.393 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=github hook update flutter build number,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=github hook update flutter build number searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: 28d4397d-7cec-427b-a065-92c9feb4a2a7 2024-06-20 12:53:21.393 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=gradle import gradleexception,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=gradle import gradleexception searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: 98c638f1-4faf-4ee5-8902-a67c047d76d2 2024-06-20 12:53:21.393 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=java url to path,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=java url to path searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: fcb4402c-8056-4e17-8a47-2d74df0b39fb 2024-06-20 12:53:21.394 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=cinemark century sandy union heights 16,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=cinemark century sandy union heights 16 searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: c7168b8c-f11a-475f-a638-c8a25ea8cecb 2024-06-20 12:53:21.394 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=nxrm web interface,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=nxrm web interface searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: 2d3c2727-bcff-4b0e-8996-d8c5e201be37 2024-06-20 12:53:21.394 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=cheyenne kimball,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=cheyenne kimball searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: 4f80630c-17fb-4b73-bed3-6dfb3ca6aa70 2024-06-20 12:53:21.394 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=truepeoplesearch,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=truepeoplesearch searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: f31e41e7-f8b6-415a-9d09-b3f6cf7a605a 2024-06-20 12:53:21.394 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=escape from germany showtimes,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=escape from germany showtimes searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: 286e09da-8a69-4b43-be3e-3854f0a32bd3 2024-06-20 12:53:21.394 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=there was a problem with the app store., code: 2, readable_error_code: store_problem, underlyingerrormessage: an unknown error occurred, readableerrorcode: store_problem}, null),group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=there was a problem with the app store., code: 2, readable_error_code: store_problem, underlyingerrormessage: an unknown error occurred, readableerrorcode: store_problem}, null) searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: 581ba7fc-2aef-4f70-b922-90b1937cf671 2024-06-20 12:53:21.394 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=flutter increase build number every time check in,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=flutter increase build number every time check in searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: b2447b44-5752-41ee-b525-3a0326b6cf22 2024-06-20 12:53:21.394 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=36,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=true,suggest_raw_text=flutter ios could not find included file 'generated.xcconfig' in search paths,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=true,} searchAction=flutter ios could not find included file 'generated.xcconfig' in search paths searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/?p=delete_recent_history&hl=en,suggestion_action_text=Delete,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=1,}ParentID: null targetID: bc39ded6-4ba7-46fb-bfbc-362801201268 2024-06-20 12:53:21.394 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=33,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=false,suggest_raw_text=nyu freshman sues roommate,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=false,} searchAction=nyu freshman sues roommate searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/answer/106230?hl=106230,suggestion_action_text=Report this,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=2,}ParentID: null targetID: 15dd0f72-36fa-42bd-9ab8-b5fb3175a7a0 2024-06-20 12:53:21.394 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=33,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=false,suggest_raw_text=titan submersible disaster,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=false,} searchAction=titan submersible disaster searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/answer/106230?hl=106230,suggestion_action_text=Report this,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=2,}ParentID: null targetID: fa53e94c-05f9-4707-b2ca-8f461113e685 2024-06-20 12:53:21.394 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=33,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=false,suggest_raw_text=hawk tuah girl video,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=false,} searchAction=hawk tuah girl video searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/answer/106230?hl=106230,suggestion_action_text=Report this,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=2,}ParentID: null targetID: f1930c0c-748f-4c0a-8650-1cec8c9510f9 2024-06-20 12:53:21.394 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=33,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=false,suggest_raw_text=friends doughnuts krispy kreme,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=false,} searchAction=friends doughnuts krispy kreme searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/answer/106230?hl=106230,suggestion_action_text=Report this,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=2,}ParentID: null targetID: db3a805f-5c10-4ff8-8f0f-b540b8afba32 2024-06-20 12:53:21.394 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=33,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=false,suggest_raw_text=nicotine pouches,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=false,} searchAction=nicotine pouches searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/answer/106230?hl=106230,suggestion_action_text=Report this,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=2,}ParentID: null targetID: 21839a7a-7f3f-463e-8406-35cb0015da7a 2024-06-20 12:53:21.394 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=33,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=false,suggest_raw_text=donkey with elk herd,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=false,} searchAction=donkey with elk herd searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/answer/106230?hl=106230,suggestion_action_text=Report this,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=2,}ParentID: null targetID: b683c5b7-8dfc-440b-a012-97993cbdf682 2024-06-20 12:53:21.394 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=33,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=false,suggest_raw_text=russian submarine cuba,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=false,} searchAction=russian submarine cuba searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/answer/106230?hl=106230,suggestion_action_text=Report this,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=2,}ParentID: null targetID: 2b71c931-b4a8-4261-8260-8bafb5a382c2 2024-06-20 12:53:21.395 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=33,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=false,suggest_raw_text=thailand marriage,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=false,} searchAction=thailand marriage searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/answer/106230?hl=106230,suggestion_action_text=Report this,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=2,}ParentID: null targetID: 390ce9da-6517-426e-8dba-d26c01ac2088 2024-06-20 12:53:21.395 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=33,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=false,suggest_raw_text=peloton instructors leaving,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=false,} searchAction=peloton instructors leaving searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/answer/106230?hl=106230,suggestion_action_text=Report this,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=2,}ParentID: null targetID: db68eb99-11ad-4576-97e1-b7765673442a 2024-06-20 12:53:21.395 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=33,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=false,suggest_raw_text=rothman philadelphia eagles,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=false,} searchAction=rothman philadelphia eagles searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/answer/106230?hl=106230,suggestion_action_text=Report this,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=2,}ParentID: null targetID: 7d14e1d4-2be5-4677-b481-a7a953153440 2024-06-20 12:53:21.395 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=33,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=false,suggest_raw_text=greek islands missing tourists,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=false,} searchAction=greek islands missing tourists searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/answer/106230?hl=106230,suggestion_action_text=Report this,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=2,}ParentID: null targetID: f45b1b14-ca41-453c-aa39-cfc688ff65ac 2024-06-20 12:53:21.395 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=33,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=false,suggest_raw_text=dji drones banned,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=false,} searchAction=dji drones banned searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/answer/106230?hl=106230,suggestion_action_text=Report this,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=2,}ParentID: null targetID: d837e89c-69ec-4a5d-a940-968d99c564f9 2024-06-20 12:53:21.395 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=33,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=false,suggest_raw_text=kp 3 covid variant symptoms,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=false,} searchAction=kp 3 covid variant symptoms searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/answer/106230?hl=106230,suggestion_action_text=Report this,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=2,}ParentID: null targetID: 1ab4ffe4-dd3c-44fe-aba5-3c612961f694 2024-06-20 12:53:21.395 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=33,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=false,suggest_raw_text=heat waves weather,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=false,} searchAction=heat waves weather searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/answer/106230?hl=106230,suggestion_action_text=Report this,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=2,}ParentID: null targetID: e022c92f-f882-4119-9d75-a7b9b82b11ec 2024-06-20 12:53:21.395 2265-2265 SearchTargetUtil com...le.android.apps.nexuslauncher D layoutType=short_icon_row resultType=131072 packageName=com.google.android.googlequicksearchbox extras=Bundle{suggestion_type=33,suggest_truncate_start=false,is_answer=false,is_entity=false,is_personal=false,suggest_raw_text=iconic hollywood fast food restaurants,group_id=web1053879750,response_id=1f8320f0-2d4d-4a45-ab29-f642f63054a4,support_query_builder=false,} searchAction=iconic hollywood fast food restaurants searchActionExtras=Bundle{learn_more_url=https://support.google.com/websearch/answer/106230?hl=106230,suggestion_action_text=Report this,should_start_for_result=true,allow_pinning=true,skip_logging_in_target_handler=false,suggestion_action_rpc=2,}ParentID: null targetID: c4afd5db-5fa4-4ec7-8277-670f1f39ff5a ---------------------------- PROCESS ENDED (22118) for package com.example.cronetcrash ---------------------------- 2024-06-20 12:53:21.608 1985-2031 WindowManagerShell com.android.systemui V Transition animation finished (aborted=false), notifying core (#86)android.os.BinderProxy@7fe950e@0 2024-06-20 12:53:21.608 1789-1805 WindowManager system_server V Finish Transition #86: created at 06-20 12:53:21.012 collect-started=0.174ms request-sent=0.438ms started=12.37ms ready=12.353ms sent=352.777ms finished=595.728ms 2024-06-20 12:53:21.609 1789-1976 WindowManager system_server W Exception thrown during dispatchAppVisibility Window{2616ff0 u0 com.example.cronetcrash/com.example.cronetcrash.MainActivity EXITING} android.os.DeadObjectException at android.os.BinderProxy.transactNative(Native Method) at android.os.BinderProxy.transact(BinderProxy.java:584) at android.view.IWindow$Stub$Proxy.dispatchAppVisibility(IWindow.java:546) at com.android.server.wm.WindowState.sendAppVisibilityToClients(WindowState.java:3271) at com.android.server.wm.WindowContainer.sendAppVisibilityToClients(WindowContainer.java:1221) at com.android.server.wm.WindowToken.setClientVisible(WindowToken.java:409) at com.android.server.wm.ActivityRecord.setClientVisible(ActivityRecord.java:6946) at com.android.server.wm.ActivityRecord.postApplyAnimation(ActivityRecord.java:5637) at com.android.server.wm.ActivityRecord.commitVisibility(ActivityRecord.java:5580) at com.android.server.wm.Transition.finishTransition(Transition.java:1151) at com.android.server.wm.TransitionController.finishTransition(TransitionController.java:868) at com.android.server.wm.WindowOrganizerController.finishTransition(WindowOrganizerController.java:396) at android.window.IWindowOrganizerController$Stub.onTransact(IWindowOrganizerController.java:286) at com.android.server.wm.WindowOrganizerController.onTransact(WindowOrganizerController.java:181) at android.os.Binder.execTransactInternal(Binder.java:1339) at android.os.Binder.execTransact(Binder.java:1275) 2024-06-20 12:53:21.609 1789-1976 Process system_server I Sending signal. PID: 22118 SIG: 9 2024-06-20 12:53:21.610 1789-1808 ActivityManager system_server W setHasOverlayUi called on unknown pid: 22118 2024-06-20 12:53:21.612 1985-2031 WindowManagerShell com.android.systemui V Track 0 became idle 2024-06-20 12:53:21.612 1985-2031 WindowManagerShell com.android.systemui V All active transition animations finished 2024-06-20 12:53:21.664 1985-2119 EGL_emulation com.android.systemui D app_time_stats: avg=13605.04ms min=13605.04ms max=13605.04ms count=1 2024-06-20 12:53:21.674 406-406 BpTransact...edListener surfaceflinger E Failed to transact (-32) 2024-06-20 12:53:21.674 406-406 BpTransact...edListener surfaceflinger E Failed to transact (-32) 2024-06-20 12:53:21.791 1789-1798 system_server system_server I NativeAlloc concurrent copying GC freed 332139(14MB) AllocSpace objects, 23(552KB) LOS objects, 41% free, 34MB/58MB, paused 182us,45us total 122.472ms 2024-06-20 12:53:21.808 1789-1800 System system_server W A resource failed to call HardwareBuffer.close. 2024-06-20 12:53:21.811 1789-1800 System system_server W A resource failed to call release. 2024-06-20 12:53:21.811 1789-1800 System system_server W A resource failed to call HardwareBuffer.close. 2024-06-20 12:53:21.811 1789-1800 System system_server W A resource failed to call HardwareBuffer.close. 2024-06-20 12:53:21.812 1789-1800 System system_server W A resource failed to call release. 2024-06-20 12:53:21.812 1789-1800 System system_server W A resource failed to call release. 2024-06-20 12:53:22.812 430-430 adbd adbd W timeout expired while flushing socket, closing 2024-06-20 12:53:23.937 17290-21963 NearbyMediums com.google.android.gms.persistent I No BLE Fast/GATT advertisements found in the latest cycle. ```

Here is the output of flutter doctor -v:

`flutter doctor -v` ``` $ flutter doctor -v [✓] Flutter (Channel beta, 3.23.0-0.1.pre, on Fedora Linux 40 (Workstation Edition) 6.8.10-300.fc40.x86_64, locale en_US.utf8) • Flutter version 3.23.0-0.1.pre on channel beta at /opt/flutter • Upstream repository https://github.com/flutter/flutter.git • Framework revision 2feea7a407 (2 weeks ago), 2024-06-06 10:19:10 +0700 • Engine revision bb10c54666 • Dart version 3.5.0 (build 3.5.0-180.3.beta) • DevTools version 2.36.0 [✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0) • Android SDK at /home/luke/Android/Sdk • Platform android-34, build-tools 34.0.0 • Java binary at: /opt/android-studio/jbr/bin/java • Java version OpenJDK Runtime Environment (build 17.0.10+0-17.0.10b1087.21-11572160) • All Android licenses accepted. [✓] Chrome - develop for the web • Chrome at google-chrome [✓] Linux toolchain - develop for Linux desktop • clang version 18.1.6 (Fedora 18.1.6-3.fc40) • cmake version 3.28.2 • ninja version 1.11.1 • pkg-config version 2.1.0 [✓] Android Studio (version 2023.3) • Android Studio at /opt/android-studio • Flutter plugin version 79.0.2 • Dart plugin can be installed from: 🔨 https://plugins.jetbrains.com/plugin/6351-dart • Java version OpenJDK Runtime Environment (build 17.0.10+0-17.0.10b1087.21-11572160) [✓] VS Code (version 1.90.1) • VS Code at /usr/share/code • Flutter extension version 3.91.20240529 [✓] VS Code (version 1.90.0-insider) • VS Code at /usr/share/code-insiders • Flutter extension version 3.89.20240501 [✓] Connected device (3 available) • sdk gphone64 x86 64 (mobile) • emulator-5554 • android-x64 • Android 14 (API 34) (emulator) • Linux (desktop) • linux • linux-x64 • Fedora Linux 40 (Workstation Edition) 6.8.10-300.fc40.x86_64 • Chrome (web) • chrome • web-javascript • Google Chrome 125.0.6422.112 [✓] Network resources • All expected network resources are available. • No issues found! ```
lukehutch commented 3 months ago

Just a thought -- could the race condition be caused by the fact that I am not await-ing the result of run or runWithClient? Perhaps something is immediately exiting and tearing down JNI rather than waiting for the result of a function call?

Future<void> main() async {
  // Set up Cronet http client on Android or Cupertino http client on iOS
  if (Platform.isAndroid) {
    final engine =
        CronetEngine.build(cacheMode: CacheMode.memory, cacheMaxSize: 1000000);
    await runWithClient(run, () => CronetClient.fromCronetEngine(engine));
  } else if (Platform.isIOS || Platform.isMacOS) {
    final config = URLSessionConfiguration.ephemeralSessionConfiguration()
      ..cache = URLCache.withCapacity(memoryCapacity: 1000000);
    await runWithClient(run, () => CupertinoClient.fromSessionConfiguration(config));
  } else {
    // Run with the default IOClient
    await run();
  }
}

Future<void> run() async {
  await runApp(const MyApp());
}
lukehutch commented 3 months ago

I can confirm that adding async and await as shown above does prevent the lock-up on start -- as does adding WidgetsFlutterBinding.ensureInitialized(); at the top of main(). So there is some race condition thing happening here.

Also, the crash happens only on the emulator (API 34, Pixel 8 Pro), not on my physical Pixel 7 Pro.

I don't know whether fixing this lockup will also fix the crash that I was getting with my full app when uploading release builds to Google Play, or when running the app in profile mode locally, but I'll keep trying to reproduce that.

HosseinYousefi commented 3 months ago

as does adding WidgetsFlutterBinding.ensureInitialized();

I'm not an http expert but based on the docs I don't think that you can call this before runWithClient:

/// When used in the context of Flutter, [runWithClient] should be called before
/// [`WidgetsFlutterBinding.ensureInitialized`](https://api.flutter.dev/flutter/widgets/WidgetsFlutterBinding/ensureInitialized.html)
/// because Flutter runs in whatever [Zone] was current at the time that the
/// bindings were initialized.
brianquinlan commented 3 months ago

I don't know what the root cause is but getting Flutter applications to work with runWithZone is difficult. We have updated documentation that will go out with the next package:http release.

HosseinYousefi commented 3 months ago

Eureka! Maybe...

I think I have found the problem with this whole thing: WidgetsFlutterBinding.ensureInitialized() should not be called as stated in the docs. But if this is not initialized, then the context needed by JNI (that is filled by the plugin) is null.

I suggest not using runWithClient, instead inject the http dependency in another way.

fyi @lukehutch, @brianquinlan, @natebosch

lukehutch commented 3 months ago

I'm not an http expert but based on the docs I don't think that you can call this before runWithClient:

Correct, I forgot I had seen this in the docs. In my full app, I run ensureInitialized within the code called by runWithZone. (I just tried adding it at the top of main in the minimal repro case to see what would happen.)

So that is probably the source of the segfault I was seeing on Google Play, if it means that the JNI context would not be initialized before cronet calls are made.

I will try the example from the docs pointed to by @brianquinlan . However if I have learned anything from tinkering with this, almost any change can resolve the crash -- there is some raciness here.

HosseinYousefi commented 3 months ago

there is some raciness here.

This is due to the use of zones. I had not go into the source of package:http itself, so it turned out to be beneficial to open this issue in this repo.

One way to fix this problem while still using runWithClient is by moving ALL the client creation logic (including creation of the CronetEngine which required context) to a function to make sure it is run AFTER the initialization and not before in main:

if (Platform.isAndroid) {
  await runWithClient(
    run,
    () {
      final engine = 
        CronetEngine.build(cacheMode: CacheMode.memory, cacheMaxSize: 1000000);
      return CronetClient.fromCronetEngine(engine);
    },
  );
}
lukehutch commented 3 months ago

The cronet and cupertino clients should specifically point to this example code as the correct way to replace the default http client.

The http client has an error in its docs -- it encourages initializing cronet or cupertino before Flutter is initialized:

https://pub.dev/packages/http

I don't remember where I got the runWithClient pattern from, but it's in some docs somewhere, and they are wrong, since Flutter can't be used with runWithClient in this way...

lukehutch commented 3 months ago

One way to fix this problem while still using runWithClient is by moving ALL the client creation logic (including creation of the CronetEngine which required context) to a function to make sure it is run AFTER the initialization and not before in main:

How does this ensure initialization has already happened? I think the main point here is that you moved the engine creation inside runWithClient? How does that ensure that JNI is initialized? Does runWithClient do the initialization?

Should I still be wary of doing things this way, for the reasons @brianquinlan suggested, that

getting Flutter applications to work with runWithZone is difficult

lukehutch commented 3 months ago

I started to port my code to use provider, but most of the most important HTTP operations use classes that do not accept an HTTP client override at time of request, such as CachedNetworkImageProvider.

You can provide a CacheManager that creates an HTTP client, but there is no BuildContext available when the HTTP file service is called.

So basically I really do need to get this working properly with runWithZone (and I suspect that a lot of other Flutter apps will too...). Any other ideas about how to do this?

HosseinYousefi commented 3 months ago

How does this ensure initialization has already happened? Are you simply adding await? If so, then that correlates with my other observation, that await-ing everything actually fixes the problem. But how does that ensure that JNI is initialized?

The method that you pass to runWithClient will be made available as a zone variable with key #_clientToken.

Client() returns zoneClient if it's not null and this is the implementation of zoneClient:

@internal
Client? get zoneClient {
  final client = Zone.current[#_clientToken];
  return client == null ? null : (client as Client Function())();
}

This means that the first time Client is constructed, it will call the build method you passed to runWithClient.

Assuming all of your http requests happen after runApp, the first time Client is constructed is after context is set by Flutter.

Should I still be wary of doing things this way, for the reasons @brianquinlan suggested

The reason I provided you with a fix for runWithClient is because that's the quickest way for you to change your application and get it working. And for you to know the reason behind why it failed to begin with.

lukehutch commented 3 months ago

The reason I provided you with a fix for runWithClient is because that's the quickest way for you to change your application and get it working. And for you to know the reason behind why it failed to begin with.

Thanks. But what is the consequence of using runWithClient with Flutter?

It used to be that Flutter would arbitrarily run things in the root zone, which would use the default HTTP client, not the configured client: https://github.com/dart-lang/http/issues/828 However, it looks like that was fixed. Are there still remaining issues?

HosseinYousefi commented 3 months ago

Thanks. But what is the consequence of using runWithClient with Flutter?

I don't know enough about how Flutter deals with zones or http to give you a definitive answer, but based on what I see I don't think there should be any problems with this approach as long as you use widgets that use http inside your widget tree.

By definition, the widget tree will be created AFTER runApp. Say the first time Client gets created is inside some CachedImage widget, then zoneClient will be called and at that point the context is indeed available.

It actually does not matter in which zone the callback is called, as long as we had never called WidgetsFlutterBinding.ensureInitialized() or runApp when we've created the zone. Any zone created by Flutter will be a fork of our zone, therefore it will inherit all of the properties including #_clientToken.


An open question is what about any changes to this context? Should the cronet engine get rebuilt after the context changes as well? What about background http tasks? Do we have access to the same context in the background as well?

If so, then the cronet engine has to listen to context changes instead of using Jni.getCachedApplicationContext() and rebuild itself accordingly. To help with this package:jni (or really package:flutter_jni as this is flutter specific) can expose some API like addContextListener.

lukehutch commented 3 months ago

Just for the record, there is one other confirmation of the JNI crash here: https://github.com/Baseflow/flutter_cached_network_image/issues/649#issuecomment-2195782869 -- so it's not just my app running on my system. But they saw this only once in their app.

HosseinYousefi commented 3 months ago

Just for the record, there is one other confirmation of the JNI crash here: Baseflow/flutter_cached_network_image#649 (comment) -- so it's not just my app running on my system. But they saw this only once in their app.

I see, I asked to know more about the way they do it. I'm personally not happy with a blanket "oh this sometimes doesn't work, so let's not use it", I want to know why it doesn't.

It might very well be an issue with the fact that cronet does not "update" the context for example.

lukehutch commented 3 months ago

I see, I asked to know more about the way they do it. I'm personally not happy with a blanket "oh this sometimes doesn't work, so let's not use it", I want to know why it doesn't.

Right, exactly -- I have updated my code to not use runWithClient, but I still want to know why the crash was happening in the first place. Ecosystem stability always matters.

escamoteur commented 3 months ago

ok, I could just reproduce this, it has nothing to do with runWithClient if you use an Android without play services cronnet seems not be available. Easiest fix to prevent this crash:

const _maxCacheSize = 2 * 1024 * 1024;

Client httpClientFactory() {
  try {
    if (Platform.isAndroid) {
      final engine = CronetEngine.build(
        cacheMode: CacheMode.memory,
        cacheMaxSize: _maxCacheSize,
        enableHttp2: true,
      );
      return CronetClient.fromCronetEngine(engine);
    }

    /// 'You must provide the Content-Length' HTTP header issue
    if (Platform.isIOS || Platform.isMacOS) {
      final config = URLSessionConfiguration.ephemeralSessionConfiguration()
        ..cache = URLCache.withCapacity(memoryCapacity: _maxCacheSize);
      return CupertinoClient.fromSessionConfiguration(config);
    }
  } catch (_) {
    return IOClient(HttpClient());
  }
  var httpClient = HttpClient();
  // To use with Fiddler uncomment the following lines and set the
  // ip address of the machine where Fiddler is running
  // httpClient.findProxy = (uri) => 'PROXY 192.168.1.61:8866';
  // httpClient.badCertificateCallback =
  //     (X509Certificate cert, String host, int port) => true;
  return IOClient(httpClient);
}
escamoteur commented 3 months ago

@brianquinlan propbably this precaution should be added to the example and the HTTP docs

lukehutch commented 3 months ago

@escamoteur The crash I was seeing was on Google Experience / Google Play Services devices (Pixel Pro 7 physical device, and Pixel Pro 8 emulator). But thanks for pointing out the need for try...catch.

escamoteur commented 3 months ago

@lukehutch actually your crash on top here seems to be a different one than the JNI one as its from the NDK

escamoteur commented 3 months ago

I got this here in that case:

java.lang.RuntimeException: All available Cronet providers are disabled. A provider should be enabled before it can be used.
    at org.chromium.net.CronetEngine$Builder.getEnabledCronetProviders(CronetEngine.java:8)
    at org.chromium.net.CronetEngine$Builder.createBuilderDelegate(CronetEngine.java:3)
    at org.chromium.net.CronetEngine$Builder.<init>(CronetEngine.java:1)
  File "accessors.dart", line 119, in JniAccessorWrappers.throwException
  File "accessors.dart", line 11, in _check
  File "accessors.dart", line 16, in JniResultMethods.check
  File "accessors.dart", line 54, in JniResultMethods.objectPointer
  File "accessors.dart", line 59, in JniResultMethods.reference
  File "jni_bindings.dart", line 2317, in new CronetEngine_Builder
  File "cronet_client.dart", line 97, in CronetEngine.build
  File "http_client_factory.dart", line 12, in httpClientFactory
  File "zone.dart", line 1399, in _rootRun
  File "zone.dart", line 1656, in _RootZone.run
  File "zone.dart", line 1616, in _RootZone.bindCallback.<fn>
  File "client.dart", line 166, in zoneClient
  File "client.dart", line 42, in new Client
  File "di.dart", line 86, in _registerBaseScope
  File "di.dart", line 78, in setupDi
  File "app.dart", line 76, in _AppWidget.build.<fn>.<fn>.<fn>.<fn>
  File "interaction_manager_impl.dart", line 357, in InteractionConnectorState.initState
  File "framework.dart", line 5618, in StatefulElement._firstBuild
escamoteur commented 3 months ago

@lukehutch how do you link the NDK stack trace to the JNI call? does it also happen when you don't use runWithClient but provide the Client via Provider or GetIt?

This is what we do to setup the cacheManager

  const cacheKey = 'watchcrunch_cache';
  di.registerSingleton(Client());
  final appState = di<AppState>();
  di.registerSingleton<CacheManager>(
    WcImageCacheManager(
      Config(
        cacheKey,
        fileService: WcHttpFileService(
          httpClient: di<Client>(),
        ),
        stalePeriod: appState.imageDiscStalePeriod,
        maxNrOfCacheObjects: appState.imageDiscCacheSize,
      ),
    ),

and we do the runWithClient directly in our main and we don't await it. Not problem so far with our App that we released yesterday with the new Clients. only the one without Play Services

lukehutch commented 3 months ago

@lukehutch how do you link the NDK stack trace to the JNI call?

The top line of the stacktrace is in libdartjni.so...

does it also happen when you don't use runWithClient but provide the Client via Provider or GetIt?

So far, no. I am not using runWithClient anymore though just to be safe, I just explicitly use the Client instance every time I need to make an HTTPS request.

It sounds like @HosseinYousefi has a good understanding of what was causing the crash. The solution might just be better documentation, but I would hope there is a way to more robustly protect against JNI being uninitialized when it's needed. The open questions in https://github.com/dart-lang/http/issues/1241#issuecomment-2195765525 will hopefully be answered before this is closed.

escamoteur commented 3 months ago

hmm, what I don't understand is why it works without any problems for us. btw we use newer versions of HTTP and the clients

cronet_http: ^1.3.1 cupertino_http: ^1.5.0

dependency_overrides: http: ^1.2.0

brianquinlan commented 3 months ago

If Cronet is not available then you should get a clear java.lang.RuntimeException: All available Cronet providers are disabled. A provider should be enabled before it can be used. exception.

The package:cronet_http documentation explains how to get the package to work if the phone does not include Google Play Services.

lukehutch commented 3 months ago

The package:cronet_http documentation explains how to get the package to work if the phone does not include Google Play Services.

Thanks for the tip, Brian. However, is there no way to do this without using a commandline switch? Shouldn't it be possible to depend upon org.chromium.net:cronet-embedded directly? And/or maybe a package cronet_http_embedded could be created that only depends on the embedded version?

Are there any downsides to using the embedded version? If not, what benefit is obtained by requiring Play Services for the non-embedded version?

escamoteur commented 3 months ago

The downside is that cronnet is bundled with the apk in that case which increases your app's size. It doesn't seem possible to download it automatically when it isn't bundled or play services are not available.

@brianquinlan it probably would be helpful if the exception would mention the dependency on Google Play Services and/or the docs on the configuration of the http package would contain a sentence mentioning it (the table about which platform supports which clients just states Android) Also the given example code should contain a try catch to handle the situation that no cronnet is available. Am 29. Juni 2024, 04:42 +0100 schrieb Luke Hutchison @.***>:

The package:cronet_http documentation explains how to get the package to work if the phone does not include Google Play Services. Thanks for the tip, Brian. However, is there no way to do this without using a commandline switch? Shouldn't it be possible to depend upon org.chromium.net:cronet-embedded directly? And/or maybe a package cronet_http_embedded could be created that only depends on the embedded version? Are there any downsides to using the embedded version? If not, what benefit is obtained by requiring Play Services for the non-embedded version? — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were mentioned.Message ID: @.***>

HosseinYousefi commented 3 months ago

This should not be any different than using cronet on Android without Flutter. How do they solve this?

This beginner codelab seems to have the answer: https://developer.android.com/codelabs/cronet#4

They use CronetProviderInstaller.installProvider. What if we expose this API and add similar documentation? Then if the play services are not available, the users can install it automatically.

escamoteur commented 3 months ago

@HosseinYousefi if that is possible with flutter it should be the way to go. Ideally the package should take care of this on his own.

lukehutch commented 3 months ago

Why can't pre-built libraries be shipped with the Flutter package, like with every other NDK library? Is there a good reason the package has to be fetched from Google Play?

HosseinYousefi commented 3 months ago

@HosseinYousefi if that is possible with flutter it should be the way to go. Ideally the package should take care of this on his own.

I don't see why it shouldn't be possible. Feel free to make a PR

Why can't pre-built libraries be shipped with the Flutter package, like with every other NDK library? Is there a good reason the package has to be fetched from Google Play?

You can ship it. However there are some benefits that you gain if you use play services. From https://developer.android.com/codelabs/cronet#3:

The Cronet team recommends using the Google Play Services provider. By using the Google Play Services provider, your application doesn't need to pay the binary size cost of carrying Cronet (about 5 megabytes) and the platform ensures that latest updates and security fixes are delivered.

Simply follow the instructions here: https://github.com/dart-lang/http/tree/master/pkgs/cronet_http#use-embedded-cronet

escamoteur commented 3 months ago

Yeah, 5MB is quite a lot. Not sure how much is saved if you select to exclude the default HttpClient implementation. Downloading on demand would be the best. Unfortunately I m no Android native dev, so someine else would have to make that PR Am 30. Juni 2024, 11:53 +0100 schrieb Hossein Yousefi @.***>:

@HosseinYousefi if that is possible with flutter it should be the way to go. Ideally the package should take care of this on his own. I don't see why it shouldn't be possible. Feel free to make a PR Why can't pre-built libraries be shipped with the Flutter package, like with every other NDK library? Is there a good reason the package has to be fetched from Google Play? You can ship it. However there are some benefits that you gain if you use play services. From https://developer.android.com/codelabs/cronet#3: The Cronet team recommends using the Google Play Services provider. By using the Google Play Services provider, your application doesn't need to pay the binary size cost of carrying Cronet (about 5 megabytes) and the platform ensures that latest updates and security fixes are delivered. Simply follow the instructions here: https://github.com/dart-lang/http/tree/master/pkgs/cronet_http#use-embedded-cronet — Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were mentioned.Message ID: @.***>

HosseinYousefi commented 3 months ago

Unfortunately I m no Android native dev, so someine else would have to make that PR

Yeah, I didn't mean you specifically –

However we're making it really easy to develop these things using JNIgen. Anyone implementing this wouldn't have to write any Java or Kotlin code. Everything can be done using the generated Dart bindings.

lukehutch commented 3 months ago

You can ship it. However there are some benefits that you gain if you use play services

Could we get a cronet_http_embedded package on pub.dev though, please, for developers who just want to ship it with their app? For Play experience devices, the total download size is the same. I'm not worried about adding another 5MB when tons of apps today have download sizes over 100MB.

brianquinlan commented 3 months ago

This should not be any different than using cronet on Android without Flutter. How do they solve this?

This beginner codelab seems to have the answer: https://developer.android.com/codelabs/cronet#4

They use CronetProviderInstaller.installProvider. What if we expose this API and add similar documentation? Then if the play services are not available, the users can install it automatically.

I think that this will only work if the device has Play Services installed. The last line says:

This launches a Play Services Task which installs the provider asynchronously.

brianquinlan commented 3 months ago

You can ship it. However there are some benefits that you gain if you use play services

Could we get a cronet_http_embedded package on pub.dev though, please, for developers who just want to ship it with their app? For Play experience devices, the total download size is the same. I'm not worried about adding another 5MB when tons of apps today have download sizes over 100MB.

Maintaining another package was a significant amount of work, which is why we switched to using a configuration flag.

Could you explain why the configuration flag doesn't work for you?

lukehutch commented 3 months ago

Could you explain why the configuration flag doesn't work for you?

I couldn't understand how to use this. Is this a runtime flag, or a compiletime flag? The examples are for flutter run and flutter test, not flutter build, so it's not clear. If it's a runtime flag, how do you get a deployed app to run with the equivalent of that flag at launch? If it's a compiletime flag, I haven't been able to figure out how to add flags to my build...

It's all good though, I changed my code to just fall back to IOClient if initializing Cronet throws an exception... so it should work on all devices, at least.

The things I would still love to see are:

  1. try...catch added to the examples in the documentation, with a fallback to IOClient on exception.
  2. Some resolution to the questions in https://github.com/dart-lang/http/issues/1241#issuecomment-2195765525
  3. Ideally, a check in Cronet to see if JNI has been initialized before trying to make JNI calls (so that your app doesn't inexplicably crash).

I had another weird lockup issue on startup ( https://github.com/flutter/flutter/issues/147967 ), and I think it was also due to the JNI initialization issue, because as far as I can tell (it was sporadic), it went away when I stopped using runWithClient. I could never figure out what was going on because no debugger would attach. I just now realized it's the same issue as the freezing issue that I ran into with my minimal reproduction testcase for this issue. It would be nice to completely avoid this kind of problem by having some more robust behavior in Cronet or JNI to prevent these sorts of issues.

brianquinlan commented 3 months ago

Could you explain why the configuration flag doesn't work for you?

I couldn't understand how to use this. Is this a runtime flag, or a compiletime flag? The examples are for flutter run and flutter test, not flutter build, so it's not clear. If it's a runtime flag, how do you get a deployed app to run with the equivalent of that flag at launch? If it's a compiletime flag, I haven't been able to figure out how to add flags to my build...

It's a compile time flag. You can use that same flag with the flutter build subcommands.

HosseinYousefi commented 3 months ago

I think that this will only work if the device has Play Services installed.

From https://developer.android.com/codelabs/cronet#3:

You can integrate Cronet as a standalone library carried with your application, or use Cronet as provided by the platform. The Cronet team recommends using the Google Play Services provider. By using the Google Play Services provider, your application doesn't need to pay the binary size cost of carrying Cronet (about 5 megabytes) and the platform ensures that latest updates and security fixes are delivered.

Regardless of how you decide to import the implementation, you'll also need to add a cronet-api dependency to include Cronet APIs.

Open your build.gradle file and add the following two lines to the dependencies section.

implementation 'com.google.android.gms:play-services-cronet:18.0.1'
implementation 'org.chromium.net:cronet-api:101.4951.41'

play-services-cronet includes the installation logic for cronet. For example it depends on play-services-tasks that adds the Task class you mention.

Also the dependencies should change to include cronet-api as the codelab mentions.

brianquinlan commented 3 months ago

My point was that you still need Google Play Services. If you don't have Google Play Services installed (e.g. you need to support a phone distributed in China) then this approach won't work.

lukehutch commented 3 months ago

OK, thanks Brian and Houssein for explaining the Google Play situation. I'll leave this issue open for the other JNI-related stuff (I believe it is still important to avoid crashes and lockups even if developers try to initialize Cronet before Flutter -- and the docs need improving).

mkustermann commented 3 months ago

I don't know enough about how Flutter deals with zones or http to give you a definitive answer, but based on what I see I don't think there should be any problems with this approach as long as you use widgets that use http inside your widget tree.

The zone machinery works as long as one uses it as it was designed: If a library accepts callback functions, the library should bind those callback functions to the current zone, ensuring that once the callbacks are invoked (caller can be from another zone) it switches to the target zone (where the callback was bound to) before executing the callback.

In pure Dart this works, because Dart's core libraries ensure callbacks are bound to the current zone (e.g. Future, Stream, ReceivePort, ...). For example

import 'dart:async';

void main() {
  late final Zone fromZone;
  late final Zone toZone;
  late final Stream stream;

  runZoned(() async {
    fromZone = Zone.current;
    final controller = StreamController();
    stream = controller.stream;
    for (int i = 0; i < 10; ++i) {
      await Future.delayed(const Duration(milliseconds: 1));
      controller.add(i);
    }
  });

  runZoned(() async {
    toZone = Zone.current;
    stream.listen((data) {   // <-- this will use `Zone.current.bindUnaryCallback()` internally
      print('Adding zone is different from consuming zone: ${!identical(fromZone, toZone)}');
      print(data);
    });
  });
}

Here the callback given to stream.listen((data) {}) will be bound to the current zone in the implementation of stream.listen(), ensuring the zone is switched to the correct zone when invoking the callback given to listen().

=> This only works because Stream, Future, dart:io APIs, ... use Zone.current.bind*Callback() on functions they accept, thereby ensuring they'll be invoked in the right zone.

Many of flutter's APIs do not do that, for example taking the default flutter create counter app and modifying it like this:

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

+  late Zone expectedZone;

  void _incrementCounter() {
+    print('Button pressed callback in correct zone: ${identical(expectedZone, Zone.current)}'); 
+    print('Button pressed callback in run in root zone: ${identical(Zone.root, Zone.current)}');

    setState(() { _counter++; });
  }

  @override
  Widget build(BuildContext context) {
+    return runZoned(() {
+      expectedZone = Zone.current;
        return ... (
          floatingActionButton: FloatingActionButton(
            onPressed: _incrementCounter,
            tooltip: 'Increment',
            child: const Icon(Icons.add),
          ...);
+    });
  }
}

This will print

flutter: Button pressed callback in correct zone: false
flutter: Button pressed callback in run in root zone: true

=> The callback given to FloatingActionButton is not invoked in the correct zone. => This indicates FloatingActionButton doesn't use Zone.current.bindCallback(<>)

We can "fix" this manually via

        floatingActionButton: FloatingActionButton(
-          _incrementCounter,
+          onPressed: Zone.current.bindCallback(_incrementCounter),
          ...);

=> So the root cause is flutter's choice of not binding callbacks obtained from APIs to the current zone.

Flutter under the hood has a C++ engine, that will decide when frames are to be drawn and explicitly call into Dart to render frames. It has to choose what zone those calls should run inside of.

=> I believe it will use the zone that was active when the bindings were initialized.

For every frame to be drawn flutter C++ engine will call _drawFrame

@pragma('vm:entry-point')
void _drawFrame() {
  PlatformDispatcher.instance._drawFrame();
}

which calls PlatformDispatcher.instance._drawFrame

  // Called from the engine, via hooks.dart
  void _drawFrame() {
    _invoke(onDrawFrame, _onDrawFrameZone);
  }

which will call onDrawFrame in the _onDrawFrameZone zone.

=> That zone is the one that was used when initializing the bindings in flutter, which either happens implicitly in runApp somewhere or explicitly via e.g. calls to WidgetsFlutterBinding.ensureInitialized() and similar. => So anything it calls from there, widget building etc will use that zone => For pointer events / clicks / ... it probably follows a very similar flow, and eventually invokes callbacks given to widget constructors, which - as they were not bound to the zone at widget constructor time - will just run in the zone that the bindings were setup

mkustermann commented 3 months ago

I think I have found the problem with this whole thing: WidgetsFlutterBinding.ensureInitialized() should not be called as stated in the docs. But if this is not initialized, then the context needed by JNI (that is filled by the plugin) is null.

@HosseinYousefi Two questions: a) Wouldn't we throw a nice exception if jni related code requires an android context object and it wasn't initialized? (It shouldn't crash, hang or otherwise - it should provide a nice error message explaining the problem and how to address it) b) What would it take to make android context objects available to JNI code without having to rely on flutter bindings being initialized? (Tangential: Also thinking about Isolate.run() / compute() running things in helper isolates which may not have bindings being setup)

HosseinYousefi commented 3 months ago

a) Wouldn't we throw a nice exception if jni related code requires an android context object and it wasn't initialized?

Android context can be nullable. Also there might be a need for listening to context changes, it's good to expose some APIs that enable this. https://github.com/dart-lang/native/issues/1254

b) What would it take to make android context objects available to JNI code without having to rely on flutter bindings being initialized? (Tangential: Also thinking about Isolate.run() / compute() running things in helper isolates which may not have bindings being setup)

Yes, we're relying on the existing Flutter plugin system. I will explore this when working on "package:flutter_jni". https://github.com/dart-lang/native/issues/1255

Maybe cronet specifically doesn't need the context from Flutter plugin system and can instead use the global context. That one is easy to get: ActivityThread.currentActivityThread().getApplication()

brianquinlan commented 2 months ago

The zone machinery works as long as one uses it as it was designed...

I think that using runWithClient is too hard to get right in Flutter, which is why I'd suggest using a state-management solution like package:providers.

escamoteur commented 2 months ago

actually we use runWithClient in our app without any problems with Fluter. I'm pretty sure the reason for this sort of crash is something else

brianquinlan commented 2 months ago

@lukehutch are you running on 32-bit Android? If so, there was a bug fixed in package:cronet_http 1.3.1. In any case, could you try to reproduce in the last version?

HosseinYousefi commented 2 months ago

actually we use runWithClient in our app without any problems with Fluter. I'm pretty sure the reason for this sort of crash is something else

I identified the reason. It was the fact that context was not initialized. You can find my answer above.

I already mentioned the 32 bit bug to Luke.

HosseinYousefi commented 2 months ago

@brianquinlan We can safely close this issue. Here's why the crash happened: https://github.com/dart-lang/http/issues/1241#issuecomment-2195694282

brianquinlan commented 2 months ago

Do you think that it is worth mentioning in the docs that either runApp or ensureInitialized should be called before making any calls to cronet_http?

(and sorry, I lost track of the state of this issue ;-))