shwenzhang/AndResGuard · error · ParameterException
Unsupported option: . See --help for supported options.
Error message
Unsupported option: <optionOriginalForm>. See --help for supported options.
What it means
During `apksigner sign`, each command-line option must be one of the known sign options (in, out, ks, key, cert, etc.). An option name that matches none of them triggers this ParameterException immediately while parsing options.
Solutions
- Check `apksigner sign --help` for the exact supported option names
- Correct the misspelled option (e.g. --ks-key-alias)
- Remove options not supported by the sign subcommand
Example fix
// before apksigner sign --ks-keyalias myalias --ks release.jks app.apk // after apksigner sign --ks-key-alias myalias --ks release.jks app.apk
Defensive patterns
Strategy: validation
Validate before calling
Set<String> ALLOWED = Set.of("out","in","min-sdk-version","max-sdk-version","v1-signing-enabled","v2-signing-enabled","v3-signing-enabled","next-signer","ks","ks-key-alias","ks-pass","key-pass","v1-signer-name","ks-type","ks-provider-name","ks-provider-class","ks-provider-arg","key","cert","v","verbose");
for (String a : args) if (a.startsWith("--") && !ALLOWED.contains(a.substring(2))) throw new IllegalArgumentException("unsupported option: " + a); Type guard
boolean isSignOption(String arg) {
return arg != null && arg.startsWith("--") && ALLOWED_SIGN_OPTIONS.contains(arg.substring(2));
} Try / catch
try { runSign(args); } catch (ParameterException e) { System.err.println(e.getMessage()); printUsage(); } Prevention
- Consult `apksigner sign --help` when unsure of a flag
- Don't mix verify-only options into sign commands
- Pin the apksigner version and match its documented flags
When it happens
Trigger: Passing an option not in sign's accepted set, e.g. `--kskey-alias` or `--ks-alias` instead of `--ks-key-alias`, or an option only valid for `verify` (like `--print-certs`) used with `sign`.
Common situations: Typos in long option names; mixing up sign and verify option sets; using options from a different apksigner version that added/renamed flags.
Understand the failure class
Background: "Unknown argument", "Invalid value", and "must be one of": invalid CLI argument errors explained — this error's family across 35 libraries.
Related errors
- Unsupported command: . See --help for supported commands
- Unexpected parameter(s) after
- Unexpected parameter(s) after input APK (<params[1]>)
- Unexpected parameter(s) after APK (<params[1]>)
- At least one signer must be specified
AI-assisted analysis of shwenzhang/AndResGuard@e4df245d82 (2026-09-12).
Data as JSON: /api/errors/d7e6be1922402cde.
Report an issue: GitHub.
Appendix: source
Thrown at AndResGuard-core/src/main/java/apksigner/ApkSignerTool.java:178
signerParams.keyPasswordSpec = optionsParser.getRequiredValue("Key password");
} else if ("v1-signer-name".equals(optionName)) {
signerParams.v1SigFileBasename = optionsParser.getRequiredValue("JAR signature file basename");
} else if ("ks-type".equals(optionName)) {
signerParams.keystoreType = optionsParser.getRequiredValue("KeyStore type");
} else if ("ks-provider-name".equals(optionName)) {
signerParams.keystoreProviderName = optionsParser.getRequiredValue("JCA KeyStore Provider name");
} else if ("ks-provider-class".equals(optionName)) {
signerParams.keystoreProviderClass = optionsParser.getRequiredValue("JCA KeyStore Provider class name");
} else if ("ks-provider-arg".equals(optionName)) {
signerParams.keystoreProviderArg = optionsParser.getRequiredValue("JCA KeyStore Provider constructor argument");
} else if ("key".equals(optionName)) {
signerParams.keyFile = optionsParser.getRequiredValue("Private key file");
} else if ("cert".equals(optionName)) {
signerParams.certFile = optionsParser.getRequiredValue("Certificate file");
} else if (("v".equals(optionName)) || ("verbose".equals(optionName))) {
verbose = optionsParser.getOptionalBooleanValue(true);
} else {
throw new ParameterException("Unsupported option: "
+ optionOriginalForm
+ ". See --help for supported"
+ " options.");
}
}
if (!signerParams.isEmpty()) {
signers.add(signerParams);
}
signerParams = null;
if (signers.isEmpty()) {
throw new ParameterException("At least one signer must be specified");
}
params = optionsParser.getRemainingParams();
if (inputApk != null) {
// Input APK has been specified via preceding parameters. We don't expect any more
// parameters.View on GitHub (pinned to e4df245d82)