All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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