想要在Gradle-Android项目中能够依赖AAR进行单元测试。我不想在我的项目中手动包含外部库源代码或二进制文件(出于多种原因)。依赖于'aar'的Gradle Android单元测试
我们所用的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
似乎并没有真正包括在CLA的AAR用于测试的sspath(使用./gradlew check
运行),因为我在aar中获得了NoClassDefFoundError
。注意:如果以这种方式包含jar依赖项,它们就可以工作。
因为它不是默认的依赖类型(jar),所以需要添加aar扩展的任务,因此必须考虑这个问题localTest
。
下面是任务从复制的拷贝这样,请回答上面提到的:
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
}
是的,假设我可以手动提取lib并包含这种方式,但是我做了通过构建文件的依赖管理应该照顾的事情。很高兴知道有一种方法可以在需要的时候对其进行破解(但是之后的资源......)看起来像android-gradle-aar生态系统还没有。 –
我使用这一行,本质上,也引用这个类似的问题我的:http://stackoverflow.com/a/24954215/821636'unitTestCompile fileTree(dir:“$ project.buildDir/intermediates/exploded-aar /” ,包括:“**/classes.jar”) '自Android Gradle插件0.12.2开始。将此标记为已被接受,因为它已演变成迄今为止效果最好的答案。 –
任何运气修改此方法与味道?当我添加味道时,testLocal无法找到我的类的_any_。 –