Android:重写库依赖项中的某个类

Android:重写库依赖项中的某个类,android,gradle,crosswalk,Android,Gradle,Crosswalk,我在我的项目中将crosswalk用作webview,现在出于某些目的,我想重写一个替换类 原始类 org.xwalk.core.internal imports.... class SslUtil { public static boolean shouldDenyRequest(int error) { switch(error) { case NetError.ERR_CERT_COMMON_NAME_INVALID:

我在我的项目中将crosswalk用作webview,现在出于某些目的,我想重写一个替换类

原始类

org.xwalk.core.internal

imports....

class SslUtil {

    public static boolean shouldDenyRequest(int error) {
        switch(error) {
            case NetError.ERR_CERT_COMMON_NAME_INVALID:
            case NetError.ERR_CERT_DATE_INVALID:
            case NetError.ERR_CERT_AUTHORITY_INVALID:
            case NetError.ERR_CERT_WEAK_SIGNATURE_ALGORITHM:
            case NetError.ERR_CERT_WEAK_KEY:
            case NetError.ERR_CERT_NAME_CONSTRAINT_VIOLATION:
            case NetError.ERR_CERT_VALIDITY_TOO_LONG:
            case NetError.ERR_CERT_CONTAINS_ERRORS:
            case NetError.ERR_CERT_REVOKED:
            case NetError.ERR_CERT_INVALID:
            case NetError.ERR_SSL_WEAK_SERVER_EPHEMERAL_DH_KEY:
            case NetError.ERR_SSL_PINNED_KEY_NOT_IN_CERT_CHAIN:
            return true;
        default:
            break;
        }
        return false;
    }
}
现在我要做的是通过复制包名和类名称来替换它

org.xwalk.core.internal

imports....

class SslUtil {

    public static boolean shouldDenyRequest(int error) {
        //I'll do my custom handling of error
        return false;
    }
}
这在我使用androidstudio运行时是可能的,因为IDE会问我应该使用什么SslUtil。但是,由于文件重复,我将无法生成已签名的APK

(org.xwalk.core.internal.SslUtil)


现在有没有一种方法可以让我从依赖项中排除这个特定的文件,并使用我创建的那个文件?或者这是不可能的?

如果要重写一个类,为什么希望它与该类位于同一个包中。因为这是你个人的首要任务,所以把它放在你的包里

your.own.package.here

imports....

class SslUtilNew extends SslUtil {

    public static boolean shouldDenyRequest(int error) {
        // Call Super if you want to otherwise use your own method
        //I'll do my custom handling of error
        return false;
    }
}

然后当你想使用它时,把它和你的包一起导入。您仍然可以继续使用其他旧类方法,只使用您重写的新类方法。

我刚刚编辑了它,替换而不是重写。:),这个方法是由库(依赖项/crosswalk中的另一个类)而不是我调用的。除了从编译的库中删除该类之外,我认为这里没有太多选项。顺便说一句,请注意,如果您的计划是放松SSL验证(以便无效连接变为有效连接),则您的应用程序可能无法在Play Store和其他应用程序分发渠道上分发。@Commonware是的,我知道这一点,我只是想尝试一下。关于SSL验证,我已经用API>=24(android:networkSecurityConfig)修复了它,但是它与API有问题。一个选项是在Gradle项目中滥用
buildSrc
。它的类加载器具有优先权,因此可以将类库中的类完全替换为正确的包。