设置 Protobuf Android Studio Giraffe

问题描述 投票:0回答:1

我在尝试在 Android Studio 项目中设置 protobuf 时遇到构建错误。

我一直在尝试了解有关 Android 开发中的数据存储的更多信息,目前正在尝试在 Android Studio 中设置原型数据存储(Giraffe 2022.3.1)。尽管我采用了不同的方法,但我的项目无法构建,并且最终会出现不同的错误消息。我找不到很多最近的教程,所以我现在正在关注这个:Setting up Protobuf + Kotlin in Android Studio 2023

我的模块 build.gradle 看起来像这样:

import com.google.protobuf.gradle.*


plugins {
   id("com.android.application")
   id("org.jetbrains.kotlin.android")
   id("com.google.protobuf")
}


android {
   namespace = "com.name.myapplication"
   compileSdk = 34


   defaultConfig {
       applicationId = "com.name.myapplication"
       minSdk = 28
       targetSdk = 34
       versionCode = 1
       versionName = "1.0"


       testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
       vectorDrawables {
           useSupportLibrary = true
       }
   }


   buildTypes {
       release {
           isMinifyEnabled = false
           proguardFiles(
               getDefaultProguardFile("proguard-android-optimize.txt"),
               "proguard-rules.pro"
           )
       }
   }
   compileOptions {
       sourceCompatibility = JavaVersion.VERSION_1_8
       targetCompatibility = JavaVersion.VERSION_1_8
   }
   kotlinOptions {
       jvmTarget = "1.8"
   }
   buildFeatures {
       compose = true
   }
   composeOptions {
       kotlinCompilerExtensionVersion = "1.4.3"
   }
   packaging {
       resources {
           excludes += "/META-INF/{AL2.0,LGPL2.1}"
       }
   }
}


dependencies {


   implementation("androidx.core:core-ktx:1.12.0")
   implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2")
   implementation("androidx.activity:activity-compose:1.8.1")
   implementation(platform("androidx.compose:compose-bom:2023.03.00"))
   implementation("androidx.compose.ui:ui")
   implementation("androidx.compose.ui:ui-graphics")
   implementation("androidx.compose.ui:ui-tooling-preview")
   implementation("androidx.compose.material3:material3")
   testImplementation("junit:junit:4.13.2")
   androidTestImplementation("androidx.test.ext:junit:1.1.5")
   androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
   androidTestImplementation(platform("androidx.compose:compose-bom:2023.03.00"))
   androidTestImplementation("androidx.compose.ui:ui-test-junit4")
   debugImplementation("androidx.compose.ui:ui-tooling")
   debugImplementation("androidx.compose.ui:ui-test-manifest")


   implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.4")
   implementation("com.google.protobuf:protobuf-kotlin:3.21.2")
   implementation("io.grpc:grpc-stub:1.52.0")
   implementation("io.grpc:grpc-protobuf:1.52.0")
   implementation("io.grpc:grpc-okhttp:1.52.0")


   implementation("com.google.protobuf:protobuf-java-util:3.21.7")
   implementation("com.google.protobuf:protobuf-kotlin:3.21.2")
   implementation("io.grpc:grpc-kotlin-stub:1.3.0")
}


protobuf {
   protoc {
       artifact = "com.google.protobuf:protoc:${rootProject.ext["3.21.2"]}"
   }
   plugins {
       id("java") {
           artifact = "io.grpc:protoc-gen-grpc-java:${rootProject.ext["1.47.0"]}"
       }
       id("grpc") {
           artifact = "io.grpc:protoc-gen-grpc-java:${rootProject.ext["1.47.0"]}"
       }
       id("grpckt") {
           artifact = "io.grpc:protoc-gen-grpc-kotlin:${rootProject.ext["1.3.0"]}:jdk8@jar"
       }
   }
   generateProtoTasks {
       all().forEach {
           it.plugins {
               id("java") {
                   option("lite")
               }
               id("grpc") {
                   option("lite")
               }
               id("grpckt") {
                   option("lite")
               }
           }
           it.builtins {
               id("kotlin") {
                   option("lite")
               }
           }
       }
   }
}

我的项目 build.gradle 看起来像这样:

plugins {
   id("com.android.application") version "8.1.4" apply false
   id("org.jetbrains.kotlin.android") version "1.8.10" apply false
   id("com.google.protobuf") version "0.8.15" apply false
}

这是我同步后遇到的错误:

例外是: org.gradle.api.plugins.ExtraPropertiesExtension$UnknownPropertyException:无法在额外属性扩展上获取属性“3.21.2”,因为它不存在。

我尝试过使用不同的版本,但仍然遇到异常。此外,尝试设置 sourceSets 通常会以“main”变为红色并显示消息结束: 表达式“main”不能作为函数调用。找不到函数“invoke()”

我不明白到哪里去解决这个问题。如果这有什么区别的话,我正在使用 Kotlin DSL。谢谢

kotlin android-studio gradle protocol-buffers datastore
1个回答
0
投票

我修好了。事实证明,我需要的只是改变:

id("com.google.protobuf") version "0.8.15" apply false

至:

id("com.google.protobuf") version "0.9.4" apply false

在我的项目级 build.gradle.kts 中,然后一切都从那里开始走下坡路。

© www.soinside.com 2019 - 2024. All rights reserved.