I have run ODK Collect from the code in an up-to-date Android Studio. Git tag used below is v2025.1.1 (released yesterday, apparently not yet in Google Play) rather than v2025.1.0 where we have the issue on the phones, but one can observe the same behaviour and logs on both versions.
I am getting timeout errors (see below). I first thought that this was because the query generating the CSV was too long and I tweaked it so that it quickly returns just a subset of the data. But the error still occurs, not immediately but just a few moments after the secondary instances have been downloaded:
2025-03-11 06:20:44.413 8294-8506 ServerFormDownloader org.odk.collect.android I Parsing document /storage/emulated/0/Android/data/org.odk.collect.android/files/projects/2fa4c208-1e57-42a6-b1c1-b1637bb06116/.cache/download-36418591-7f36-4734-bf41-61e7ea7f3c43/apafSession.xml
2025-03-11 06:20:44.422 8294-8294 WindowOnBackDispatcher org.odk.collect.android W sendCancelIfRunning: isInProgress=false callback=android.view.ViewRootImpl$$ExternalSyntheticLambda11@538b6ff
2025-03-11 06:20:44.453 8294-8294 WindowOnBackDispatcher org.odk.collect.android W OnBackInvokedCallback is not enabled for the application.
Set 'android:enableOnBackInvokedCallback="true"' in the application manifest.
2025-03-11 06:20:44.453 8294-8294 LeakCanary org.odk.collect.android D Watching instance of androidx.lifecycle.SavedStateHandlesVM (androidx.lifecycle.SavedStateHandlesVM received ViewModel#onCleared() callback) with key 2a00807c-6ce5-45a7-96d8-3a16680e49ba
2025-03-11 06:20:44.453 8294-8294 LeakCanary org.odk.collect.android D Watching instance of leakcanary.internal.ViewModelClearedWatcher (leakcanary.internal.ViewModelClearedWatcher received ViewModel#onCleared() callback) with key 01e63174-337f-4506-a1a2-b23228486663
2025-03-11 06:20:44.453 8294-8294 LeakCanary org.odk.collect.android D Watching instance of androidx.loader.app.LoaderManagerImpl$LoaderViewModel (androidx.loader.app.LoaderManagerImpl$LoaderViewModel received ViewModel#onCleared() callback) with key 7f710c0d-1ae2-457c-9be1-e968e3951003
2025-03-11 06:20:44.453 8294-8294 LeakCanary org.odk.collect.android D Watching instance of org.odk.collect.android.formentry.RefreshFormListDialogFragment (org.odk.collect.android.formentry.RefreshFormListDialogFragment received Fragment#onDestroy() callback) with key 175a188a-e7b4-4c72-bbf0-f7c7e4138601
2025-03-11 06:20:44.454 8294-8294 WindowOnBackDispatcher org.odk.collect.android W OnBackInvokedCallback is not enabled for the application.
Set 'android:enableOnBackInvokedCallback="true"' in the application manifest.
2025-03-11 06:20:44.585 8294-8475 EGL_emulation org.odk.collect.android D app_time_stats: avg=405.81ms min=4.54ms max=12546.03ms count=33
2025-03-11 06:20:49.529 8294-8399 collect.android org.odk.collect.android I Explicit concurrent mark compact GC freed 3720KB AllocSpace bytes, 6(120KB) LOS objects, 49% free, 12MB/24MB, paused 204us,2.834ms total 73.508ms
2025-03-11 06:21:07.895 8294-9515 m.bft org.odk.collect.android I Request m.ilm failed with Status ben{errorCode=REQUEST_TIMEOUT, description=last attempt state: REQUIREMENT_START, cause=m.gni: m.gwp: Timed out: m.gua@1dd0ce0[status=PENDING, info=[inputFuture=[m.gub@a4aeb99[status=PENDING, info=[inputFuture=[m.gup@7051e5e[status=PENDING, info=[futures=[m.gwl@7c6d4b0[status=SUCCESS, result=[m.bep@4965f29]], m.gvr@722c23f[status=SUCCESS, result=[{connectivity, true}]], m.gvm@cb6170c[status=PENDING, info=[delegate=[m.gwl@c0bcbba[status=PENDING]]]]]]]], function=[m.bid@3d5a855]]]], function=[m.bfo@200c26a]]]
at m.gnp.a(:com.google.android.gms.policy_maps_core_dynamite@245125203@245125201032.707632445.707632445:149)
at m.gtt.d(:com.google.android.gms.policy_maps_core_dynamite@245125203@245125201032.707632445.707632445:3)
at m.gtv.run(:com.google.android.gms.policy_maps_core_dynamite@245125203@245125201032.707632445.707632445:130)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:487)
at m.btc$a.run(:com.google.android.gms.policy_maps_core_dynamite@245125203@245125201032.707632445.707632445:23)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
at m.btr.run(:com.google.android.gms.policy_maps_core_dynamite@245125203@245125201032.707632445.707632445:40)
at java.lang.Thread.run(Thread.java:1012)
Caused by: m.gwp: Timed out: m.gua@1dd0ce0[status=PENDING, info=[inputFuture=[m.gub@a4aeb99[status=PENDING, info=[inputFuture=[m.gup@7051e5e[status=PENDING, info=[futures=[m.gwl@7c6d4b0[status=SUCCESS, result=[m.bep@4965f29]], m.gvr@722c23f[status=SUCCESS, result=[{connectivity, true}]], m.gvm@cb6170c[status=PENDING, info=[delegate=[m.gwl@c0bcbba[status=PENDING]]]]]]]], function=[m.bid@3d5a855]]]], function=[m.bfo@200c26a]]]
, errorDetails=} , attempts 2
2025-03-11 06:21:07.896 8294-9515 m.brk org.odk.collect.android W Failed client parameters RPC response. failure=ben{errorCode=REQUEST_TIMEOUT, description=last attempt state: REQUIREMENT_START, cause=m.gni: m.gwp: Timed out: m.gua@1dd0ce0[status=PENDING, info=[inputFuture=[m.gub@a4aeb99[status=PENDING, info=[inputFuture=[m.gup@7051e5e[status=PENDING, info=[futures=[m.gwl@7c6d4b0[status=SUCCESS, result=[m.bep@4965f29]], m.gvr@722c23f[status=SUCCESS, result=[{connectivity, true}]], m.gvm@cb6170c[status=PENDING, info=[delegate=[m.gwl@c0bcbba[status=PENDING]]]]]]]], function=[m.bid@3d5a855]]]], function=[m.bfo@200c26a]]]
at m.gnp.a(:com.google.android.gms.policy_maps_core_dynamite@245125203@245125201032.707632445.707632445:149)
at m.gtt.d(:com.google.android.gms.policy_maps_core_dynamite@245125203@245125201032.707632445.707632445:3)
at m.gtv.run(:com.google.android.gms.policy_maps_core_dynamite@245125203@245125201032.707632445.707632445:130)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:487)
at m.btc$a.run(:com.google.android.gms.policy_maps_core_dynamite@245125203@245125201032.707632445.707632445:23)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
at m.btr.run(:com.google.android.gms.policy_maps_core_dynamite@245125203@245125201032.707632445.707632445:40)
at java.lang.Thread.run(Thread.java:1012)
Caused by: m.gwp: Timed out: m.gua@1dd0ce0[status=PENDING, info=[inputFuture=[m.gub@a4aeb99[status=PENDING, info=[inputFuture=[m.gup@7051e5e[status=PENDING, info=[futures=[m.gwl@7c6d4b0[status=SUCCESS, result=[m.bep@4965f29]], m.gvr@722c23f[status=SUCCESS, result=[{connectivity, true}]], m.gvm@cb6170c[status=PENDING, info=[delegate=[m.gwl@c0bcbba[status=PENDING]]]]]]]], function=[m.bid@3d5a855]]]], function=[m.bfo@200c26a]]]
, errorDetails=}
2025-03-11 06:21:07.896 8294-9515 m.brx org.odk.collect.android I Got failed parameters response!
2025-03-11 06:21:07.896 8294-9515 m.brx org.odk.collect.android W Failed to get a successful parameters response, ben{errorCode=REQUEST_TIMEOUT, description=last attempt state: REQUIREMENT_START, cause=m.gni: m.gwp: Timed out: m.gua@1dd0ce0[status=PENDING, info=[inputFuture=[m.gub@a4aeb99[status=PENDING, info=[inputFuture=[m.gup@7051e5e[status=PENDING, info=[futures=[m.gwl@7c6d4b0[status=SUCCESS, result=[m.bep@4965f29]], m.gvr@722c23f[status=SUCCESS, result=[{connectivity, true}]], m.gvm@cb6170c[status=PENDING, info=[delegate=[m.gwl@c0bcbba[status=PENDING]]]]]]]], function=[m.bid@3d5a855]]]], function=[m.bfo@200c26a]]]
at m.gnp.a(:com.google.android.gms.policy_maps_core_dynamite@245125203@245125201032.707632445.707632445:149)
at m.gtt.d(:com.google.android.gms.policy_maps_core_dynamite@245125203@245125201032.707632445.707632445:3)
at m.gtv.run(:com.google.android.gms.policy_maps_core_dynamite@245125203@245125201032.707632445.707632445:130)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:487)
at m.btc$a.run(:com.google.android.gms.policy_maps_core_dynamite@245125203@245125201032.707632445.707632445:23)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
at m.btr.run(:com.google.android.gms.policy_maps_core_dynamite@245125203@245125201032.707632445.707632445:40)
at java.lang.Thread.run(Thread.java:1012)
Caused by: m.gwp: Timed out: m.gua@1dd0ce0[status=PENDING, info=[inputFuture=[m.gub@a4aeb99[status=PENDING, info=[inputFuture=[m.gup@7051e5e[status=PENDING, info=[futures=[m.gwl@7c6d4b0[status=SUCCESS, result=[m.bep@4965f29]], m.gvr@722c23f[status=SUCCESS, result=[{connectivity, true}]], m.gvm@cb6170c[status=PENDING, info=[delegate=[m.gwl@c0bcbba[status=PENDING]]]]]]]], function=[m.bid@3d5a855]]]], function=[m.bfo@200c26a]]]
, errorDetails=}
m.gni: m.gwp: Timed out: m.gua@1dd0ce0[status=PENDING, info=[inputFuture=[m.gub@a4aeb99[status=PENDING, info=[inputFuture=[m.gup@7051e5e[status=PENDING, info=[futures=[m.gwl@7c6d4b0[status=SUCCESS, result=[m.bep@4965f29]], m.gvr@722c23f[status=SUCCESS, result=[{connectivity, true}]], m.gvm@cb6170c[status=PENDING, info=[delegate=[m.gwl@c0bcbba[status=PENDING]]]]]]]], function=[m.bid@3d5a855]]]], function=[m.bfo@200c26a]]]
at m.gnp.a(:com.google.android.gms.policy_maps_core_dynamite@245125203@245125201032.707632445.707632445:149)
at m.gtt.d(:com.google.android.gms.policy_maps_core_dynamite@245125203@245125201032.707632445.707632445:3)
at m.gtv.run(:com.google.android.gms.policy_maps_core_dynamite@245125203@245125201032.707632445.707632445:130)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:487)
at m.btc$a.run(:com.google.android.gms.policy_maps_core_dynamite@245125203@245125201032.707632445.707632445:23)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:644)
at m.btr.run(:com.google.android.gms.policy_maps_core_dynamite@245125203@245125201032.707632445.707632445:40)
at java.lang.Thread.run(Thread.java:1012)
Caused by: m.gwp: Timed out: m.gua@1dd0ce0[status=PENDING, info=[inputFuture=[m.gub@a4aeb99[status=PENDING, info=[inputFuture=[m.gup@7051e5e[status=PENDING, info=[futures=[m.gwl@7c6d4b0[status=SUCCESS, result=[m.bep@4965f29]], m.gvr@722c23f[status=SUCCESS, result=[{connectivity, true}]], m.gvm@cb6170c[status=PENDING, info=[delegate=[m.gwl@c0bcbba[status=PENDING]]]]]]]], function=[m.bid@3d5a855]]]], function=[m.bfo@200c26a]]]
2025-03-11 06:21:07.896 8294-9515 m.brx org.odk.collect.android I P/H: Scheduling next update in 10.000000 seconds: retry
2025-03-11 06:21:17.898 8294-9517 m.brx org.odk.collect.android I P/H: Running update task for account Account {name=signedout@, type=com.google.android.apps.maps} , locale en_US
2025-03-11 06:21:17.898 8294-9517 m.brx org.odk.collect.android I P/H: Running update task via GWS.
2025-03-11 06:21:17.900 8294-9517 m.bxm org.odk.collect.android I Requested experimentIds= []
2025-03-11 06:21:17.900 8294-9517 m.brk org.odk.collect.android I Fetching new client parameters: Account {name=signedout@, type=com.google.android.apps.maps} en_US
It is not clear to me whether this REQUEST_TIMEOUT is a request over the network, or an internal callback within the Android app.
If it is an HTTP request, I don't see which URL it calls, and I don't know where in the code I should debug to find out (I am not very familiar with Android Studio / IntelliJ).
Could it be that there is a new URL to provide on the server side that we have not yet implemented?
Or that some timeouts have changed?