-Updated JDK and backup before implementing JVM's ClassLoader

This commit is contained in:
itsaky
2021-07-22 19:40:52 +05:30
commit e5cdf40c2a
511 changed files with 60582 additions and 0 deletions
@@ -0,0 +1,152 @@
package com.itsaky.androidide.utils;
import com.blankj.utilcode.util.FileUtils;
import com.blankj.utilcode.util.ThrowableUtils;
import com.blankj.utilcode.util.ZipUtils;
import com.itsaky.androidide.app.StudioApp;
import com.itsaky.androidide.models.gradle.Artifact;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Collection;
public final class Environment {
public static File HOME;
public static File JAVA_HOME;
public static File ANDROID_HOME;
public static File TMP_DIR;
public static File USRDIR;
public static File LIBDIR;
public static File GRADLE_DIR;
public static File GRADLE_PROPS;
public static File GRADLE_PROPS_DIR;
public static File GRADLE_PLUGIN;
public static File BOOTCLASSPATH;
public static File CACHES_DIR;
public static File AAPT2;
public static File LIBHOOKSO;
public static String ANDROID_SDK_FOLDER_NAME = "android-sdk";
public static String GRADLE_FOLDER_NAME = null;
public static final String JDK_FOLDER_NAME = "jdk";
public static final String JDK_FOLDER_NAME_OLD = "openjdk-11.0.1";
public static final String DEFAULT_GRADLE_FOLDER = "gradle-7.1.1";
public static final String SAMPLE_GRADLE_PROP_CONTENTS = "# Specify global Gradle properties in this file\n# These properties will be applicable for every project you build with Gradle.";
public static List<File> AARS = new ArrayList<>();
private static File getJavaHome() {
File home = new File(HOME, JDK_FOLDER_NAME_OLD);
if(home.exists() && home.isDirectory()) {
FileUtils.rename(home, JDK_FOLDER_NAME);
}
return new File(HOME, JDK_FOLDER_NAME);
}
static {
final StudioApp app = StudioApp.getInstance();
final File files21 = new File(HOME, ".gradle/caches/modules-2/files-2.1");
GRADLE_FOLDER_NAME = app.getPrefManager().getCurrentGradleFolderName();
final File gradleDir = new File(HOME, "gradle-7.1.1");
if(gradleDir != null && gradleDir.exists()) {
GRADLE_FOLDER_NAME = !FileUtils.rename(gradleDir, "gradle") ? GRADLE_FOLDER_NAME : "gradle";
app.getPrefManager().setCurentGradleFolderName(GRADLE_FOLDER_NAME);
}
HOME = app.getRootDir();
JAVA_HOME = getJavaHome();
ANDROID_HOME = new File(HOME, ANDROID_SDK_FOLDER_NAME);
TMP_DIR = mkdirIfNotExits(new File(HOME, "tmp"));
GRADLE_DIR = new File(HOME, GRADLE_FOLDER_NAME);
USRDIR = mkdirIfNotExits(new File(HOME.getParentFile(), "usr"));
LIBDIR = mkdirIfNotExits(new File(USRDIR, "lib"));
LIBHOOKSO = new File(LIBDIR, "libhook.so");
CACHES_DIR = new File(HOME, "ide-caches");
BOOTCLASSPATH = new File("");
AAPT2 = new File(files21, "com.android.tools.build/aapt2/4.0.1-6197926");
GRADLE_PLUGIN = new File(files21, "com.itsaky.androidide/gradle");
GRADLE_PROPS_DIR = new File(HOME, ".gradle");
GRADLE_PROPS = new File(GRADLE_PROPS_DIR, "gradle.properties");
}
public static void updateGradleDir() {
GRADLE_DIR = new File(HOME, GRADLE_FOLDER_NAME);
StudioApp.getInstance().onGradleUpdated();
}
public static File getGradleDir() {
String name = DEFAULT_GRADLE_FOLDER;
if(GRADLE_FOLDER_NAME != null)
name = GRADLE_FOLDER_NAME;
return new File(HOME, name);
}
public static void setBootClasspath(File file) {
BOOTCLASSPATH = new File(file.getAbsolutePath());
}
public static String path(File file) {
return file.getAbsolutePath();
}
public static File destinationForArtifact(Artifact artifact) {
return mkdirIfNotExits(new File(CACHES_DIR, String.format("%s/%s/%s", artifact.group, artifact.name, artifact.version)));
}
public static File mkdirIfNotExits(File in) {
if (!in.exists())
FileUtils.createOrExistsDir(in);
return in;
}
public static File cachedFolderForArtifact(Artifact artifact) {
return new File(HOME, String.format(".gradle/caches/modules-2/files-2.1/%s/%s/%s", artifact.group, artifact.name, artifact.version));
}
public static List<File> findJarForArtifact(final Artifact artifact) {
List<File> result = new ArrayList<>();
if(artifact != null && artifact.isValid()) {
File folder = cachedFolderForArtifact(artifact);
for(File f : folder.listFiles(p1 -> p1.isDirectory())) {
File[] jarsOrAars = f.listFiles(p1 -> p1.isFile() && (p1.getName().endsWith(".jar") || p1.getName().endsWith(".aar")));
if(jarsOrAars != null
&& jarsOrAars.length > 0) {
for(File jarOrAar : jarsOrAars) {
if(jarOrAar.getName().endsWith(".jar")) {
result.add(jarOrAar);
} else if(jarOrAar.getName().endsWith(".aar")) {
result.addAll(extractAar(artifact, jarOrAar));
}
}
}
}
}
return result;
}
private static List<File> extractAar(final Artifact artifact, File aar) {
try {
final File extractedFolder = destinationForArtifact(artifact);
ZipUtils.unzipFile(aar, mkdirIfNotExits(extractedFolder));
AARS.add(extractedFolder);
return FileUtils.listFilesInDirWithFilter(extractedFolder, (p1 -> p1.isFile() && p1.getName().endsWith(".jar")), true);
} catch (Throwable e) {
return null;
}
}
public static class Executables {
public static File GRADLE;
public static File JAVA;
static {
GRADLE = new File(GRADLE_DIR, "bin/gradle");
JAVA = new File(JAVA_HOME, "bin/java");
}
}
}