Неразрешенная ссылка на модель представления

#android #android-studio #kotlin #build

Вопрос:

У меня возникли некоторые проблемы с операторами импорта моего класса модели представления. Если я уберу или добавлю одну строку в двух моделях представлений, которая вызывает ошибки, и их зависимости, я смогу успешно выполнить сборку еще раз. Но дает мне «Неразрешенную ссылку» на кучу моих введенных моделей представлений, если я что-нибудь изменю в своих действиях/фрагментах и попытаюсь построить снова без очистки.

Я перепробовал все различные типы конфигураций в своих файлах gradle, но безрезультатно. Я пробовал разные версии Android studio, разные версии Hilt, версии Kotlin. Аннулирование кэша, перезапуск и все остальное. Пожалуйста, кто-нибудь, помогите мне!

Я попытался вставить свою конфигурацию ниже вместе с инструкциями импорта MainActivity и одной из моделей представления, на которые ссылается Неразрешенная ссылка.

Основная Деятельность

 
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity

import androidx.navigation.NavController
import com.fauna.fauna.appointments.AppointmentsViewModel
import com.fauna.fauna.clinic.ClinicViewModel
import com.fauna.fauna.databinding.ActivityMainBinding
import com.fauna.fauna.dischargeNotes.DischargeNotesViewModel
import com.fauna.fauna.vaccinationCards.VaccinationCardsViewModel
import com.fauna.fauna.updateApp.UpdateAppDialogFragment
import com.fauna.fauna.user.UserViewModel
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class MainActivity : AppCompatActivity(), CoroutineScope { 

    private val vaccinationCardsViewModel: VaccinationCardsViewModel by viewModels()

    //Some functionality 
} 
 

Вакцинациякартасвидетель

 

import androidx.lifecycle.viewModelScope
import com.fauna.fauna.fragment.VaccinationCardDetail
import com.fauna.fauna.util.NotificationService
import com.fauna.fauna.util.Result
import com.fauna.fauna.util.SnackBarViewModel
import com.fauna.fauna.util.getSeconds
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.channels.ConflatedBroadcastChannel
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.launch
import javax.inject.Inject

