我正在构建一个依赖于自定义库的Android应用程序,Gradle只在我使用项目依赖项时才愿意包含我的自定义库,而不是在我使用文件依赖项来包含库的jar文件时。我正在使用API levee 19 SDK构建我的应用程序和库。
来自dependencies
的{{1}}部分失败:
build.gradle
如果我使用上面的dependencies {
compile 'com.android.support:appcompat-v7:+'
compile files('libs/MyLibrary.jar')
}
部分,则MyLibrary.jar中的任何类都不包含在构建apk文件中,通过提取其classes.dex和运行dexdump进行验证。我还验证了所有类都存在于我正在使用的jar文件中。
如果我使用以下dependencies
部分,那么MyLibrary中的所有类都包含在apk文件中:
dependencies
我正在使用Android Studio 0.4.0,Gradle 1.9,我认为Gradle插件是0.7.1。
这里发生了什么?我真的想用API级别18 sdk构建我的应用程序以测试兼容性,但除非我能够将jar文件用于我的库,否则我无法工作。
答案 0 :(得分:3)
好的,这是我的错。我的库的build.gradle配置为只包含jar输出文件中的源文件。以下是不正确的 Gradle代码,会给您带来与我相同的问题。
task jar(type: Jar) {
from android.sourceSets.main.java
}
This answer显示了如何修复jar文件的创建。这很难看,但似乎有用。
答案 1 :(得分:1)
Jar任务不包含最终jar工件中的依赖项。
来自jar任务的Gradle documentation:
jar任务创建一个包含类文件和的JAR文件 该项目的资源。
它假定您为项目构建jar
,因此将在运行时期间提供所有依赖项。与war
相反,其中所有依赖项通常都包含在最终工件中。
如果你需要创建包含依赖项的“fat jar”,那么请查看特定的插件,例如gradle-fatjar-plugin。
答案 2 :(得分:0)
这有点过分,但如果你没有使用Android Studio 0.4.0而你刚刚添加了jar文件,请尝试清理你的项目并从头开始重建。我们已经看到了这个错误:https://code.google.com/p/android/issues/detail?id=63366其中没有清理项目就不包含库,尽管这个bug指的是从Maven下载的依赖项而不是本地jar文件(这可能是也可能不是一个重要的区别)。这已在Android Studio 0.4.0中修复(更具体地说,在Gradle插件0.7.0中)。