如何解决“未解决的引用:KotlinAndroid中的“android”错误?

fcg9iug3  于 2023-05-27  发布在  Android
关注(0)|答案(1)|浏览(166)

我最近更新了Android Studio到最新版本,在很长一段时间没有编程之后,需要我过去工作过的项目。我遇到了一长串的错误,我通过对gradle文件进行大量更改或安装新的jdk来解决,但我被卡住了。目前,我所有基于片段的活动都在导入指令(import kotlinx.android.synthetic.main.activity_lessonexample.*;未解析的引用:android)。此外,在AndroidManifest中,所有Activity都收到了错误:
enter image description hereenter image description here
我的gradle看起来像这样:
build.gradle(:app)

plugins {
    id 'com.android.application'
    id 'kotlin-android'
}

android {
    compileSdk 33
    namespace 'com.example.namespace'
    defaultConfig {
        applicationId "com.example.ulearnc"
        minSdkVersion 24
        targetSdkVersion 33
        versionCode 1
        versionName "1.0"

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

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    buildFeatures {
        viewBinding true
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = '1.8'
    }

    sourceSets {
        main {
            res {
                srcDirs 'src/main/res', 'src/main/res/2'
            }
        }
    }
}

dependencies {
    implementation('androidx.core:core-ktx:1.10.1') {
        exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk7'
        exclude group: 'org.jetbrains.kotlin', module: 'kotlin-stdlib-jdk8'
    }
    implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.17'
    implementation 'androidx.appcompat:appcompat:1.6.1'

    implementation 'com.google.android.material:material:1.9.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.6.1'
    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'de.hdodenhof:circleimageview:3.1.0'
    //implementation 'com.etebarian:meow-bottom-navigation-java:1.2.0'
     implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0'
    implementation 'com.github.blackfizz:eazegraph:1.2.5l@aar'
    implementation 'com.nineoldandroids:library:2.4.0'

    testImplementation 'junit:junit:4.13.2'
    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}

build.gradle

buildscript {

    ext.kotlin_version = '1.8.10'
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:8.0.2'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}
allprojects {

    repositories {

        google()  // Google's Maven repository
        mavenCentral()  // Maven Central repository
        maven { url 'https://jitpack.io' }
    }

}

task clean(type: Delete) {
    delete rootProject.buildDir
}

settings.gradle

pluginManagement {
    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}


include ':app'
rootProject.name = "uLearnC++"

如果你能帮助我,我将非常感激,即使是一些建议。谢谢你!

wmtdaxz3

wmtdaxz31#

您正在使用旧的 * KotlinAndroid Extensions* 插件中的 synthetic properties,这就是这些导入的来源:

import kotlinx.android.synthetic.main.activity_lessonexample.*

但是这个插件在Kotlin 1.8as per this blog post)中被删除了,因为你使用的是 1.8.10,所以这个插件不仅仅是被弃用了,它已经完全消失了。(我猜这就是为什么你会收到关于android包的警告,如果Android扩展被完全删除的话。
基本上,您必须重新编写应用程序,以便显式定义和分配自动生成的View属性。您可以通过许多findViewById调用来实现这一点,但 View Binding 是推荐的方法,实际上您使用它的方式与合成属性非常相似。只不过不是使用myTextView.text = "hi",而是在某处初始化的 binding 对象上调用它,所以调用看起来像

binding.myTextView.text = "hi"

或者,如果你正在处理一些事情

with(binding) {
    myTextView.text = "hi"
    otherView.doSomething()
}

这与您当前代码的编写方式基本相同,因此将内容 Package 在with(binding)块中可能是一个非常快速的更改。
有一个从synthetics迁移到View Binding on the Android site的方便指南,以及一些关于View Binding here的一般信息。

相关问题