Подтвердить что ты не робот

Android Unit Tests - нет такого свойства: bootClasspath

Я пытаюсь выполнить простой тестовый пример для Android после только что объявленной поддержки модульного тестирования - http://tools.android.com/tech-docs/unit-testing-support

После тщательного прохождения пошагового руководства я пытаюсь запустить ./gradlew test. Я получаю эту ошибку:

Execution failed for task ':app:compileDebugGroovy'.
> No such property: bootClasspath for class: com.android.build.gradle.AppPlugin

при использовании com.android.tools.build:gradle:1.1.0-rc1.

Кто-нибудь еще застрял на этом?

4b9b3361

Ответ 1

Проблема в том, что плагин Groovy Android Gradle (для Groovy, работающего на Android) не просто работает с Android-плагином в версии 1.1.0-rcX.

Здесь очень интересный фрагмент кода непосредственно из groovyx.grooid.GroovyAndroidPlugin, версии 0.3.5 (текущий, здесь источник)

    def getRuntimeJars(Project project, plugin) {
    int index
    switch (getAndroidPluginVersion(project)) {
        case ~/0\.9\..*/:
            index = 0
            break
        case ~/0\.10\..*/:
        case ~/0\.11\..*/:
        case ~/0\.12\..*/:
        case ~/0\.13\..*/:
        case ~/0\.14\..*/:
        case ~/1\.0\..*/:
            index = 1
            break
        default:
            index = RUNTIMEJARS_COMPAT.size()-1
    }
    def fun = RUNTIMEJARS_COMPAT[index]
    fun(plugin)
}

и определение RUNTIMEJARS_COMPAT:

private static List RUNTIMEJARS_COMPAT = [
        { it.runtimeJars },
        { it.bootClasspath }
]

Так что API должен был измениться в Android Gradle между 0.9.x и 0.10.0 (да, я знаю - эти разработчики Google меняют все: [). Поэтому давайте взглянем на эту проблему, создав класс в версии Android Plugin 1.0.0:

> javap -cp [path to proper jar] com.android.build.gradle.AppPlugin:

public class com.android.build.gradle.AppPlugin extends com.android.build.gradle.BasePlugin implements org.gradle.api.Plugin<org.gradle.api.Project> {
...
public java.util.List super$2$getBootClasspath();
...

Да! Там нужен метод (исходящий из родительского класса com.android.build.gradle.BasePlugin). Теперь нет ничего подобного в версии 1.1.0-rc3. Что еще, API com.android.build.gradle.AppPlugin полностью изменен, так что это не вопрос простого if(version), чтобы исправить это.

Я предполагаю, что нет плагина Groovy Android Gradle, работающего с Unit Tests (начиная с 1.1.0), пока авторы не обновят плагин.

Подождите потом.

Ответ 2

Эта функция поддержки тестирования является экспериментальной. Тем не менее, возможно, нет быстрого решения вашей проблемы или может быть ошибкой.

Однако я бы углубился в это, прочитав сообщение: В этой строке Execution failed for task ':app:compileDebugGroovy'. упоминается задача, поэтому я бы подумал, что делает эта задача. Полагаю, это поставленная задача. Ошибка заключается в том, что в этой задаче отсутствует свойство > No such property: bootClasspath for class: com.android.build.gradle.AppPlugin

Итак, попробуйте найти эту задачу и убедитесь, что свойство bootClasspath установлено для класса AppPlugin.

Ответ 3

Попробуйте обновить до новой версии (RC3)

dependencies {
    classpath 'com.android.tools.build:gradle:1.1.0-rc3'
    // ..
}

Вы также можете воспользоваться look здесь, чтобы сравнить текущую настройку с рабочим примером.