无法为Android Project添加依赖项

时间:2015-11-20 15:35:23

标签: android android-studio shared-libraries apache-commons

我试图添加' 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次:两次用于调试,两次用于释放。

2 个答案:

答案 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依赖应该足够了,因为你想在你的代码内部包含库。