MuntashirAkon/AppManager · error

Error setting CLASSPATH\n

Error message

Error setting CLASSPATH\n

What it means

setenv("CLASSPATH", exec_jar_path, 1) failed inside main() just before execv of /system/bin/app_process. setenv here effectively only fails on ENOMEM, so the runtime could not record the jar path in the environment — without CLASSPATH the spawned app_process cannot locate am.jar, so the launch is abandoned and the temporary jar unlinked.

Solutions

  1. Free memory and retry the launch, since setenv here effectively only fails on ENOMEM
  2. Verify exec_jar_path is a valid, non-null string before setenv
  3. Log errno to distinguish allocation failure from other environment errors
Defensive patterns

Strategy: fallback

When it happens

Trigger: Thrown at app/src/main/cpp/run_server.c:199 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of MuntashirAkon/AppManager@0152f468fc (2026-09-12). Data as JSON: /api/errors/6716d1d2b6f76afd. Report an issue: GitHub.

Appendix: source

Thrown at app/src/main/cpp/run_server.c:199

        fprintf(stderr, "Warning: chown failed: %s\n", strerror(errno));
        // Although it failed, still proceed
    }

    // Build argument for am.jar
    char args_buf[2048];
    if (snprintf(args_buf, sizeof(args_buf), "path:%s,token:%s,app:%s,bgrun:%s,debug:%s",
                 port, token, app_id, bgrun, debug) >= sizeof(args_buf)) {
        fprintf(stderr, "Error! Buffer overflow on args_buf.\n");
        unlink(exec_jar_path);
        return 1;
    }

    printf("Resolved Jar path: %s\n", resolved_am_jar_path);
    printf("Args: %s\n", args_buf);

    // Execute app_process
    if (setenv("CLASSPATH", exec_jar_path, 1) != 0) {
        fprintf(stderr, "Error setting CLASSPATH\n");
        unlink(exec_jar_path);
        return 1;
    }

    int extra_args_count = argc - 8;
    int exec_argc = 6 + extra_args_count;
    char **exec_argv = malloc(sizeof(char *) * exec_argc);
    if (!exec_argv) {
        fprintf(stderr, "Out of memory\n");
        unlink(exec_jar_path);
        return 1;
    }

    exec_argv[0] = "app_process";
    exec_argv[1] = "/system/bin";

    char nice_name_buf[128];
    snprintf(nice_name_buf, sizeof(nice_name_buf), "--nice-name=%s", SERVER_NAME);

View on GitHub (pinned to 0152f468fc)