Gradle tooling api could not determine java version

I am getting error when using tooling api in my IDE built for android.

When executed in terminal

java -version

I got

openjdk version "17-internal" 2021-09-14
OpenJDK Runtime Environment (build 17-internal+0-adhoc..src)
OpenJDK Server VM (build 17-internal+0-adhoc..src, mixed mode)
.../com.icst.android.appstudio/files $

PATH env variable

/data/data/com.icst.android.appstudio/files/usr/bin:/data/data/com.icst.android.appstudio/files/usr/lib/jvm/java-17-openjdk/bin
public static void init(Context context) {
    String IDEDIRECTORY;
    if (BuildConfig.isDeveloperMode) {
      STORAGE =
          BuildConfig.STORAGE.getAbsolutePath().equals("NOT_PROVIDED")
              ? Environment.getExternalStorageDirectory()
              : BuildConfig.STORAGE;
      IDEDIRECTORY = ".AndroidAppBuilder";
    } else {
      STORAGE = new File(getDataDir(context), "files");
      IDEDIRECTORY = "home";
    }

    IDEDIR = new File(STORAGE, IDEDIRECTORY);
    PROJECTS = new File(IDEDIR, "Projects");
    SETTING_FILE = new File(new File(IDEDIR, CONFIG), SETTING);
    EXTENSION_DIR = new File(IDEDIR, "Extension");
    if (!EXTENSION_DIR.exists()) EXTENSION_DIR.mkdirs();

    ROOT = mkdirIfNotExits(new File("/data/data/com.icst.android.appstudio/files"));
    PREFIX = mkdirIfNotExits(new File(ROOT, "usr"));
    HOME = mkdirIfNotExits(new File(ROOT, "home"));
    IDE_HOME = mkdirIfNotExits(new File(HOME, ".ide"));
    TMP_DIR = mkdirIfNotExits(new File(PREFIX, "tmp"));
    BIN_DIR = mkdirIfNotExits(new File(PREFIX, "bin"));
    LIB_DIR = mkdirIfNotExits(new File(PREFIX, "lib"));
    SHELL = new File(BIN_DIR, "bash");
    LOGIN_SHELL = new File(BIN_DIR, "login");
    BUSYBOX = mkdirIfNotExits(new File(BIN_DIR, "busybox"));

    BUSYBOX.setExecutable(true);
    SHELL.setExecutable(true);
    LOGIN_SHELL.setExecutable(true);
    grantFile(BUSYBOX);
    grantFile(LOGIN_SHELL);
    grantFile(SHELL);
    grantFile(new File(PREFIX, "lib/jvm/java-17-openjdk/bin/java"));
  }

  public static File mkdirIfNotExits(File in) {
    if (in != null) {
      return in;
    }

    if (!in.exists()) {
      in.mkdirs();
    }
    return in;
  }

  public static void grantFile(File path) {
    if (!path.setExecutable(true)) {
      Log.e(
          "setExecutable",
          new String("setExecutable failed for : ").concat(path.getAbsolutePath()));
    }
  }

  public static Map<String, String> getEnvironment() {

    if (!ENV_VARS.isEmpty()) {
      return ENV_VARS;
    }

    ENV_VARS.put("HOME", HOME.getAbsolutePath());
    ENV_VARS.put("PREFIX", PREFIX.getAbsolutePath());
    ENV_VARS.put("ANDROID_HOME", new File(HOME, "android-sdk").getAbsolutePath());
    ENV_VARS.put("ANDROID_SDK_ROOT", new File(HOME, "android-sdk").getAbsolutePath());
    ENV_VARS.put("ANDROID_USER_HOME", HOME.getAbsolutePath() + "/.android");
    ENV_VARS.put("JAVA_HOME", new File(PREFIX, "lib/jvm/java-17-openjdk").getAbsolutePath());
    ENV_VARS.put("TMPDIR", TMP_DIR.getAbsolutePath());
    ENV_VARS.put("LANG", "en_US.UTF-8");
    ENV_VARS.put("LC_ALL", "en_US.UTF-8");
    ENV_VARS.put("user.home", HOME.getAbsolutePath());
    ENV_VARS.put("SYSROOT", PREFIX.getAbsolutePath());
    ENV_VARS.put("GRADLE_USER_HOME", new File(HOME, ".gradle").getAbsolutePath());
    ENV_VARS.put("BUSYBOX", BUSYBOX.getAbsolutePath());
    ENV_VARS.put("SHELL", SHELL.getAbsolutePath());
    ENV_VARS.put("CONFIG_SHELL", SHELL.getAbsolutePath());
    ENV_VARS.put("TERM", "screen");
    ENV_VARS.put(
        "PATH",
        BIN_DIR
            .getAbsolutePath()
            .concat(":")
            .concat(new File(PREFIX, "lib/jvm/java-17-openjdk/bin").getAbsolutePath()));

    String ld = System.getenv("LD_LIBRARY_PATH");
    if (ld == null || ld.trim().length() <= 0) {
      ld = "";
    } else {
      ld += File.pathSeparator;
    }
    ld += LIB_DIR.getAbsolutePath();
    ENV_VARS.put("LD_LIBRARY_PATH", ld);

    // https://github.com/termux/termux-tools/blob/f2736f7f8232cd19cf52bca9b0ac9afb8ad9e562/scripts/termux-setup-package-manager.in#L3
    ENV_VARS.put("TERMUX_APP_PACKAGE_MANAGER", "apt");
    ENV_VARS.put("TERMUX_PKG_NO_MIRROR_SELECT", "true");

    addToEnvIfPresent(ENV_VARS, "ANDROID_ART_ROOT");
    addToEnvIfPresent(ENV_VARS, "DEX2OATBOOTCLASSPATH");
    addToEnvIfPresent(ENV_VARS, "ANDROID_I18N_ROOT");
    addToEnvIfPresent(ENV_VARS, "ANDROID_RUNTIME_ROOT");
    addToEnvIfPresent(ENV_VARS, "ANDROID_TZDATA_ROOT");
    addToEnvIfPresent(ENV_VARS, "ANDROID_DATA");
    addToEnvIfPresent(ENV_VARS, "ANDROID_ROOT");

    System.setProperty("HOME", ENV_VARS.get("HOME"));
    System.setProperty("PREFIX", ENV_VARS.get("PREFIX"));
    System.setProperty("ANDROID_HOME", ENV_VARS.get("ANDROID_HOME"));
    System.setProperty("ANDROID_SDK_ROOT", ENV_VARS.get("ANDROID_SDK_ROOT"));
    System.setProperty("ANDROID_USER_HOME", ENV_VARS.get("ANDROID_USER_HOME"));
    System.setProperty("JAVA_HOME", ENV_VARS.get("JAVA_HOME"));
    System.setProperty("TMPDIR", ENV_VARS.get("TMPDIR"));
    System.setProperty("LC_ALL", ENV_VARS.get("LC_ALL"));
    System.setProperty("LANG", ENV_VARS.get("LANG"));
    System.setProperty("user.home", ENV_VARS.get("user.home"));
    System.setProperty("SYSROOT", ENV_VARS.get("SYSROOT"));
    System.setProperty("GRADLE_USER_HOME", ENV_VARS.get("GRADLE_USER_HOME"));
    System.setProperty("BUSYBOX", ENV_VARS.get("BUSYBOX"));
    System.setProperty("SHELL", ENV_VARS.get("SHELL"));
    System.setProperty("CONFIG_SHELL", ENV_VARS.get("CONFIG_SHELL"));
    System.setProperty("TERM", ENV_VARS.get("TERM"));
    System.setProperty("PATH", ENV_VARS.get("PATH"));
    System.setProperty("LD_LIBRARY_PATH", ENV_VARS.get("LD_LIBRARY_PATH"));
    return ENV_VARS;
  }

