didi / DRouter

Android Router Framework
Apache License 2.0
743 stars 93 forks source link

希望能添加自定义的 excludePackage #63

Closed LokiQ0713 closed 10 months ago

LokiQ0713 commented 10 months ago

【平台环境】:mac/windows 【Android Studio版本】:Android Studio Giraffe | 2022.3.1 Patch 3 【编译使用Java版本】:jdk11 【kotlin版本】:org.jetbrains.kotlin:kotlin-gradle-plugin:1.8.22 【gradle-plugin版本】:com.android.tools.build:gradle:8.1.2 【gradle-wrapper版本】:gradle-8.0-bin.zip 【drouter版本】:drouter-api:2.4.5 【drouter plugin版本】:drouter-plugin: 1.4.0

if (!TextUtil.excludePackageClassInJar(entry.getName())) {
                        try (InputStream stream = jar.getInputStream(entry)) {
                            String path = "jar:file:" + file.getAbsolutePath() + "!/" + entry.getName();
                            CtClass clz = pool.makeClass(stream);
                            if (classClassify.doClassify(clz)) {
                                cachePathSet.add(path);
                            } else if (useCache) {
                                cachePathSet.remove(path);
                            }
                        } catch (Exception e) {
                            Logger.w("drouter resolve jar class error," +
                                    " jar=" + file.getAbsolutePath() +
                                    " entry=" + entry.getName() +
                                    " exception=" + e.getMessage());
                            throw e;
                        }
                    }
public static boolean excludePackageClass(String name) {
        return  name.startsWith("android.") ||
                name.startsWith("androidx.") ||
                name.startsWith("com.google.") ||
                name.startsWith("org.apache.") ||
                name.startsWith("org.intellij.") ||
                name.startsWith("java.") ||
                name.startsWith("javax.") ||
                name.startsWith("kotlin.");
    }

    public static boolean excludeJarNameFile(String name) {
        return  name.equals("android.jar");
    }

    public static boolean excludePackageClassInJar(String name) {
        return  name.startsWith("android/") ||
                name.startsWith("androidx/") ||
                name.startsWith("com/google/") ||
                name.startsWith("org/apache/") ||
                name.startsWith("org/intellij/") ||
                name.startsWith("java/") ||
                name.startsWith("javax/") ||
                name.startsWith("kotlin/") ||
                name.startsWith("META-INF/");
    }

主要是应对一些特殊的三方库,会在 makeClass/doClassify的时候会报 exception(drouter resolve jar class error),不知道为啥 如果明确知道一些三方 jar 不会和路由表有关系,是否可以添加自定义的 excludePackage,直接跳过这些坑爹的三方库