2017-08-15 350 views
2

我在我的项目中使用人行横道作为webview,现在我想为某些目的重写替换类。Android:覆盖库依赖项中的某个类

原班

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南来取代它。

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我应该使用。不过,我将无法生成,因为重复的文件

(org.xwalk.core.internal.SslUtil)

现在是有办法,其中我可以排除这种的签署APK某些文件来自我的依赖并使用我创建的文件?或者是不可能的?

+0

将这个类从编译库中剥离出来的缺点,我认为你在这里没有多少选择。顺便说一句,请注意,如果您的计划是放松SSL验证(以便无效连接有效),则您的应用可能无法在Play商店和其他应用分发渠道上发布。 – CommonsWare

+0

@CommonsWare是的,我意识到这一点,我只是想尝试一下。关于SSL验证我已经使用API​​> = 24(android:networkSecurityConfig)修复了它,但是它具有API <= 23的问题,因为android:networkSecurityConfig是在API 24中引入的。 谢谢! – Aaron

回答

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

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

+0

我刚编辑它,*替换*不覆盖。 :),这个方法正在被图书馆(依赖/另一个人行横道)而不是我调用。 – Aaron