希望能够在Gradle-Android项目中依赖AAR进行单元测试。我不想手动在项目中包含外部库源或二进制文件(出于多种原因)。
我们可以依赖build.gradle中的远程aar文件:
compile 'com.facebook:facebook-android-sdk:3.6.0:@aar'
但是当使用这里描述的gradle测试方法时:https://stackoverflow.com/a/16952507/821636(因为Jake Wharton's plugin,还没有完全存在),尝试将aar作为该方法的依赖包括:
testLocalCompile 'com.facebook:facebook-android-sdk:3.6.0:@aar
似乎实际上并没有在测试的类路径中包含aar(使用./gradlew check
运行),因为我在aar中得到NoClassDefFoundError
类。注意:当以这种方式包含jar依赖项时,它们可以工作。
认为localTest
任务中必须有一些东西需要添加aar扩展名,因为它不是默认的依赖类型(jar)。
以下是从上面引用的SO答案中复制的任务的副本:
task localTest(type: Test, dependsOn: assembleDebug) {
testClassesDir = sourceSets.testLocal.output.classesDir
workingDir = "${rootProject.projectDir}/app/src/main"
android.sourceSets.main.java.srcDirs.each { dir ->
def buildDir = dir.getAbsolutePath().split('/')
buildDir = (buildDir[0..(buildDir.length - 4)] + ['build', 'classes', 'debug']).join('/')
sourceSets.testLocal.compileClasspath += files(buildDir)
sourceSets.testLocal.runtimeClasspath += files(buildDir)
}
classpath = sourceSets.testLocal.runtimeClasspath
}
答案 0 :(得分:3)
我遇到了这个问题并找到了一个解决方案 - 在build文件夹中包含来自爆炸包(.aar)的classes.jar。我不认为有助于在.aar依赖项中查找资源。
testLocalCompile fileTree(dir: "$project.buildDir/exploded-bundles", include: "**/classes.jar")
修改:由于Android Gradle构建工具 0.9.0 ,因此依赖关系已更改为:
androidTestCompile fileTree(dir: "$project.buildDir/exploded-aar", include: "**/classes.jar")
Android Gradle插件 0.12.2 :
testLocalCompile fileTree(dir: "$project.buildDir/intermediates/exploded-aar/", include:"**/classes.jar")