
com.sunyuan.click.debounce.utils.ClassLoaderHelper Maven / Gradle / Ivy
package com.sunyuan.click.debounce.utils;
import com.android.build.api.transform.DirectoryInput;
import com.android.build.api.transform.JarInput;
import com.android.build.api.transform.TransformInput;
import com.android.build.gradle.AppExtension;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import org.gradle.api.Project;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Collection;
/**
* author : Six
* date : 2021/1/16 001621:47
* desc : 参考Hunter框架
* https://github.com/Leaking/Hunter/blob/master/hunter-transform/src/main/java/com/quinn/hunter/transform/asm/ClassLoaderHelper.java
* version: 1.0
*/
public class ClassLoaderHelper {
public static URLClassLoader getClassLoader(Collection inputs,
Collection referencedInputs,
Project project) throws MalformedURLException {
ImmutableList.Builder urls = new ImmutableList.Builder<>();
String androidJarPath = getAndroidJarPath(project);
File file = new File(androidJarPath);
URL androidJarURL = file.toURI().toURL();
urls.add(androidJarURL);
for (TransformInput totalInputs : Iterables.concat(inputs, referencedInputs)) {
for (DirectoryInput directoryInput : totalInputs.getDirectoryInputs()) {
if (directoryInput.getFile().isDirectory()) {
urls.add(directoryInput.getFile().toURI().toURL());
}
}
for (JarInput jarInput : totalInputs.getJarInputs()) {
if (jarInput.getFile().isFile()) {
urls.add(jarInput.getFile().toURI().toURL());
}
}
}
ImmutableList allUrls = urls.build();
URL[] classLoaderUrls = allUrls.toArray(new URL[0]);
return new URLClassLoader(classLoaderUrls);
}
private static String getAndroidJarPath(Project project) {
AppExtension appExtension = (AppExtension) project.getProperties().get("android");
String sdkDirectory = appExtension.getSdkDirectory().getAbsolutePath();
String compileSdkVersion = appExtension.getCompileSdkVersion();
sdkDirectory = sdkDirectory + File.separator + "platforms" + File.separator;
return sdkDirectory + compileSdkVersion + File.separator + "android.jar";
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy