{"record":{"id":"358603bd16744771","repo":"shwenzhang/AndResGuard","slug":"unexpected-parameter-s-after-input-apk-params-1","errorCode":null,"errorMessage":"Unexpected parameter(s) after input APK (<params[1]>)","messagePattern":"Unexpected parameter\\(s\\) after input APK \\(<params\\[1\\]>\\)","errorType":"validation","errorClass":"ParameterException","httpStatus":null,"severity":"error","filePath":"AndResGuard-core/src/main/java/apksigner/ApkSignerTool.java","lineNumber":206,"sourceCode":"\n    if (signers.isEmpty()) {\n      throw new ParameterException(\"At least one signer must be specified\");\n    }\n\n    params = optionsParser.getRemainingParams();\n    if (inputApk != null) {\n      // Input APK has been specified via preceding parameters. We don't expect any more\n      // parameters.\n      if (params.length > 0) {\n        throw new ParameterException(\"Unexpected parameter(s) after \" + optionOriginalForm + \": \" + params[0]);\n      }\n    } else {\n      // Input APK has not been specified via preceding parameters. The next parameter is\n      // supposed to be the path to input APK.\n      if (params.length < 1) {\n        throw new ParameterException(\"Missing input APK\");\n      } else if (params.length > 1) {\n        throw new ParameterException(\"Unexpected parameter(s) after input APK (\" + params[1] + \")\");\n      }\n      inputApk = new File(params[0]);\n    }\n    if ((minSdkVersionSpecified) && (minSdkVersion > maxSdkVersion)) {\n      throw new ParameterException(\"Min API Level (\" + minSdkVersion + \") > max API Level (\" + maxSdkVersion + \")\");\n    }\n\n    List<ApkSigner.SignerConfig> signerConfigs = new ArrayList<>(signers.size());\n    int signerNumber = 0;\n    try (PasswordRetriever passwordRetriever = new PasswordRetriever()) {\n      for (SignerParams signer : signers) {\n        signerNumber++;\n        signer.name = \"signer #\" + signerNumber;\n        try {\n          signer.loadPrivateKeyAndCerts(passwordRetriever);\n        } catch (ParameterException e) {\n          System.err.println(\"Failed to load signer \\\"\" + signer.name + \"\\\": \" + e.getMessage());\n          System.exit(2);","sourceCodeStart":188,"sourceCodeEnd":224,"githubUrl":"https://github.com/shwenzhang/AndResGuard/blob/e4df245d82f27d9a2d0dd108260a3510cbaba849/AndResGuard-core/src/main/java/apksigner/ApkSignerTool.java#L188-L224","documentation":"Validation in ApkSignerTool.sign: after --in/--input supplied the APK path, additional positional parameters remain on the command line. The tool treats everything after the input APK as unexpected; this fires when the user passes extra arguments (duplicate APK paths, mistyped flags without '--', etc.) alongside --in.","triggerScenarios":"`apksigner sign --ks ks.jks app.apk other-file` — an extra positional argument such as the output path mistakenly placed positionally, or unquoted paths with spaces splitting into multiple args.","commonSituations":"Assuming output can be positional (it requires --out); unquoted file paths containing spaces; passing both input and output positionally.","solutions":["Keep only the input APK positional and move everything else to options (--out, etc.)","Quote paths containing spaces","Remove duplicated positional arguments"],"exampleFix":"// before\napksigner sign --ks ks.jks app.apk app-signed.apk\n// after\napksigner sign --ks ks.jks --out app-signed.apk app.apk","handlingStrategy":"validation","validationCode":"if (!usesInFlag(args) && positionalArgs(args).length > 1) throw new IllegalArgumentException(\"Only one positional arg (input APK) allowed; use --out for output\");","typeGuard":null,"tryCatchPattern":"try { signCmd(args); } catch (ParameterException e) { System.err.println(e.getMessage()); exit(1); }","preventionTips":["Pass output via --out, never positionally","Quote paths containing spaces","Keep only the input APK as a positional argument"],"tags":["cli","argument-parsing"],"backgroundTag":"unexpected-extra-argument","analyzedSha":"e4df245d82f27d9a2d0dd108260a3510cbaba849","analyzedAt":"2026-09-12T17:49:07.798Z","contentChangedAt":"2026-09-12T17:49:07.798Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}