{"record":{"id":"9e657ceb3f3541ea","repo":"FyroxEngine/Fyrox","slug":"adb-error-err","errorCode":null,"errorMessage":"ADB error: {err:?}","messagePattern":"ADB error: (.+?)","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"fyrox-build-tools/src/export/android.rs","lineNumber":123,"sourceCode":"        .arg(format!(\"{package_name}.apk\"))\n        .spawn()\n    {\n        match adb.wait_with_output() {\n            Ok(_) => {\n                let compatible_package_name = package_name.replace('-', \"_\");\n                Log::verify(\n                    utils::make_command(\"adb\")\n                        .arg(\"shell\")\n                        .arg(\"am\")\n                        .arg(\"start\")\n                        .arg(\"-n\")\n                        .arg(format!(\n                            \"rust.{compatible_package_name}/android.app.NativeActivity\"\n                        ))\n                        .spawn(),\n                );\n            }\n            Err(err) => Log::err(format!(\"ADB error: {err:?}\")),\n        }\n    }\n}\n\npub fn copy_assets(\n    export_options: &ExportOptions,\n    package: &Package,\n    package_dir_path: &Utf8Path,\n    temp_folders: &mut Vec<PathBuf>,\n    resource_manager: &ResourceManager,\n    convert: bool,\n) -> Result<(), String> {\n    // Asset management on Android is quite annoying, because all other target platforms\n    // uses the workspace manifest path as a root directory and all paths in code/assets\n    // stored relatively to it. On Android, however, all your assets must be in unified\n    // assets storage. This means that, if we simply specify assets folder to be `../data`\n    // (relative to `executor-android`), it will put all the assets in the storage, but\n    // their path will become relative to the storage. For example, in your code you can","sourceCodeStart":105,"sourceCodeEnd":141,"githubUrl":"https://github.com/FyroxEngine/Fyrox/blob/76c91aad8eca488ce527b1af707be8b3b24ad72d/fyrox-build-tools/src/export/android.rs#L105-L141","documentation":"Logged error in fyrox-build-tools' Android export when spawning or running the ADB command fails. run_build composes an adb shell command to launch rust.<package>/android.app.NativeActivity on the device; if Command::spawn returns Err, this message is logged. It indicates ADB tooling or device connection problems, not a game bug.","triggerScenarios":"adb binary not on PATH, adb executable path misconfigured in ExportOptions, spawn fails (adb missing/not executable), or device not connected when launching the NativeActivity.","commonSituations":"Android SDK platform-tools not installed, PATH missing platform-tools, no USB debugging authorization on the device, multiple devices without -s, device disconnected mid-deploy.","solutions":["Verify adb is installed and on PATH (adb version)","Check a device is connected and authorized (adb devices shows 'device' state)","Ensure the ADB path in export options points to the platform-tools binary","Run `adb kill-server && adb start-server` to reset the ADB daemon, then retry"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"let adb = which::which(\"adb\")?;\nlet out = Command::new(&adb).args([\"devices\"]).output()?;\nassert!(out.status.success() && String::from_utf8_lossy(&out.stdout).contains(\"device\\t\"));","typeGuard":null,"tryCatchPattern":"match Command::new(\"adb\").args([...]).spawn() {\n    Ok(child) => { /* wait, check exit status */ },\n    Err(e) if e.kind() == io::ErrorKind::NotFound => eprintln!(\"adb not found — install platform-tools\"),\n    Err(e) => eprintln!(\"ADB error: {e}\"),\n}","preventionTips":["Install Android platform-tools and add to PATH","Run `adb devices` before deploying and require an authorized device","Reset the ADB server if the device list is stale"],"tags":["android","adb","deployment","process-spawn"],"backgroundTag":"command-not-found","analyzedSha":"76c91aad8eca488ce527b1af707be8b3b24ad72d","analyzedAt":"2026-09-10T16:04:01.633Z","contentChangedAt":"2026-09-10T16:04:01.633Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}