Поддержка Android-плагинов после обновления Android Studio до 3.1.0
Я использую Kotlin и привязывание данных для моего проекта, после недавнего обновления до Android Studio 3.1.0. Я постоянно вижу множество исключений в плагине поддержки Android:
Не удалось инициализировать класс android.databinding.tool.ext.ExtKt java.lang.NoClassDefFoundError: не удалось инициализировать класс android.databinding.tool.ext.ExtKt в файле android.databinding.tool.reflection.ModelClass.getTypeName(ModelClass.java:688 ) в файле android.databinding.tool.reflection.ModelClass.equals(ModelClass.java:694) в файле android.databinding.tool.reflection.ModelClass.findSetter(ModelClass.java:614) в файле android.databinding.tool.reflection.ModelClass. findGetterOrField (ModelClass.java:523) в com.android.tools.idea.lang.databinding.DataBindingXmlReferenceContributor $ 2.getReferencesByElement(DataBindingXmlReferenceContributor.java:196) в com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistryImpl.getReferences(ReferenceProvidersRegistryImpl.java:135) в com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistryImpl.mapNotEmptyReferencesFromProviders(ReferenceProvidersRegistryImpl.java:123) в com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersReg istryImpl.doGetReferencesFromProviders(ReferenceProvidersRegistryImpl.java:102) в com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistry.getReferencesFromProviders(ReferenceProvidersRegistry.java:59) в com.intellij.psi.impl.source.resolve.reference. ReferenceProvidersRegistry.getReferencesFromProviders(ReferenceProvidersRegistry.java:53) в com.android.tools.idea.lang.databinding.DataBindingPsiElement.getReferences(DataBindingPsiElement.java:32) на org.intellij.plugins.intelliLang.references.InjectedReferencesContributor.getInjectedReferences(InjectedReferencesContributor. java: 56) at org.intellij.plugins.intelliLang.references.InjectedReferencesInspection $ 1.visitElement(InjectedReferencesInspection.java:40) в com.intellij.psi.impl.PsiElementBase.accept(PsiElementBase.java:274) в com.android. tools.idea.lang.databinding.psi.impl.PsiDbExprImpl.accept(PsiDbExprImpl.java:43) в com.android.tools.idea.lang.databinding.psi.impl.PsiDbRefExprImpl.accept(PsiDbRefExprImpl.ja va: 42) at com.intellij.codeInspection.InspectionEngine.acceptElements(InspectionEngine.java:82) в com.intellij.codeInspection.InspectionEngine.createVisitorAndAcceptElements(InspectionEngine.java:70) в com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.doInspectInjectedPsi(LocalInspectionsPass.java:750) в com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.lambda $ inspectInjectedPsi $ 6 (LocalInspectionsPass.java:338) в com.intellij.concurrency.ApplierCompleter.execAndForkSubTasks(ApplierCompleter.java:133) at com.intellij.concurrency.ApplierCompleter.tryToExecAllList(ApplierCompleter.java:223) в com.intellij.concurrency.ApplierCompleter.execAndForkSubTasks(ApplierCompleter.java:151) в com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java: 1125) at com.intellij.concurrency.ApplierCompleter.lambda $ wrapInReadActionAndIndicator $ 1 (ApplierCompleter.java:105) на com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun( CoreProgressManager.java:543) на com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:488) на com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:94) at com.intellij.concurrency.ApplierCompleter.wrapInReadActionAndIndicator(ApplierCompleter.java:116) в com.intellij.concurrency.ApplierCompleter.lambda $ вычислять $ 0 (ApplierCompleter.java:96) в com.intellij.openapi.application.impl.ReadMostlyRWLock.executeByImpatientReader( ReadMostlyRWLock.java:143) на com.intellij.openapi.application.impl.ApplicationImpl.executeByImpatientReader(ApplicationImpl.java:229) на com.intellij.concurrency.ApplierCompleter.compute(ApplierCompleter.java:96) на java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:731) в java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289) в java.util.concurrent.ForkJoinPool $ WorkQueue.pollAndExecCC(ForkJoinPool.java:1190) в java. util.concurrent.Fork JoinPool.helpComplete(ForkJoinPool.java:1879) на java.util.concurrent.ForkJoinPool.awaitJoin(ForkJoinPool.java:2045) на java.util.concurrent.ForkJoinTask.doJoin(ForkJoinTask.java:390) на java.util.concurrent.ForkJoinTask.join(ForkJoinTask.java:719) в java.util.concurrent.ForkJoinPool.invoke(ForkJoinPool.java:2616) в com.intellij.concurrency.JobLauncherImpl.invokeConcurrentlyUnderProgress(JobLauncherImpl.java:65) в com.intellij. concurrency.JobLauncher.invokeConcurrentlyUnderProgress(JobLauncher.java:57) в com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.inspectInjectedPsi(LocalInspectionsPass.java:341) в com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.inspect(LocalInspectionsPass. java: 231) at com.intellij.codeInsight.daemon.impl.LocalInspectionsPass.collectInformationWithProgress(LocalInspectionsPass.java:136) в com.intellij.codeInsight.daemon.impl.ProgressableTextEditorHighlightingPass.doCollectInformation(ProgressableTextEditorHighlightingPass.java:83) at com. intellij.codeHighlighting.TextEditorHighlightingPass.collectInformation(TextEditorHighlightingPass.java:70) в com.intellij.codeInsight.daemon.impl.PassExecutorService $ ScheduledPass.lambda $ null $ 1 (PassExecutorService.java:437) в com.intellij.openapi.application.impl.ApplicationImpl.tryRunReadAction(ApplicationImpl.java:1130) в com.intellij.codeInsight.daemon.impl.PassExecutorService $ ScheduledPass.lambda $ doRun $ 2 (PassExecutorService.java:430) в com.intellij.openapi.progress.impl.CoreProgressManager. registerIndicatorAndRun (CoreProgressManager.java:543) в com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:488) на com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:94) at com.intellij.codeInsight.daemon.impl.PassExecutorService $ ScheduledPass.doRun(PassExecutorService.java:429) в com.intellij.codeInsight.daemon.impl.PassExecutorService $ ScheduledPass.lambda $ run $ 0 (PassExecutorSe rvice.java:405) в com.intellij.openapi.application.impl.ReadMostlyRWLock.executeByImpatientReader(ReadMostlyRWLock.java:143) в com.intellij.openapi.application.impl.ApplicationImpl.executeByImpatientReader(ApplicationImpl.java:229) at com.intellij.codeInsight.daemon.impl.PassExecutorService $ ScheduledPass.run(PassExecutorService.java:403) в com.intellij.concurrency.JobLauncherImpl $ VoidForkJoinTask $ 1.exec(JobLauncherImpl.java:170) в java.util.concurrent.ForkJoinTask. doExec (ForkJoinTask.java:289) в java.util.concurrent.ForkJoinPool $ WorkQueue.runTask(ForkJoinPool.java:1056) в java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692) на java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Моя основная сборка.
buildscript {
ext.kotlin_version = '1.2.31'
ext.protobuf_version = '3.0.0'
ext.anko_version='0.10.4'
repositories {
google()
jcenter()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.5'
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
Приложение build.gradle
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'project-report'
android {
compileSdkVersion 27
buildToolsVersion "27.0.3"
defaultConfig {
applicationId "com.myapp"
minSdkVersion 16
targetSdkVersion 27
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
javaCompileOptions {
annotationProcessorOptions {
arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
dataBinding {
enabled = true
}
}
kapt {
useBuildCache = true
mapDiagnosticLocations = true
}
dependencies {
implementation project(':proto')
implementation "android.arch.persistence.room:runtime:1.0.0"
implementation 'com.android.support:recyclerview-v7:27.1.0'
kapt "android.arch.persistence.room:compiler:1.0.0"
kapt "com.android.databinding:compiler:3.1.0"
implementation "android.arch.lifecycle:extensions:1.1.1"
implementation "android.arch.lifecycle:common-java8:1.1.1"
implementation 'com.auth0.android:jwtdecode:1.1.1'
implementation 'com.squareup.okhttp3:okhttp:3.9.1'
// Anko
implementation "org.jetbrains.anko:anko-sdk15:$anko_version"
implementation "org.jetbrains.anko:anko-appcompat-v7:$anko_version"
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'com.android.support:appcompat-v7:27.1.0'
implementation 'com.android.support:design:27.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.0.2'
implementation 'com.android.support:support-v4:27.1.0'
implementation 'com.android.support:support-vector-drawable:27.1.0'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.1'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1'
//noinspection GradleDependency
androidTestImplementation 'org.exparity:hamcrest-date:1.1.0'
}
И gradle.properties
org.gradle.jvmargs=-Xmx2048m
kotlin.incremental.usePreciseJavaTracking=true
android.enableD8=true
android.databinding.enableV2=true
gradle-wrapper.properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
До сих пор я пробовал:
- Недействительный кеш и перезагрузка
- Проект Reimport
- Чистота и переиздание
- Чистая установка без прежних конфигураций + проект реимпорта + дополнительные плагины не установлены
- В gradle.properties комментирует каждую строку одним или всеми из них + отменяет и перезапускает
- Пробовал
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
в градле "на всякий случай"
Ничего не помогло, и ошибки все же появляются почти в каждом файле. Как я вижу, это как-то связано с привязкой и котлин.
Кто-нибудь сталкивался с этой проблемой?
PS
В XML файлах макета несуществующие строковые ресурсы даже не выделены, например, @string/non_existing_title
- просто отображается как допустимый ресурс строки (даже после чистой установки). Хотя я не уверен, связана ли эта проблема с сообщениями об исключениях.
ОБНОВЛЕНИЕ 1
Я заметил, что после Invalidate & restart запускается другое исключение:
com/squareup/javapoet/TypeName
java.lang.NoClassDefFoundError: com/squareup/javapoet/TypeName
at android.databinding.tool.ext.ExtKt.<clinit>(ext.kt:180)
at android.databinding.tool.reflection.ModelClass.getTypeName(ModelClass.java:688)
at android.databinding.tool.reflection.ModelClass.equals(ModelClass.java:694)
at android.databinding.tool.reflection.ModelClass.findSetter(ModelClass.java:614)
at android.databinding.tool.reflection.ModelClass.findGetterOrField(ModelClass.java:523)
....
Caused by: java.lang.ClassNotFoundException: com.squareup.javapoet.TypeName PluginClassLoader[org.jetbrains.android, 10.3.1] [email protected]
at com.intellij.ide.plugins.cl.PluginClassLoader.loadClass(PluginClassLoader.java:63)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 63 more
Я попытался добавить зависимость javapoet, но это исключение все равно бросается один раз после аннулирования. И тогда только Could not initialize class android.databinding.tool.ext.ExtKt
исключает Could not initialize class android.databinding.tool.ext.ExtKt
, как сообщается изначально.
Ответы
Ответ 1
После некоторого колебания я решил перейти на канальный канал и установить Android Studio Canary 10 (импортируя предыдущие настройки), и теперь спецификации:
Android Studio 3.2 Canary 10 Build #AI-181.2784.17.32.4705630, built on April 7, 2018
JRE: 1.8.0_152-release-1136-b01 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o Linux 4.13.0-38-generic
При установке у меня было несколько проблем с kotlin, не найдя много классов; invalidate и restart, clean/rebuild не помогли.
Затем я просто удалил плагин Kotlin из раздела плагинов, и похоже, что после перезагрузки он был восстановлен с оригинальной версией, и с тех пор у меня нет проблем.
Текущая версия плагина Kotlin: Версия: 1.2.31-Studio3.2-1
И, наконец, все работает так, как ожидалось. @Yazazzello, спасибо за отзыв о Android Studio Canary # 10.