Инкрементный компилятор Android Studio 2.2 не может видеть сгенерированные protobuf

Я обновил свою стабильную версию Android Studio до 2.2, и теперь «добавочный компилятор» IDE не может найти ни одного из символов для сгенерированных классов protobuf. Я открываю проект, и он может нормально собрать и развернуть приложение на устройстве. Но когда я открываю файл класса Java, содержащий сгенерированные ссылки protobuf, Android Studio помечает их как ошибки вскоре после открытия файла. Каждый импорт Java сгенерированного прото-класса помечается как «Не удается разрешить символ».

Я впервые заметил это месяц назад на канареечном канале, но не подумайте об этом, потому что я барахтался с другими проблемами protobuf (обновление до 3.0.0 с его разделением javalite). Я забыл об этом до сегодняшнего дня. Работать над проектом по-прежнему можно, просто IDE почти бесполезна, так как думает, что есть ошибки (хотя настоящие компиляторы с этим справляются).

Для справки.

gradle-2.14.1
com.android.tools.build:gradle:2.2.0
com.google.protobuf:protobuf-gradle-plugin:0.8.0
com.google.protobuf:protobuf-lite:3.0.0
com.google.protobuf:protoc:3.0.0
com.google.protobuf:protoc-gen-javalite:3.0.0

И в модулях, содержащих файлы .proto:

protobuf {
    protoc {
        artifact = google_protoc_artifact
    }
    plugins {
        javalite {
            artifact = google_protoc_javalite_artifact
        }
    }
    generateProtoTasks {
        all().each { task ->
            task.builtins {
                remove java
            }
            task.plugins {
                javalite { }
            }
        }
    }
}

person colithium    schedule 21.09.2016    source источник


Ответы (1)


У нас была такая же проблема, и мы узнали следующее:

1) Для того, чтобы идея (студия) увидела ваш исходник, вам нужно ей помочь, добавив в свой модуль плагин идеи:

apply plugin: 'idea'
idea {
    module {
        // Use "${protobuf.generatedFilesBaseDir}/main/javalite" for LITE_RUNTIME protos
        sourceDirs += file("${protobuf.generatedFilesBaseDir}/main/java");
    }
}

2) Еще одна ошибка: Android Studio, похоже, игнорирует любой исходный каталог в build/. Вам нужно переместить сгенерированный каталог за пределы сборки:

protobuf {
    generatedFilesBaseDir = "$projectDir/src/generated"
}

Эти два изменения исправили для нас проблему, возникшую в Android Studio 2.2.

person Jerome    schedule 22.09.2016
comment
Это сделало трюк! Я использую API javalite, поэтому я отметил это в вашем ответе (каталоги разные). - person colithium; 23.09.2016