Dzisiaj zaktualizowałem moje studio Android od 3.5.3 do 3.6. Teraz nie jestem w stanie wygenerować żadnej klasy powiązania danych. Android studio to samo-generujący plik iml wiążący dane.
Czy ktoś napotkał taki problem?
Gradle wrapper.properties:
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
Plik oceny na poziomie projektu:
dependencies {
classpath 'com.android.tools.build:gradle:3.5.3'
}
Plik oceny na poziomie aplikacji:
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'androidx.navigation.safeargs'
android {
dataBinding {
enabled = true
}
// Using Lambda Expressions
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = "1.8"
}
}
gradle.properties:
kotlin.code.style=official
android.databinding.enableV2=true
kotlin.incremental=true
kapt.incremental.apt=true
Poniżej moja aktywność i pliki XML: Aktywność:
class ActivityMain : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
var binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
}
}
XML:
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<import type="android.view.View" />
<!-- <variable
name="loading"
type="Boolean" />-->
<variable
name="bottomMenu"
type="Boolean" />
<variable
name="clickListener"
type="com.ecom.side_menu.SideMenuClickHandler" />
</data>
<androidx.drawerlayout.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:fitsSystemWindows="false"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include
android:id="@+id/layToolbar"
layout="@layout/layout_toolbar"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.fragment.app.FragmentContainerView
android:id="@+id/splash_host"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@android:color/white"
app:defaultNavHost="true"
app:layout_constraintBottom_toTopOf="@+id/bottomNavigationView"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/layToolbar"
app:navGraph="@navigation/splash_graph" />
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottomNavigationView"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="0dp"
android:layout_marginEnd="0dp"
android:background="@color/colorPrimary"
android:visibility="@{safeUnbox(bottomMenu) ? View.VISIBLE : View.GONE}"
app:itemBackground="@color/colorPrimary"
app:itemIconTint="@android:color/white"
app:itemTextColor="@android:color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:menu="@menu/menu_navigation_dashboard" />
<!-- <include
android:id="@+id/progressLayoutId"
layout="@layout/layout_progress"
android:visibility="@{safeUnbox(loading) ? View.VISIBLE : View.GONE}"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />-->
</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.navigation.NavigationView
android:id="@+id/navigationView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:background="@android:color/white"
android:fitsSystemWindows="true"
android:visibility="visible">
<include
android:id="@+id/customDrawerList"
app:clickListener="@{clickListener}"
layout="@layout/drawer_list" />
</com.google.android.material.navigation.NavigationView>
</androidx.drawerlayout.widget.DrawerLayout>
</layout>
Odpowiedzi:
To mi się też przydarzyło. Klasy powiązań są generowane. Projekt działa dobrze. Tylko Android Studio 3.6.1 (lub podstawowy system kompilacji Gradle, nie obchodzi mnie to) jest wadliwy i nie widzi tych klas.
Jako rozwiązanie pośrednie właśnie zhakowałem zestawy źródłowe (pamiętaj, że warianty kompilacji w poniższym fragmencie są specyficzne dla mojego projektu, musisz go przepisać).
Jak wskazał Steve powyżej: w międzyczasie musimy cierpliwie czekać, aż Google go naprawi ...
EDYTOWAĆ
Właśnie zdałem sobie sprawę, że jest O wiele bardziej wadliwy niż się spodziewałem, układy też są zepsute:
Mam nadzieję, że Google wkrótce naprawi ten bałagan ...
EDYCJA 2
Znowu zdałem sobie sprawę, że Android Studio 3.6 jest jeszcze bardziej wadliwy niż opisano powyżej.
Wykonanie istniejących testów espresso również jest zepsute.
Zdecydowanie odradzam wszystkim przejście na system Android Studio 3.6.
Tymczasem prawdopodobnie powrócimy do wersji Android Studio 3.5.
źródło
Używam android studio 3.6.1 problem rozwiązany po dodaniu
viewBinding.enabled = true
doandroid{
wbuild.gradle
:źródło
Po prostu zaktualizuj wersję Gradle do najnowszej. Iść do:
Plik> Struktura projektu> Wersja stopniowa
I wybierz najnowszą stabilną wersję (obecnie 6.3). Sprawdź także wersję wtyczki Gradle dla Androida, jeśli wskazuje ona również najnowszą wersję.
źródło
W przypadku AndroidStudio 3.6.1 możesz dodać poniższy kod do poziomu aplikacji build.gradle (: app) . Mój problem został rozwiązany przez dodanie tej linii, mam nadzieję, że Ty też.
źródło
Wygląda na to, że w najnowszej bibliotece powiązań danych Androida występuje błąd. Czyszczenie projektu nie działało. Przebudowa projektu nie działała. Unieważnianie pamięci podręcznej i ponowne uruchamianie nie działało.
JEDYNYM rozwiązaniem, które działało dla mnie, było wycofanie wersji powiązania danych z wersji 2 (która jest nowym domyślnym w Android Studio 3.6.1 i nowszym) do wersji 1. Aby to zrobić, nie musisz przywracać WSZYSTKICH Android Studio. Zamiast tego możesz dodać następujący wiersz
gradle.properties
:TLDR; Zastanawiam się, czy Google zdecydowało się całkowicie zmienić sposób, w jaki powinniśmy wykonywać powiązanie danych za pomocą ich najnowszego kompilatora powiązań danych. Nie byłoby zaskoczeniem, gdyby zespół pracował nad dostarczeniem YAS (kolejna składnia). W końcu
DataBindingUtil.inflate<MyClassBindingImpl>
musi to być jeden z najdziwniejszych wzorców użytkowania we wszystkich programach komputerowych, wymagający od kompilatora automatycznego wygenerowania konkretnej implementacji ogólnej klasy powiązania danych PRZED odwołaniem do automatycznie wygenerowanej klasy w kodzie. BTW, właśnie dlategoMake Project
istnieją takie narzędzia . Oczekuję, że niedługo nastąpi całkowity przegląd składni wiązania danych.źródło
miałem ten problem, ponieważ podzieliłem moje układy na kilka katalogów i zdefiniowałem je w stopniach jak poniżej
Umieszczam więc wszystkie układy w głównym katalogu układów i usuwam inne podkatalogi
źródło
Spróbuj ponownie zbudować projekt i sprawdź, czy folder powiązania danych jest dostępny w wygenerowanych plikach
źródło
Też mi się przydarzyło. Wynika to z faktu, że w AS 3.6.0 nie możemy uzyskać dostępu do wiązania z innego modułu, jeśli użyjemy tagu dołączania z Androidem: id . Myślę, że ten błąd pochodzi z IDE, ponieważ mogę pomyślnie uruchomić projekt. Jedyne, co należy zrobić, to poczekać na poprawkę lub po prostu zignorować błąd.
źródło
To mi się też przydarzyło. Właśnie uaktualniłem wersję Graddle do wersji 3.6.0 w pliku build.graddle projektu i teraz znów działa.
źródło
Wydaje się, że zostało to naprawione w Android Studio 3.6.3. Mimo że
pracował dla mnie również zamiast
źródło
3.6.3