{"record":{"id":"00bcf295506a54ee","repo":"termux/termux-app","slug":"unsupported-termux-app-package-manager-s-with-v","errorCode":null,"errorMessage":"Unsupported TERMUX_APP_PACKAGE_MANAGER \"%s\" with variant \"%s\"","messagePattern":"Unsupported TERMUX_APP_PACKAGE_MANAGER \"(.+?)\" with variant \"(.+?)\"","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"critical","filePath":"termux-shared/src/main/java/com/termux/shared/termux/TermuxBootstrap.java","lineNumber":40,"sourceCode":"\n    /** The {@link PackageVariant} for the bootstrap in the app APK added in app/build.gradle. */\n    public static PackageVariant TERMUX_APP_PACKAGE_VARIANT;\n\n    /** Set {@link #TERMUX_APP_PACKAGE_VARIANT} and {@link #TERMUX_APP_PACKAGE_MANAGER} from {@code packageVariantName} passed. */\n    public static void setTermuxPackageManagerAndVariant(@Nullable String packageVariantName) {\n        TERMUX_APP_PACKAGE_VARIANT = PackageVariant.variantOf(packageVariantName);\n        if (TERMUX_APP_PACKAGE_VARIANT == null) {\n            throw new RuntimeException(\"Unsupported TERMUX_APP_PACKAGE_VARIANT \\\"\" + packageVariantName + \"\\\"\");\n        }\n\n        Logger.logVerbose(LOG_TAG, \"Set TERMUX_APP_PACKAGE_VARIANT to \\\"\" + TERMUX_APP_PACKAGE_VARIANT + \"\\\"\");\n\n        // Set packageManagerName to substring before first dash \"-\" in packageVariantName\n        int index = packageVariantName.indexOf('-');\n        String packageManagerName = (index == -1) ? null : packageVariantName.substring(0, index);\n        TERMUX_APP_PACKAGE_MANAGER = PackageManager.managerOf(packageManagerName);\n        if (TERMUX_APP_PACKAGE_MANAGER == null) {\n            throw new RuntimeException(\"Unsupported TERMUX_APP_PACKAGE_MANAGER \\\"\" + packageManagerName + \"\\\" with variant \\\"\" + packageVariantName + \"\\\"\");\n        }\n\n        Logger.logVerbose(LOG_TAG, \"Set TERMUX_APP_PACKAGE_MANAGER to \\\"\" + TERMUX_APP_PACKAGE_MANAGER + \"\\\"\");\n    }\n\n    /**\n     * Set {@link #TERMUX_APP_PACKAGE_VARIANT} and {@link #TERMUX_APP_PACKAGE_MANAGER} with the\n     * {@link #BUILD_CONFIG_FIELD_TERMUX_PACKAGE_VARIANT} field value from the\n     * {@link TERMUX_APP#BUILD_CONFIG_CLASS_NAME} class of the Termux app APK installed on the device.\n     * This can only be used by apps that share `sharedUserId` with the Termux app and can be used\n     * by plugin apps.\n     *\n     * @param currentPackageContext The context of current package.\n     */\n    public static void setTermuxPackageManagerAndVariantFromTermuxApp(@NonNull Context currentPackageContext) {\n        String packageVariantName = getTermuxAppBuildConfigPackageVariantFromTermuxApp(currentPackageContext);\n        if (packageVariantName != null) {\n            TermuxBootstrap.setTermuxPackageManagerAndVariant(packageVariantName);","sourceCodeStart":22,"sourceCodeEnd":58,"githubUrl":"https://github.com/termux/termux-app/blob/3df69d1da197dd9bd71a3bafd902dffd720576b4/termux-shared/src/main/java/com/termux/shared/termux/TermuxBootstrap.java#L22-L58","documentation":"Thrown by setTermuxPackageManagerAndVariant after the variant was accepted but the package-manager prefix (substring before the first '-') does not match any PackageManager. Only 'apt' is a valid manager. This indicates the variant string has a valid suffix shape but an unknown manager prefix (e.g. 'foo-android-7').","triggerScenarios":"packageVariantName's substring before the first '-' is not 'apt' (e.g. 'tapm-android-7', 'pacman-android-7', or a variant with no dash so index==-1 yields null managerName). Only 'apt' is registered; the others (TAPM, PACMAN) are commented out.","commonSituations":"Using a variant name whose manager prefix was never enabled in the enum (TAPM/PACMAN are commented out); a variant string with no '-' dash so managerName becomes null; typo in the manager portion.","solutions":["Use a variant whose prefix before the first '-' is exactly 'apt' (i.e. 'apt-android-7' or 'apt-android-5').","If you need TAPM/PACMAN, uncomment and implement that enum constant plus its bootstrap support.","Guard against a missing dash: validate packageVariantName contains '-' before splitting.","Check the build.gradle TERMUX_PACKAGE_VARIANT spelling."],"exampleFix":"// before\nint index = packageVariantName.indexOf('-');\nString packageManagerName = (index == -1) ? null : packageVariantName.substring(0, index);\nTERMUX_APP_PACKAGE_MANAGER = PackageManager.managerOf(packageManagerName);\nif (TERMUX_APP_PACKAGE_MANAGER == null) {\n    throw new RuntimeException(\"Unsupported TERMUX_APP_PACKAGE_MANAGER \\\"\" + packageManagerName + \"\\\" with variant \\\"\" + packageVariantName + \"\\\"\");\n}\n\n// after (explicit validation with helpful message)\nint index = packageVariantName.indexOf('-');\nif (index == -1) {\n    throw new RuntimeException(\"Invalid variant (missing '-'): \" + packageVariantName);\n}\nString packageManagerName = packageVariantName.substring(0, index);\nTERMUX_APP_PACKAGE_MANAGER = PackageManager.managerOf(packageManagerName);\nif (TERMUX_APP_PACKAGE_MANAGER == null) {\n    throw new RuntimeException(\"Unsupported package manager '\" + packageManagerName + \"'. Supported: apt\");\n}","handlingStrategy":"validation","validationCode":"int dash = packageVariantName.indexOf('-');\nif (dash == -1) {\n    throw new IllegalArgumentException(\"Variant must contain '-': \" + packageVariantName);\n}\nString mgr = packageVariantName.substring(0, dash);\nif (PackageManager.managerOf(mgr) == null) {\n    throw new IllegalArgumentException(\"Unsupported manager: \" + mgr + \". Valid: apt\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Ensure the variant's manager prefix (before the first '-') is a registered PackageManager.","Use only 'apt-*' variants unless you enable TAPM/PACMAN in the enum.","Validate the variant string shape (must contain '-') before splitting."],"tags":["bootstrap","build-config","enum","configuration","termux"],"backgroundTag":null,"analyzedSha":"3df69d1da197dd9bd71a3bafd902dffd720576b4","analyzedAt":"2026-08-13T22:46:28.294Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}