我在尝试在 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。谢谢
我修好了。事实证明,我需要的只是改变:
id("com.google.protobuf") version "0.8.15" apply false
至:
id("com.google.protobuf") version "0.9.4" apply false
在我的项目级 build.gradle.kts 中,然后一切都从那里开始走下坡路。