public static void addToEnvIfPresent(Map<String, String> environment, String name) {
    String value = System.getenv(name);
    if (value != null) {
      environment.put(name, value);
      System.setProperty(name, value);
    }
  }

Note I am using same environment variables for terminal and gradle

08-02 10:48:57.660  3116  3258 W ActivityThread: ClassLoader.getResourceAsStream: The class loader returned by Thread.getContextClassLoader() may fail for processes that host multiple applications. You should explicitly specify a context class loader. For example: Thread.setContextClassLoader(getClass().getClassLoader());
08-02 10:48:57.805  3116  3258 W System.err: org.gradle.tooling.GradleConnectionException: Could not execute build using connection to Gradle distribution 'https://services.gradle.org/distributions/gradle-8.2-all.zip'.
08-02 10:48:57.805  3116  3258 W System.err: 	at org.gradle.tooling.internal.consumer.ExceptionTransformer.transform(ExceptionTransformer.java:55)
08-02 10:48:57.805  3116  3258 W System.err: 	at org.gradle.tooling.internal.consumer.ExceptionTransformer.transform(ExceptionTransformer.java:29)
08-02 10:48:57.805  3116  3258 W System.err: 	at org.gradle.tooling.internal.consumer.ResultHandlerAdapter.onFailure(ResultHandlerAdapter.java:43)
08-02 10:48:57.805  3116  3258 W System.err: 	at org.gradle.tooling.internal.consumer.async.DefaultAsyncConsumerActionExecutor$1$1.run(DefaultAsyncConsumerActionExecutor.java:69)
08-02 10:48:57.805  3116  3258 W System.err: 	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
08-02 10:48:57.805  3116  3258 W System.err: 	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
08-02 10:48:57.805  3116  3258 W System.err: 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
08-02 10:48:57.805  3116  3258 W System.err: 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
08-02 10:48:57.806  3116  3258 W System.err: 	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
08-02 10:48:57.806  3116  3258 W System.err: 	at java.lang.Thread.run(Thread.java:919)
08-02 10:48:57.806  3116  3258 W System.err: 	at org.gradle.tooling.internal.consumer.BlockingResultHandler.attachCallerThreadStackTrace(BlockingResultHandler.java:57)
08-02 10:48:57.806  3116  3258 W System.err: 	at org.gradle.tooling.internal.consumer.BlockingResultHandler.getResult(BlockingResultHandler.java:46)
08-02 10:48:57.806  3116  3258 W System.err: 	at org.gradle.tooling.internal.consumer.DefaultBuildLauncher.run(DefaultBuildLauncher.java:83)
08-02 10:48:57.806  3116  3258 W System.err: 	at com.icst.android.appstudio.helper.ProjectCodeBuilder.generateModuleCode(ProjectCodeBuilder.java:260)
08-02 10:48:57.806  3116  3258 W System.err: 	at com.icst.android.appstudio.helper.ProjectCodeBuilder.generateModulesCode(ProjectCodeBuilder.java:96)
08-02 10:48:57.806  3116  3258 W System.err: 	at com.icst.android.appstudio.dialogs.ProjectBuilderDialog.lambda$new$1(ProjectBuilderDialog.java:167)
08-02 10:48:57.806  3116  3258 W System.err: 	at com.icst.android.appstudio.dialogs.ProjectBuilderDialog.$r8$lambda$GAtv4iuQbhQhDGBHN9ZgKhPvAh8(Unknown Source:0)
08-02 10:48:57.806  3116  3258 W System.err: 	at com.icst.android.appstudio.dialogs.ProjectBuilderDialog$$ExternalSyntheticLambda1.run(Unknown Source:6)
08-02 10:48:57.806  3116  3258 W System.err: 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
08-02 10:48:57.806  3116  3258 W System.err: 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
08-02 10:48:57.806  3116  3258 W System.err: 	at java.lang.Thread.run(Thread.java:919)
08-02 10:48:57.807  3116  3258 W System.err: Caused by: java.lang.ExceptionInInitializerError
08-02 10:48:57.807  3116  3258 W System.err: 	at org.gradle.internal.classloader.ClassLoaderUtils.getPlatformClassLoader(ClassLoaderUtils.java:47)
08-02 10:48:57.807  3116  3258 W System.err: 	at org.gradle.internal.classloader.FilteringClassLoader.<clinit>(FilteringClassLoader.java:49)
08-02 10:48:57.807  3116  3258 W System.err: 	at org.gradle.tooling.internal.consumer.loader.DefaultToolingImplementationLoader.createImplementationClassLoader(DefaultToolingImplementationLoader.java:117)
08-02 10:48:57.807  3116  3258 W System.err: 	at org.gradle.tooling.internal.consumer.loader.DefaultToolingImplementationLoader.create(DefaultToolingImplementationLoader.java:74)
08-02 10:48:57.807  3116  3258 W System.err: 	at org.gradle.tooling.internal.consumer.loader.CachingToolingImplementationLoader.create(CachingToolingImplementationLoader.java:45)
08-02 10:48:57.808  3116  3258 W System.err: 	at org.gradle.tooling.internal.consumer.loader.SynchronizedToolingImplementationLoader.create(SynchronizedToolingImplementationLoader.java:44)
08-02 10:48:57.808  3116  3258 W System.err: 	at org.gradle.tooling.internal.consumer.connection.LazyConsumerActionExecutor.onStartAction(LazyConsumerActionExecutor.java:160)
08-02 10:48:57.808  3116  3258 W System.err: 	at org.gradle.tooling.internal.consumer.connection.LazyConsumerActionExecutor.run(LazyConsumerActionExecutor.java:142)
08-02 10:48:57.808  3116  3258 W System.err: 	at org.gradle.tooling.internal.consumer.connection.CancellableConsumerActionExecutor.run(CancellableConsumerActionExecutor.java:45)
08-02 10:48:57.808  3116  3258 W System.err: 	at org.gradle.tooling.internal.consumer.connection.ProgressLoggingConsumerActionExecutor.run(ProgressLoggingConsumerActionExecutor.java:61)
08-02 10:48:57.808  3116  3258 W System.err: 	at org.gradle.tooling.internal.consumer.connection.RethrowingErrorsConsumerActionExecutor.run(RethrowingErrorsConsumerActionExecutor.java:38)
08-02 10:48:57.808  3116  3258 W System.err: 	at org.gradle.tooling.internal.consumer.async.DefaultAsyncConsumerActionExecutor$1$1.run(DefaultAsyncConsumerActionExecutor.java:67)
08-02 10:48:57.808  3116  3258 W System.err: 	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
08-02 10:48:57.808  3116  3258 W System.err: 	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
08-02 10:48:57.808  3116  3258 W System.err: 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
08-02 10:48:57.808  3116  3258 W System.err: 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
08-02 10:48:57.808  3116  3258 W System.err: 	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
08-02 10:48:57.808  3116  3258 W System.err: 	... 1 more
08-02 10:48:57.809  3116  3258 W System.err: Caused by: java.lang.IllegalArgumentException: Could not determine java version from '0'.
08-02 10:48:57.809  3116  3258 W System.err: 	at org.gradle.api.JavaVersion.assertTrue(JavaVersion.java:298)
08-02 10:48:57.809  3116  3258 W System.err: 	at org.gradle.api.JavaVersion.convertToNumber(JavaVersion.java:316)
08-02 10:48:57.809  3116  3258 W System.err: 	at org.gradle.api.JavaVersion.toVersion(JavaVersion.java:147)
08-02 10:48:57.809  3116  3258 W System.err: 	at org.gradle.api.JavaVersion.current(JavaVersion.java:164)
08-02 10:48:57.809  3116  3258 W System.err: 	at org.gradle.internal.classloader.ClassLoaderUtils.<clinit>(ClassLoaderUtils.java:38)
08-02 10:48:57.809  3116  3258 W System.err: 	... 18 more
File projectDir = new File("/storage/emulated/0/.GitHub/AndroidAppStudio");

    ProjectConnection connection =
        GradleConnector.newConnector().forProjectDirectory(projectDir).connect();
    try {
      BuildLauncher build = connection.newBuild();
      build.forTasks(new String[] {"assembleDebug"});
      build.setEnvironmentVariables(EnvironmentUtils.getEnvironment());
      build.addProgressListener(
          new ProgressListener() {

            @Override
            public void statusChanged(ProgressEvent arg0) {
              if (listener != null) {
                listener.onBuildProgressLog(arg0.getDisplayName());
              }
            }
          });
      build.run();
    } catch (GradleConnectionException e) {
      if (listener != null) {
        ProjectCodeBuildException exception = new ProjectCodeBuildException();
        exception.setMessage(e.getMessage());
        listener.onBuildFailed(exception);
      }
      e.printStackTrace();
    } finally {
      connection.close();
    }

