Repository navigation
Conversation
The Events, Network, Performance, Files, Preferences and UI Control plugins, necto-okhttp and the sample screens that exercise them, as they were before they moved out of the SDK change.
A symlink under a deleted folder led deleteRecursively into its target, which can lie outside the configured root. Links are now removed as links.
Closing the body after a failed read still reported the request as completed. The read error now ends the record as FAILED with that error.
Writing 2147483648 to an Int key stored it as a Long, and the app then threw ClassCastException reading it as an Int. A value outside the Int range is now refused before the key is touched.
A gesture cancelled between down and up left the view pressed, and a tap held that way turned into a long press.
The method, URL and header names went into the command unescaped, so a quote in a URL the app requested ended the argument, and pasting the command ran what followed.
A default argument is evaluated before the function body, so a build that is not debuggable still created every plugin: UI Control registered its activity callbacks and Files created the external directories. The defaults are now built after the check.
Test counts and coverage match the fixes. The emulator and USB runs were repeated over the ADB connection. preferences.set joins files.write under the 64 KiB inbound limit.
Emulator check over ADBI repeated the plugin checks from "Earlier device checks" in Automated
Per plugin
Notes
|
Device check over USBThis repeats the emulator check on a Galaxy S25+ (SM-S936N, Android 17 / API 37) connected over USB. The build was f0f7622, run with Automated
Per plugin
On the device, none of the 5 s timeouts seen on the loaded emulator host happened. That supports reading them as host load. Not covered
|
Unplugging the cableFollowing up on the device check, I unplugged the Galaxy S25+ while the sample was connected and plugged it back in. Same build (f0f7622), run with What happened
Why Before the restart,
After Scope This is in the Android SDK from #30, not in the plugins this PR adds. The iOS runtime has the same loop shape. I did not unplug an iPhone, so I don't know whether usbmuxd closes the socket on the phone there, which would hide it. Possible fixes: keep accepting while a session runs, and let the newer session replace the older one through the existing path in |
Summary
Refs #17. Follows #30 and brings back the shipped Android plugins, as agreed there. It's rebased onto
feature/android-support, so Necto now finds the app through ADB.necto-okhttp), Performance, Files, Preferences (DataStore) and UI Control, with the sample screens that exercise them.2147483648turns anIntkey intoLongCOMPLETEDACTION_CANCELThree other fixes:
NectoAndroid.start(context)no longer creates the default plugins in a build that isn't debuggable. The default argument was evaluated before the debuggable check.Questions before I go further
I've left these alone until you decide:
files.write, andpreferences.setwhen it carries a large string. Today a request over the limit closes the session and Necto reconnects. Both are documented as limitations. Should I raise the limit to match iOS, or keep 64 KiB and have the panels refuse larger values up front?NectoDefaultPluginsis a target separate fromNectoSDK. Here the plugins ship insidenecto-coreandnecto-android, andstart(context)registers all of them by default. As a result, every app that adopts the SDK gets the DataStore dependency. Should I split them into their own modules (for examplenecto-plugins, withnecto-okhttpalready separate) so that apps opt in? I'd do that in this PR or the next one, whichever you prefer.mainorfeature/android-support? I'll check the built-in panels against theirallowedOriginsthere.Changelog
Bring back the shipped Android plugins and fix the issues found in review.
Test Plan
cd SDK/Android && ./gradlew build: 31necto-coretests, 8necto-okhttp, 15necto-android.script/test: Swift, Mac app, web and release checks pass.script/test-android-artifacts: no SDK permissions, 24 panel files match iOS, only the debug build is debuggable.script/test-android-sampleandscript/test-android-securityboth pass.test-android-samplepasses.test-android-securitytimed out at its 10 sam start. The host Mac had a load average near 200 at the time, and a cold start took 9–18 s. It passed on USB with the same APK.Not verified: Android E2E still isn't in CI. The manual plugin checks in
SDK/Android/docs/verification.md("Earlier device checks") predate the ADB connection and weren't repeated.