Поддержка градиента протокола Buffer для Kotlin Android не работает?

У меня есть проект Android в Котлине, где он настроен правильно и работает

В Root build.gradle

classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 

В приложении build.gradle

 apply plugin: 'kotlin-android' // ... implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" 

Все работает хорошо.

Он также поддерживает Protobuf в соответствии с https://github.com/google/protobuf-gradle-plugin

Где в приложении build.gradle есть

 apply plugin: 'com.google.protobuf' // ... protobuf { protoc { // Download from repositories artifact = 'com.google.protobuf:protoc:3.0.0' } plugins { javalite { // The codegen for lite comes as a separate artifact artifact = 'com.google.protobuf:protoc-gen-javalite:3.0.0' } } generateProtoTasks { all().each { task -> task.plugins { javalite { } } } } } sourceSets { main { java { srcDirs += file("${protobuf.generatedFilesBaseDir}/debug/javalite") } } } // ... api 'com.google.protobuf:protobuf-lite:3.0.0' 

Единственное, когда код, который обращается к кодам Protobuf, т.е. кодам в com.elyeproj.proto.* , Находится на Java, все работает хорошо

 package com.elyeproj.myapplication; import com.elyeproj.proto.Card; import com.elyeproj.proto.Heart; import com.elyeproj.proto.Result; import com.elyeproj.proto.Spade; public class MainPresenter { private MainView mainView; public MainPresenter(MainView mainView) { this.mainView = mainView; } public void fetchData() { Card card1 = Card.newBuilder().setHeart(Heart.newBuilder().build()).build(); Card card2 = Card.newBuilder().setSpade(Spade.newBuilder().build()).build(); Result result = Result.newBuilder().addCards(card1).addCards(card2).build(); mainView.showResult(result.toString()); } } 

Тем не менее, при обращении в Котлин

 package com.elyeproj.myapplication import com.elyeproj.proto.Card import com.elyeproj.proto.Heart import com.elyeproj.proto.Result import com.elyeproj.proto.Spade class MainPresenter(private val mainView: MainView) { fun fetchData() { val card1 = Card.newBuilder().setHeart(Heart.newBuilder().build()).build() val card2 = Card.newBuilder().setSpade(Spade.newBuilder().build()).build() val result = Result.newBuilder().addCards(card1).addCards(card2).build() mainView.showResult(result.toString()) } } 

Это приведет к ошибке во время компиляции с сообщением:

 Error:(6, 21) Unresolved reference: proto Error:(11, 21) Unresolved reference: Card Error:(11, 48) Unresolved reference: Heart Error:(12, 48) Unresolved reference: Spade Error:(13, 22) Unresolved reference: Result 

т.е. он не может получить доступ к тем протобуф-кодом (хотя в Android Studio он все равно может получить доступ к коду, например, автозаполнение кода может найти функции).

Похоже, что поддержка Protobuf Gradle и Kotlin не работают. Или я что-то пропустил?

Чтобы проверить это, вы можете получить доступ к коду в https://github.com/elye/issue_android_protobuf_light_java с помощью MainPresentation на Java, который компилируется отлично. Но если конвертирует в Котлин, это приведет к ошибке, как указано выше.

    Существует решение об использовании Kotlin, то есть использовать модуль Kotlin для генерации файла protobuf. Затем в качестве отдельного модуля он может быть использован. Подробнее см. https://medium.com/@elye.project/android-protobuf-in-kotlin-a1c33014a4e2 .

    Intereting Posts
    Java-обработчик аннотации – аннотированные тесты классов классов Kotlin правильное поведение сопрограмм? Kotlin – Возможно ли инициализировать объект-компаньон перед блоком init в классе? Момент не может быть сериализован в соответствующий формат даже с помощью jackson-datatype-jsr310 Компилятор Kotlin всегда сохраняет имена параметров в байт-коде? Неявный возврат из лямбда в Котлине «Нормальный» Котлин и Котлин для андроида отличаются? Android: соскабливание статей с помощью jsoup Регулярное выражение, которое распознает / * … * / note Значок приложения не отображается на устройствах с версией Android больше 4.4.2 Динамически загружать пружину xml config Почему некоторые методы настройки Java автоматически становятся свойствами Kotlin, а некоторые нет? Spring шаблон шаблона сайта fetchObject для PagedList В чем разница между плюсом и плюсом при перегрузке оператора котлин? Разница между типами и val для объекта