Gradle Android单元测试取决于'aar'

时间:2014-01-13 19:31:11

标签: android unit-testing gradle

希望能够在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
}

1 个答案:

答案 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")