Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cronet JNI crash in release and profile builds #1241

Open
lukehutch opened this issue Jun 20, 2024 · 53 comments
Open

Cronet JNI crash in release and profile builds #1241

lukehutch opened this issue Jun 20, 2024 · 53 comments
Assignees
Labels
package:cronet_http type-bug Incorrect behavior (everything from a crash to more subtle misbehavior)

Comments

@lukehutch
Copy link

lukehutch commented Jun 20, 2024

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:

flutter/flutter#149229

This is a JNI crash, so I filed this JNI bug: dart-lang/native#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
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 [email protected]::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
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
Copy link
Author

lukehutch commented Jun 22, 2024

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
Copy link
Author

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
Copy link
Member

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
Copy link
Collaborator

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
Copy link
Member

HosseinYousefi commented Jun 27, 2024

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
Copy link
Author

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
Copy link
Member

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
Copy link
Author

lukehutch commented Jun 27, 2024

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
Copy link
Author

lukehutch commented Jun 27, 2024

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
Copy link
Author

lukehutch commented Jun 27, 2024

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
Copy link
Member

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
Copy link
Author

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: #828 However, it looks like that was fixed. Are there still remaining issues?

@HosseinYousefi
Copy link
Member

HosseinYousefi commented Jun 27, 2024

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
Copy link
Author

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.

@HosseinYousefi
Copy link
Member

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
Copy link
Author

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
Copy link

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
Copy link

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

@lukehutch
Copy link
Author

@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
Copy link

escamoteur commented Jun 28, 2024

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

@escamoteur
Copy link

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
Copy link

@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
Copy link
Author

@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 #1241 (comment) will hopefully be answered before this is closed.

@escamoteur
Copy link

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
Copy link
Collaborator

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.

@escamoteur
Copy link

escamoteur commented Jun 29, 2024 via email

@HosseinYousefi
Copy link
Member

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
Copy link

@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
Copy link
Author

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
Copy link
Member

@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
Copy link

escamoteur commented Jun 30, 2024 via email

@HosseinYousefi
Copy link
Member

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
Copy link
Author

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
Copy link
Collaborator

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
Copy link
Collaborator

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
Copy link
Author

lukehutch commented Jul 1, 2024

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 Cronet JNI crash in release and profile builds #1241 (comment)
  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 ( flutter/flutter#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
Copy link
Collaborator

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
Copy link
Member

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
Copy link
Collaborator

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
Copy link
Author

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
Copy link
Member

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
Copy link
Member

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
Copy link
Member

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.
dart-lang/native#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".
dart-lang/native#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
Copy link
Collaborator

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
Copy link

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
Copy link
Collaborator

@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
Copy link
Member

HosseinYousefi commented Jul 11, 2024

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
Copy link
Member

@brianquinlan We can safely close this issue. Here's why the crash happened: #1241 (comment)

@brianquinlan
Copy link
Collaborator

brianquinlan commented Jul 11, 2024

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 ;-))

@HosseinYousefi
Copy link
Member

HosseinYousefi commented Jul 11, 2024

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?

Yes, that's helpful to mention. I have opened two issues to 1. Output a descriptive error message if users do this. 2. See if I can stop depending on flutter bindings for retrieving the right context needed by cronet. I'll open PRs here to upgrade the dependencies once that's done as usual!

@brianquinlan
Copy link
Collaborator

Do you think that work will be done in the short term? I don't want to add documentation if I'll end it removing it (assuming that I don't forget!) in a month.

@HosseinYousefi
Copy link
Member

Do you think that work will be done in the short term? I don't want to add documentation if I'll end it removing it (assuming that I don't forget!) in a month.

I'll prioritize no. 1, but that's in line with the documentation.

I don't know even if no. 2 is possible right now. I have to check.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
package:cronet_http type-bug Incorrect behavior (everything from a crash to more subtle misbehavior)
Projects
None yet
Development

No branches or pull requests

5 participants