我正在尝试基于gradle将'commons-validator'添加到我的Android Studio中的android项目中。我根据需要使用UrlValidator。

因此,我在应用程序模块的build.gradle中添加了一个依赖项:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.0.1'
    compile 'commons-validator:commons-validator:1.4.1' // this one
}


并在应用程序标签中对AndroidManifest使用库:

 <uses-library android:name="org.apache.commons.validator.routines.UrlValidator"
        android:required="true"/>


但是添加后,我的项目无法运行。


  错误:任务':app:dexDebug'的执行失败。
  com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:处理'command'/Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/bin/java''完成非零退出值2


我也得到


  警告:依赖项commons-logging:commons-logging:1.2在调试时将被忽略,因为它可能与Android提供的内部版本冲突。
           如有问题,请用jarjar重新包装以更改类包


4次:两次用于调试,两次用于发布。

最佳答案

我认为问题是传递依赖。研究了SO的一些线程之后,我在控制台中写了:

cd app/ #to enter app module folder
../gradlew dependencies


这给了我以下输出:

_debugCompile - ## Internal use, do not manually configure ##
+--- commons-validator:commons-validator:1.4.1
|    +--- commons-beanutils:commons-beanutils:1.8.3
|    |    \--- commons-logging:commons-logging:1.1.1 -> 1.2
|    +--- commons-digester:commons-digester:1.8.1
|    +--- commons-logging:commons-logging:1.2
|    \--- commons-collections:commons-collections:3.2.1


所以我将其添加到build.gradle中:

compile('commons-validator:commons-validator:1.4.1'){
        exclude group: 'commons-logging'
        exclude group: 'commons-collections'
        exclude group: 'commons-digester'
        exclude group: 'commons-beanutils'
}


也有人告诉我们在multiDexEnabled true部分添加defaultConfig,但是在我尝试不使用它的情况下,它仍然有效。

正如@Brucelet所说-从清单中删除了<uses-library>标记。

尽管gradle输出给出了许多AGPBI消息,但它可以正常运行并正常工作:


  AGPBI:{“种类”:“简单”,“文本”:“警告:忽略匿名内部类的InnerClasses属性”,“源”:[{}]}
  AGPBI:{“ kind”:“ simple”,“ text”:“(org.apache.commons.validator.CreditCardValidator $ 1)不附带”,“ sources”:[{}]}
  AGPBI:{“ kind”:“ simple”,“ text”:“关联的EnclosingMethod属性。此类可能是由”,“ sources”:[{}]}产生的
  AGPBI:{“ kind”:“ simple”,“ text”:“未针对现代.class文件格式的编译器。推荐的”,“ sources”:[{}]}
  AGPBI:{“ kind”:“ simple”,“ text”:“解决方案是使用最新的编译器从源代码重新编译类”,“ sources”:[{}]}
  AGPBI:{“ kind”:“ simple”,“ text”:“并且未指定任何\”-target \“类型选项。忽略”,“ sources”:[{}]}的结果
  AGPBI:{“ kind”:“ simple”,“ text”:“此警告是对此类的反射操作将不正确”,“ sources”:[{}]}
  AGPBI:{“ kind”:“ simple”,“ text”:“表明它不是内部类。”,“ sources”:[{}]}
  AGPBI:{“种类”:“简单”,“文本”:“警告:忽略匿名内部类的InnerClasses属性”,“源”:[{}]}
  AGPBI:{“ kind”:“ simple”,“ text”:“(org.apache.commons.validator.ValidatorResources $ 1)并不附带”,“ sources:[{}]}
  AGPBI:{“ kind”:“ simple”,“ text”:“关联的EnclosingMethod属性。此类可能是由”,“ sources”:[{}]}产生的
  AGPBI:{“ kind”:“ simple”,“ text”:“未针对现代.class文件格式的编译器。推荐的”,“ sources”:[{}]}
  AGPBI:{“ kind”:“ simple”,“ text”:“解决方案是使用最新的编译器从源代码重新编译类”,“ sources”:[{}]}
  AGPBI:{“ kind”:“ simple”,“ text”:“并且未指定任何\”-target \“类型选项。忽略”,“ sources”:[{}]}的结果
  AGPBI:{“ kind”:“ simple”,“ text”:“此警告是对此类的反射操作将不正确”,“ sources”:[{}]}
  AGPBI:{“ kind”:“ simple”,“ text”:“表明它不是内部类。”,“ sources”:[{}]}

10-04 19:08