Android:重写库依赖项中的某个类
我在我的项目中将crosswalk用作webview,现在出于某些目的,我想重写一个替换类 原始类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:
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
。它的类加载器具有优先权,因此可以将类库中的类完全替换为正确的包。