Hier, Google a annoncé qu'Android Studio 3.1 est désormais disponible au téléchargement sur le canal de publication stable. Alors j'ai décidé d'essayer.
Avant cela, mon projet a été construit avec succès, mais après avoir mis à niveau AS avec 3.1
et l'outil de génération Gradle à com.Android.tools.build:gradle:3.1.0
(il a forcé la mise à niveau de Gradle wrapper 4.4), il a échoué avec cette exception donnée:
Java.lang.RuntimeException: com.Android.build.api.transform.TransformException: Java.lang.RuntimeException: Java.lang.RuntimeException: Java.io.IOException: Failed to find byte code for Android/hardware/camera2/CameraManager$TorchCallback
at com.Android.builder.profile.Recorder$Block.handleException(Recorder.Java:55)
at com.Android.builder.profile.ThreadRecorder.record(ThreadRecorder.Java:104)
at com.Android.build.gradle.internal.pipeline.TransformTask.transform(TransformTask.Java:212)
at Sun.reflect.GeneratedMethodAccessor309.invoke(Unknown Source)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
at Java.lang.reflect.Method.invoke(Method.Java:498)
at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.Java:73)
at org.gradle.api.internal.project.taskfactory.IncrementalTaskAction.doExecute(IncrementalTaskAction.Java:46)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.Java:39)
at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.Java:26)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.Java:121)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.Java:336)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.Java:328)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.Java:199)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.Java:110)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.Java:110)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.Java:92)
at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.Java:70)
at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.Java:51)
at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.Java:62)
at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.Java:54)
at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.Java:60)
at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.Java:97)
at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.Java:87)
at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.Java:52)
at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.Java:52)
at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.Java:54)
at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.Java:43)
at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.Java:34)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.Java:248)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.Java:336)
at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.Java:328)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.Java:199)
at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.Java:110)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.Java:241)
at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.Java:230)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.Java:123)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.Java:79)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.Java:104)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.Java:98)
at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.Java:626)
at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.Java:581)
at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.Java:98)
at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.Java:63)
at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.Java:46)
at Java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.Java:1142)
at Java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.Java:617)
at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.Java:55)
at Java.lang.Thread.run(Thread.Java:745)
Caused by: com.Android.build.api.transform.TransformException: Java.lang.RuntimeException: Java.lang.RuntimeException: Java.io.IOException: Failed to find byte code for Android/hardware/camera2/CameraManager$TorchCallback
at com.Android.build.gradle.internal.transforms.InstantRunTransform.doTransform(InstantRunTransform.Java:312)
at com.Android.build.gradle.internal.transforms.InstantRunTransform.transform(InstantRunTransform.Java:178)
at com.Android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.Java:221)
at com.Android.build.gradle.internal.pipeline.TransformTask$2.call(TransformTask.Java:217)
at com.Android.builder.profile.ThreadRecorder.record(ThreadRecorder.Java:102)
... 47 more
Je fais déjà une reconstruction complète ou même File-> Invalidate Caches/Restart..
, mais cela ne fonctionne toujours pas.
Quelqu'un sait comment résoudre ce problème? Je vous remercie.
Il y a un problème , qu’ils s’engagent à résoudre en 3.2. Jusque-là, vous devrez probablement revenir à Android Studio 3.0 si vous ne souhaitez pas désactiver l'exécution instantanée. Pourquoi ils ne veulent pas publier un correctif pour cela, je ne sais pas. Semble être un bug assez important.
Voir:
Je suggère de voter pour le problème, peut-être que cela les incitera à publier le correctif plus tôt.
Comme @Malcolm l'a dit, il s'agit d'un problème lié à Android Studio 3.1.
Si vous ne souhaitez pas rétablir Android Studio 3.1 à 3.0, vous pouvez désactiver l'exécution instantanée.
Si vous ne souhaitez pas rétablir Android Studio 3.1 à la version 3.0 et que vous avez besoin d'Instant Run, vous pouvez éditer build.gradle et gradle-wrapper.properties comme ci-dessous:
com.Android.tools.build:gradle:3.1.0
-> com.Android.tools.build:gradle:3.0.1
distributionUrl = https://services.gradle.org/distributions/gradle-4.4-all.Zip
-> distributionUrl = https://services.gradle.org/distributions/gradle-4.1-all.Zip
Désactiver Instant Run a fonctionné pour moi
Tout d’abord, construisez le menu et nettoyez le projet. Après le nettoyage, reconstruisez le projet.
Si cela ne fonctionne pas, essayez d'ajouter cette ligne dans le fichier Gradle de construction:
defaultConfig {
multiDexEnabled true
}
Pour dépendance:
dependencies
{
compile 'com.Android.support:multidex:1.0.0'
}
J'ai eu le même problème, après avoir désactivé l'exécution instantanée .. L'application se bloquait au moment de l'exécution et a lancé une erreur noClassDefFound
.. Dans mon cas, j'utilisais la fonction forEach
lambda de Java 8 sur Hashmap au lieu de kotlin ..
Un article ici et une question similaire ici décrit ceci . Vous devez utiliser des parenthèses autour de la clé et de la valeur. par exemple:
dataSet.forEach { (header, dataList) -> }
Cela garantira l’utilisation de la fonction kotlin.
Dégrader l’outil de construction Gradle de com.Android.tools.build:gradle:3.1.1
à com.Android.tools.build:gradle:3.0.1
me convient.
si vous obtenez des erreurs inattendues/bizarres/stupides comme celle-ci, c'est probablement
Course instantanée
le désactiver et réessayer
Vous devez essayer de nettoyer et de reconstruire le projet. Si le problème persiste, supprimez le dossier .gradle
de votre projet. Enfin, si aucun ne fonctionne, utilisez File-> Invalidate Caches/Restart..
à partir du menu Android Studio.
Comme @Malcolm l'a dit, le problème est lié à Android Studio 3.1.
Cela se produit toujours sur Android Studio 3.1.2 si j'essaie de fonctionner sur un appareil avec Android 5.1 alors que l'exécution instantanée est activée.
Invalider les caches, effacer/reconstruire le projet n'a pas fonctionné pour moi.
Le problème a été résolu lorsque je suis passé sur un appareil doté d'Android 7.0, mais je pense qu'Android 6.0+ fonctionnerait également. Si vous parvenez à changer d'appareil, essayez-le. Pas besoin de désactiver Instant Run.