我正在尝试基于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”:[{}]}