我试图添加' commons-validator'到基于gradle的Android Studio中我的android项目。我根据自己的需要使用UrlValidator。
所以我在app模块的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
}
并在应用程序标记中使用-manus到AndroidManifest:
<uses-library android:name="org.apache.commons.validator.routines.UrlValidator"
android:required="true"/>
但是在添加之后我的项目无法运行。
错误:任务&#39;:app:dexDebug&#39;执行失败。 com.android.ide.common.process.ProcessException:org.gradle.process.internal.ExecException:Process&#39; command&#39; /Library/Java/JavaVirtualMachines/jdk1.8.0_40.jdk/Contents/Home/箱/ JAVA&#39;&#39;完成非零退出值2
我也得到
警告:依赖性commons-logging:commons-logging:1.2因调试而被忽略,因为它可能与Android提供的内部版本冲突。 如果有问题,请用jarjar重新打包以更改类包
4次:两次用于调试,两次用于释放。
答案 0 :(得分:2)
我认为问题是传递依赖。在研究了我在控制台中写的一些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:{“kind”:“simple”,“text”:“警告:忽略匿名内部类的InnerClasses属性”,“来源”:[{}]} AGPBI:{“kind”:“simple”,“text”:“(org.apache.commons.validator.CreditCardValidator $ 1)没有”,“来源”:[{}]} AGPBI:{“kind”:“simple”,“text”:“关联的EnclosingMethod属性。此类可能由”,“”来源“:[{}]}生成 AGPBI:{“kind”:“simple”,“text”:“编译器没有以现代.class文件格式为目标。推荐的”,“来源”:[{}]} AGPBI:{“kind”:“simple”,“text”:“解决方案是从源代码重新编译类,使用最新的编译器”,“sources”:[{}]} AGPBI:{“kind”:“simple”,“text”:“并且没有指定任何\” - target \“类型选项。忽略”,“来源”:[{}]}的结果 AGPBI:{“kind”:“简单”,“文字”:“此警告是对此课程的反思性操作将不正确”,“来源”:[{}]} AGPBI:{“kind”:“simple”,“text”:“表示不是内部类。”,“来源”:[{}]} AGPBI:{“kind”:“simple”,“text”:“警告:忽略匿名内部类的InnerClasses属性”,“sources”:[{}]} AGPBI:{“kind”:“simple”,“text”:“(org.apache.commons.validator.ValidatorResources $ 1)没有”,“来源”:[{}]} AGPBI:{“kind”:“simple”,“text”:“关联的EnclosingMethod属性。此类可能由”,“”来源“:[{}]}生成 AGPBI:{“kind”:“simple”,“text”:“编译器没有以现代.class文件格式为目标。推荐的”,“来源”:[{}]} AGPBI:{“kind”:“simple”,“text”:“解决方案是从源代码重新编译类,使用最新的编译器”,“sources”:[{}]} AGPBI:{“kind”:“simple”,“text”:“并且没有指定任何\” - target \“类型选项。忽略”,“来源”:[{}]}的结果 AGPBI:{“kind”:“简单”,“文字”:“此警告是对此课程的反思性操作将不正确”,“来源”:[{}]} AGPBI:{“kind”:“simple”,“text”:“表示不是内部类。”,“来源”:[{}]}
答案 1 :(得分:0)
尝试删除<uses-library>
标记。这是因为要求用户在安装您的应用之前安装某个外部库。 gradle依赖应该足够了,因为你想在你的代码内部包含库。