@HiltViewModel
class VaccinationCardsViewModel @Inject constructor(
    private val vaccinationCardsRepository: VaccinationCardsRepository,
    private val notificationService: NotificationService
) : SnackBarViewModel() { //Some functionality} 
 

build.gradle file

 buildscript {
    ext.kotlin_version = '1.5.21'
    ext.apollo_version = '2.5.5'
    ext.hilt_version = '2.37'
    def nav_version = '2.3.2'
    repositories {
        google()
        mavenCentral()

    }
    dependencies {
        classpath "androidx.navigation:navigation-safe-args-gradle-plugin:$nav_version"
        classpath 'com.android.tools.build:gradle:7.0.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath "com.google.dagger:hilt-android-gradle-plugin:$hilt_version"

    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

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

build.gradle app file

     id("com.android.application")
    id("kotlin-android")
    id("com.apollographql.apollo").version("$apollo_version")
    id("androidx.navigation.safeargs.kotlin")
    id("kotlin-kapt")
    id("dagger.hilt.android.plugin")
    id('com.google.gms.google-services')
    id('com.google.firebase.crashlytics')
}

android {
    signingConfigs {
        debugConfig {
            //..omittet..
        }
    }
    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }
    compileSdkVersion 30
    buildToolsVersion "29.0.3"
    defaultConfig {
        applicationId "com.fauna.fauna"
        minSdkVersion 23
        targetSdkVersion 30
        versionCode 15
        versionName "0.8"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
    }

    lintOptions {
        abortOnError false
    }

    buildFeatures {
        viewBinding true
    }
    buildTypes {
        //..Omittet..

    }
    compileOptions {
        // Flag to enable support for the new language APIs
        coreLibraryDesugaringEnabled true
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
    implementation 'androidx.appcompat:appcompat:1.3.1'
    implementation 'androidx.core:core-ktx:1.6.0'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.0'

    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'

    def nav_version = "2.3.5"
    implementation "androidx.navigation:navigation-runtime-ktx:$nav_version"
    implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
    implementation "androidx.navigation:navigation-ui-ktx:$nav_version"

    // Feature module Support
    implementation "androidx.navigation:navigation-dynamic-features-fragment:$nav_version"

    // Testing Navigation
    androidTestImplementation "androidx.navigation:navigation-testing:$nav_version"

    // Jetpack Compose Integration
    implementation "androidx.navigation:navigation-compose:2.4.0-alpha06"
    implementation "androidx.security:security-crypto:1.1.0-alpha03"

    testImplementation 'junit:junit:4.13.1'
    androidTestImplementation 'androidx.test:runner:1.4.0'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'

    //View model
    implementation "androidx.activity:activity-ktx:1.3.1"
    implementation "androidx.fragment:fragment-ktx:1.3.6"

    // Hilt
    implementation "com.google.dagger:hilt-android:$hilt_version"
    kapt "com.google.dagger:hilt-android-compiler:$hilt_version"
}

kapt {
    correctErrorTypes = true
}

hilt {
    enableExperimentalClasspathAggregation = true
}

apollo {
    generateKotlinModels.set(true)
}

beforeEvaluate {
    getApiKey()
}

def getSecretKey(string) {
    def keysFile = file("secret.properties")
    def keysProperties = new Properties()
    keysProperties.load(new FileInputStream(keysFile))
    def key = keysProperties[string]
    println "key: "   key
    return key
}

apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.crashlytics' 
 

Ошибка при построении проекта без очистки:

 Task :app:compileDevKotlin

e: /main/java/com/fauna/fauna/MainActivity.kt: (19, 41): Unresolved reference: VaccinationCardsViewModel

e: /main/java/com/fauna/fauna/MainActivity.kt: (21, 29): Unresolved reference: UserViewModel

e: /main/java/com/fauna/fauna/MainActivity.kt: (47, 44): Unresolved reference: VaccinationCardsViewModel

e: /main/java/com/fauna/fauna/MainActivity.kt: (47, 73): Not enough information to infer type variable VM

e: /main/java/com/fauna/fauna/MainActivity.kt: (47, 73): Property delegate must have a 'getValue(MainActivity, KProperty<*>)' method. None of the following functions is suitable: 
public inline operator fun <T> Lazy<???>.getValue(thisRef: Any?, property: KProperty<*>): ??? defined in kotlin

e: /main/java/com/fauna/fauna/MainActivity.kt: (49, 32): Unresolved reference: UserViewModel

e: /main/java/com/fauna/fauna/MainActivity.kt: (49, 49): Not enough information to infer type variable VM

e: /main/java/com/fauna/fauna/MainActivity.kt: (49, 49): Property delegate must have a 'getValue(MainActivity, KProperty<*>)' method. None of the following functions is suitable: 
public inline operator fun <T> Lazy<???>.getValue(thisRef: Any?, property: KProperty<*>): ??? defined in kotlin

e: /main/java/com/fauna/fauna/MainActivity.kt: (175, 93): Unresolved reference: it
 

Комментарии:

1. Для получения более подробного объяснения того, как решить эту проблему. Я задал вопрос на странице проекта apollo-android с шагами для воспроизведения github.com/apollographql/apollo-android/issues/3306 Прежде чем решить проблему, я создал проблему с кинжалом github.com/google/dagger/issues/2799

Ответ №1:

Привет, ваши версии рукояти могут быть неправильными, у меня были похожие проблемы, и эта последующая настройка сработала для меня, изменив ее на бета-версию 2.34, можете ли вы, пожалуйста, попробовать следующее в приложении build gradle

 //Dagger - Hilt
implementation "com.google.dagger:hilt-android:2.34-beta"
kapt "com.google.dagger:hilt-android-compiler:2.34-beta"

//extra dagger hilt dependecies for view model lifecycle attaching for your reference
implementation "androidx.hilt:hilt-lifecycle-viewmodel:1.0.0-alpha03"
kapt "androidx.hilt:hilt-compiler:1.0.0"
implementation 'androidx.hilt:hilt-navigation-compose:1.0.0-alpha03'
 

а также измените версию min sdk на

   minSdk 24
 

мой плагин kotlin gradle 1.5.10 на уровне проекта (если это поможет)

Комментарии:

1. Я пытался, но до сих пор получаю Неразрешенную Ссылку. Эти зависимости являются довольно старыми версиями, почему вы используете такие старые версии?

2. ну, поскольку я пытался создать приложение с помощью jetpack compose, и все последние зависимости от hilt создавали проблемы, так как JPC также был в бета-версии, моей целью было изучить JPC, чтобы не убедиться, что все мои зависимости актуальны. У меня тоже были все проблемы, с которыми вы сталкиваетесь. Поэтому, прочитав бесчисленное множество форумов, на которых многие комментировали 2.34-бета как лучшую, я решил пойти с ней.

3. Ладно, твое здоровье. Они действительно превзошли самих себя в управлении версиями gradle и hilt. Так трудно понять, какие версии работают вместе в gradle, hilt, viewmodel и Android studio. Спасибо за ответ, в конце концов мне удалось это выяснить, и я добавил ответ с решением.

Ответ №2:

Проблема заключалась в сгенерированных файлах как из файлов Hilt, так и из файлов моей схемы Apollo. У меня был вызванный пакет в моем проекте Android user и подпапка в моем каталоге схемы Apollo User , которая, по-видимому, сбивает с толку Android studio при последующих сборках. Решение состоит в том, чтобы либо удалить вложенные папки в каталоге схемы Apollo, либо назвать пакеты в проекте иначе, чем вложенные папки в каталоге схемы.