Android:覆盖库依赖项中的某个类

时间:2017-08-15 11:45:52

标签: 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:
            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;
    }
}

现在我要做的是通过复制包名和classe nam来替换它。

org.xwalk.core.internal

imports....

class SslUtil {

    public static boolean shouldDenyRequest(int error) {
        //I'll do my custom handling of error
        return false;
    }
}

当我刚刚使用Android Studio运行时,这是可能的,因为IDE会询问我应该使用什么SslUtil。但是由于重复的文件

,我无法生成签名的APK
  

(org.xwalk.core.internal.SslUtil)

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

1 个答案:

答案 0 :(得分:-1)

如果你要覆盖一个类,为什么你希望它与该类在同一个包中。因为它是你个人的压倒一切,所以请把它放在你的包裹里。

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;
    }
}

然后当您想要使用它时,请使用您的包导入一个。您仍然可以继续使用其他旧类方法,并仅使用您覆盖的新方法。