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();
}