Android Studio中的Base64依赖项问题

Android Studio中的Base64依赖项问题,android,gradle,dependencies,android-studio,Android,Gradle,Dependencies,Android Studio,在我们当前的项目中,我们正在使用Android Studio 0.6.1和Gradle plugin 0.11.+,并且我们遇到了一个与commons codec的依赖性问题。我们正在从本地Artifactory实例中引入一个依赖类,该类包含一个“crypto”服务,该服务使用以下两行代码: byte[] encryptedOutput = cipherFactory.getEncryptCipher().doFinal(plaintext.getBytes()); byte[] encrypt

在我们当前的项目中,我们正在使用Android Studio 0.6.1和Gradle plugin 0.11.+,并且我们遇到了一个与
commons codec
的依赖性问题。我们正在从本地Artifactory实例中引入一个依赖类,该类包含一个“crypto”服务,该服务使用以下两行代码:

byte[] encryptedOutput = cipherFactory.getEncryptCipher().doFinal(plaintext.getBytes());
byte[] encryptedCipherText = Base64.encodeBase64URLSafe(encryptedOutput);
问题是,即使我们在Gradle配置中定义了
commons codec
的特定依赖项,我们也会得到以下异常

java.lang.NoSuchMethodError: org.apache.commons.codec.binary.Base64.encodeBase64URLSafe
起初,我们手动添加了一个对“commons codec:commons codec:1.9”的依赖项,但根据Android Studio,当我深入研究IDE中的代码时,它正在查看1.9中该方法的版本,但当应用程序运行时,我们得到了一个例外。即使将依赖项更改为1.4,它仍然会失败,尽管根据Javadocs,该方法是在该时间可用的。即使完全删除手动依赖项也会导致同样的情况发生

是否有任何方法可以找出running应用程序从何处提取此依赖项?这是我们目前完整的依赖项列表,我无法从这些列表中找到
commons codec

compile files('libs/HockeySDK-3.0.2.jar')
compile files('libs/PushIOManager.jar')
compile 'commons-lang:commons-lang:2.6@jar'
compile 'org.codehaus.jackson:jackson-core-asl:1.9.2@jar'
compile 'org.codehaus.jackson:jackson-mapper-asl:1.9.2@jar'
compile 'com.google.android.gms:play-services:4.4.52'
compile 'com.mcxiaoke.volley:library:1.0.4'
compile 'fr.avianey:facebook-android-api:3.14.1@aar'
compile 'javax.validation:validation-api:1.0.0.GA'
我担心的是,这个类被安卓SDK埋在了某个地方,我们将无法覆盖它以使用允许我们使用库的
commons codec
版本。即使我们可以做到这一点,我担心这样做可能会导致Android本身出现一些根本性问题。我们可以(而且目前确实)将加密服务类的源代码拉到我们的应用程序中,并对其进行调整以使用相应的等效代码,但这意味着任何时候我们对一个或另一个版本进行更改时,我们都必须保持同步

有什么想法吗

更新:在这种特定情况下,似乎有效的方法是扫描Gradle构建文件中的依赖项,一旦找到您要查找的依赖项,就会使用您想要使用的版本进行覆盖。例如:

def versionOverrides = [
    "commons-codec:commons-codec": "1.9",
]

subprojects {
    configurations.all {
        resolutionStrategy.eachDependency { DependencyResolveDetails details ->

            def overrideVersion = versionOverrides[details.requested.group + ":" + details.requested.name]

            if (overrideVersion != null && details.requested.version != overrideVersion) {
                logger.info "Overriding dependency ${details.requested.group}:${details.requested.name} version ${details.requested.version} --> $overrideVersion"
                details.useVersion overrideVersion
            }
        }
    }
}
我担心这个类会被安卓SDK埋在某处 我们将无法覆盖它,无法使用
commons编解码器的版本
这将允许我们使用我们的图书馆

这就是正在发生的事情。
引导类加载器预先加载了Commons编解码器库1.3版中的类


您可以重新打包(重命名类的包/命名空间)Commons编解码器库以避免此冲突。请参阅我的答案以获得更详细的描述。

尝试
gradle dependencies