2014-01-13 5 views
3

Хотите, чтобы быть в зависимости от AAR для моих модульных тестов в проекте Gradle-Android. Я не хочу вручную включать источник внешней библиотеки или двоичные файлы внутри моего проекта (по нескольким причинам).Тесты на Android-устройства Gradle, которые зависят от «aar»

Мы можем зависеть от удаленных файлов AAR, как это в build.gradle:

compile 'com.facebook:facebook-android-sdk:3.6.0:@aar'

Но при использовании Gradle метод испытания, описанный здесь: https://stackoverflow.com/a/16952507/821636Jake Wharton's plugin, не совсем там еще) , пытаясь включить AAR в качестве зависимости для этого метода, как это:

testLocalCompile 'com.facebook:facebook-android-sdk:3.6.0:@aar

не кажется, на самом деле включают ААР в CLA sspath для тестов (выполняется с ./gradlew check), так как я получаю NoClassDefFoundError для классов в ааре. ПРИМЕЧАНИЕ. Когда такие зависимости включены, они работают.

Думаю, что в этой задаче должно быть что-то в этом 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 
} 

ответ

3

Я столкнулся с этой проблемой и нашел решение - включить classes.jar из взорванного пучка (.aar) в создать папку. Я не думаю, что поможет найти ресурсы в зависимостях .aar.

testLocalCompile fileTree(dir: "$project.buildDir/exploded-bundles", include: "**/classes.jar") 

Edit: Поскольку 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") 
+0

Да, предположил, что я могу вручную извлечь lib и включить этот путь, но тогда я делаю что управление зависимостями через файл сборки должно заботиться. Приятно знать, что есть способ взломать его, если необходимо (но потом ресурсы ...) Похоже, что экосистема андроида-град-аар просто еще не существует. –

+0

Я использовал эту строку, по существу, так же, как и в этом аналогичном вопросе, для моего: http://stackoverflow.com/a/24954215/821636 'unitTestCompile fileTree (dir: "$ project.buildDir/intermediates/exploded-aar /" , включают: «**/classes.jar») 'от плагина Android Gradle 0.12.2. Отметьте это как принятое, так как оно превратилось в ответ, который работает до сих пор. –

+0

Любая удача, изменяющая этот метод для работы с ароматами? Когда я добавляю ароматы, testLocal не удается найти _any_ моих классов. –

Смежные вопросы