08-02 10:48:57.809 3116 3258 W System.err: Caused by: java.lang.IllegalArgumentException: Could not determine java version from ‘0’.

=> Your Java version is bad. It returns "0" from System.getProperty("java.version") and that makes Gradle unhappy.

What to set there?

I tried

ENV_VARS.put("java.version", "17");
System.setProperty("java.version", ENV_VARS.get("java.version"));

And it didn’t worked.

It still display version as 0.

I don’t think you can set that system property effectively.
That would be very strange.
As I said, it is your Java distribution that is misbehaving and should report the proper version.

The jdk is manually installed using cmd line so what can be the fix for it?

I think I am doing some mistakes in that case

I don’t think the installation is the problem. As I said, I think it is broken per-se. I.e. not built properly. The version it reports build 17-internal+0-adhoc..src also suggests that this is something spurious.

If you did not mean you installed it, not you built it from source, then this is not the right place to ask for help. This is a forum about using Gradle, not about building custom JDKs. From the Gradle point of view the JDK has to properly report its version through the system property.

I actually got the problem reason.

Gradle reads java.version property which cannot be modified in amdroid so there is no problem in jdk as well as gradle.

but I am just wondering how AndroidIDE managed to do that?

Yes it does, as I told you already.
And if it is not returning a proper value, it is not a proper JDK and so it is the problem of the JDK.
Besides that imho it is not really a good idea to run Gradle on an Android phone.

but I am just wondering how AndroidIDE managed to do that?

Read their source code?