Как настроить protobuf в многоплатформенном проекте Android/IOS KotlinIOS

Программируем под IOS
Ответить
Anonymous
 Как настроить protobuf в многоплатформенном проекте Android/IOS Kotlin

Сообщение Anonymous »

Первый раз использовал протобу и не смог найти пример, как его подключить к Kotlin Multiplatform. Я создал мультиплатформенный проект Android/IOS с «общим» модулем, где мне нужно использовать protobuf. Структура проекта:
Код в build.gradle Shared.module lvl
build.gradle Shared.Module lvl

Код: Выделить всё

plugins {
kotlin("multiplatform")
id("com.android.library")
id("com.google.protobuf")
}

kotlin {
android()
listOf(
iosX64(),
iosArm64(),
iosSimulatorArm64()
).forEach {
it.binaries.framework {
baseName = "shared"
}
}

sourceSets {
val commonMain by getting {
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
}

}
val commonTest by getting {
dependencies {
implementation(kotlin("test"))
}
}
val androidMain by getting
val androidTest by getting
val iosX64Main by getting
val iosArm64Main by getting
val iosSimulatorArm64Main by getting
val iosMain by creating {
dependsOn(commonMain)
iosX64Main.dependsOn(this)
iosArm64Main.dependsOn(this)
iosSimulatorArm64Main.dependsOn(this)
}
val iosX64Test by getting
val iosArm64Test by getting
val iosSimulatorArm64Test by getting
val iosTest by creating {
dependsOn(commonTest)
iosX64Test.dependsOn(this)
iosArm64Test.dependsOn(this)
iosSimulatorArm64Test.dependsOn(this)
}
}
}

android {
namespace = "com.example.someproject"
compileSdk = 33
defaultConfig {
minSdk = 21
targetSdk = 33
}

protobuf {
protoc {
artifact = ("com.google.protobuf:protoc:3.21.9")
}
generateProtoTasks {
all().forEach { task ->
task.builtins {
java {
//                   option 'lite' //Error - Unresolved reference: option
}
kotlin {
//                    option 'lite' //Error - Unresolved reference: option
}
}
}
}
}
dependencies {
implementation("com.google.protobuf:protobuf-javalite:3.21.9")
}
}
Мой уровень проекта build.gradle:
уровень проекта build.gradle

Код: Выделить всё

buildscript {
dependencies {
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.9.1'
}
}
plugins {
id 'com.android.application' version '7.3.1' apply false
id 'com.android.library' version '7.3.1' apply false
id 'org.jetbrains.kotlin.android' version '1.7.20' apply false
id 'com.google.protobuf' version '0.9.1' apply false
}
Я пытался добавить путь к моим файлам .proto с помощью sourceSets, но получил ошибки:

Код: Выделить всё

android {
namespace = "com.example.someproject"
compileSdk = 33
defaultConfig {
minSdk = 21
targetSdk = 33
}
sourceSets {
main { //Error - Unresolved reference: main
proto { //Error - Unresolved reference: proto
srcDir 'src/main/protobuf' //Error - Unresolved reference: srcDir
}
java {
srcDirs 'build/generated/source/proto/main/java' //Error - Unresolved reference: srcDirs
srcDirs 'build/generated/source/proto/main/kotlin' //Error - Unresolved reference: srcDirs
}
}
}

protobuf {
protoc {
artifact = ("com.google.protobuf:protoc:3.21.9")
}
generateProtoTasks {
all().forEach { task ->
task.builtins {
java {
//                   option 'lite' //Error - Unresolved reference: option
}
kotlin {
//                    option 'lite' //Error - Unresolved reference: option
}
}
}
}
}
dependencies {
implementation("com.google.protobuf:protobuf-javalite:3.21.9")
}
}

Когда я пытаюсь собрать проект без исходных наборов, я не получаю сгенерированные файлы Java/kotlin в пути build/generated/source
И мой вопрос: «Как настроить protobuf в мультиплатформенном проекте Kotlin для Android/IOS?»

Подробнее здесь: https://stackoverflow.com/questions/745 ... rm-project
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»