1

I migrated yesterday to Android Studio 4.0 because I wanted to start playing with Jetpack Compose. After upgrading Gradle and a few other things to actually get builds to work, I'm able to build (Cmd F9) the project successfully (no errors).

But when I try to run (Ctrl R) the project, it runs through the build process with all green success indicators (plus some warnings about unused variables in my functions), then errors out. What could be causing this?

I do not know how to do anything with Gradle besides add dependencies in my build.gradle or follow direct instructions from a website like Google has to upgrade AS in order to use Jetpack Compose. So I have no idea how to put breakpoints in the build process to see what's going on (googling suggests this is actually impossible) or how to track down the issue. Seems like there's something Gradle is expecting to be a JSON {} but is finding JSON [] instead. But the error sure doens't suggest what it could be.

> Task :app:assembleDebug

FAILURE: Build failed with an exception.

* What went wrong:
java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $
> Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226)
    at com.google.gson.Gson.fromJson(Gson.java:927)
    at com.google.gson.Gson.fromJson(Gson.java:865)
    at com.android.build.api.variant.impl.BuiltArtifactsLoaderImpl$Companion.loadFromFile(BuiltArtifactsLoaderImpl.kt:68)
    at com.android.build.gradle.internal.ide.EarlySyncBuildOutput$Companion.loadVersionTwoFile(EarlySyncBuildOutput.kt:109)
    at com.android.build.gradle.internal.ide.EarlySyncBuildOutput$Companion.load(EarlySyncBuildOutput.kt:70)
    at com.android.build.gradle.internal.ide.EarlySyncBuildOutput.load(EarlySyncBuildOutput.kt)
    at com.android.build.gradle.internal.ide.BuildOutputsSupplier.lambda$get$2(BuildOutputsSupplier.java:59)
    at com.google.common.collect.ImmutableList.forEach(ImmutableList.java:405)
    at com.android.build.gradle.internal.ide.BuildOutputsSupplier.get(BuildOutputsSupplier.java:53)
    at com.android.build.gradle.internal.ide.BuildOutputsSupplier.get(BuildOutputsSupplier.java:34)
    at com.android.build.gradle.internal.ide.ModelBuilder.lambda$buildMinimalisticModel$0(ModelBuilder.java:288)
    at com.android.build.gradle.internal.ide.ModelBuilder.buildMinimalisticModel(ModelBuilder.java:297)
    at com.android.build.gradle.internal.ide.ModelBuilder.buildNonParameterizedModels(ModelBuilder.java:238)
    at com.android.build.gradle.internal.ide.ModelBuilder.buildAll(ModelBuilder.java:208)
    at com.android.build.gradle.internal.AppModelBuilder.buildAll(AppModelBuilder.kt:65)
    at org.gradle.tooling.provider.model.internal.DefaultToolingModelBuilderRegistry$BuildOperationWrappingToolingModelBuilder$1$1.create(DefaultToolingModelBuilderRegistry.java:104)
    at org.gradle.api.internal.project.DefaultProjectStateRegistry.withLenientState(DefaultProjectStateRegistry.java:134)
    at org.gradle.tooling.provider.model.internal.DefaultToolingModelBuilderRegistry$BuildOperationWrappingToolingModelBuilder$1.call(DefaultToolingModelBuilderRegistry.java:100)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
    at org.gradle.tooling.provider.model.internal.DefaultToolingModelBuilderRegistry$BuildOperationWrappingToolingModelBuilder.buildAll(DefaultToolingModelBuilderRegistry.java:97)
    at org.gradle.tooling.internal.provider.runner.DefaultBuildController.getModel(DefaultBuildController.java:82)
    at org.gradle.tooling.internal.consumer.connection.InternalBuildActionAdapter$2.getModel(InternalBuildActionAdapter.java:74)
    at org.gradle.tooling.internal.consumer.connection.BuildControllerAdapter.getModel(BuildControllerAdapter.java:62)
    at org.gradle.tooling.internal.consumer.connection.AbstractBuildController.findModel(AbstractBuildController.java:57)
    at org.gradle.tooling.internal.consumer.connection.AbstractBuildController.findModel(AbstractBuildController.java:44)
    at com.android.tools.idea.gradle.run.OutputBuildAction$PostBuildModuleModels.findAndAddModel(OutputBuildAction.java:136)
    at com.android.tools.idea.gradle.run.OutputBuildAction$PostBuildModuleModels.populate(OutputBuildAction.java:116)
    at com.android.tools.idea.gradle.run.OutputBuildAction$PostBuildModuleModels.access$200(OutputBuildAction.java:106)
    at com.android.tools.idea.gradle.run.OutputBuildAction$PostBuildProjectModels.populateModule(OutputBuildAction.java:95)
    at com.android.tools.idea.gradle.run.OutputBuildAction$PostBuildProjectModels.populate(OutputBuildAction.java:80)
    at com.android.tools.idea.gradle.run.OutputBuildAction.execute(OutputBuildAction.java:64)
    at com.android.tools.idea.gradle.run.OutputBuildAction.execute(OutputBuildAction.java:43)
    at org.gradle.tooling.internal.consumer.connection.InternalBuildActionAdapter.execute(InternalBuildActionAdapter.java:77)
    at org.gradle.tooling.internal.provider.runner.ClientProvidedBuildActionRunner$ResultBuildingListener.buildResult(ClientProvidedBuildActionRunner.java:114)
    at org.gradle.tooling.internal.provider.runner.ClientProvidedBuildActionRunner$ResultBuildingListener.buildFinished(ClientProvidedBuildActionRunner.java:106)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
    at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.internal.event.DefaultListenerManager$ListenerDetails.dispatch(DefaultListenerManager.java:382)
    at org.gradle.internal.event.DefaultListenerManager$ListenerDetails.dispatch(DefaultListenerManager.java:364)
    at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:58)
    at org.gradle.internal.event.DefaultListenerManager$EventBroadcast$ListenerDispatch.dispatch(DefaultListenerManager.java:352)
    at org.gradle.internal.event.DefaultListenerManager$EventBroadcast$ListenerDispatch.dispatch(DefaultListenerManager.java:339)
    at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:42)
    at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:231)
    at org.gradle.internal.event.BroadcastDispatch$SingletonDispatch.dispatch(BroadcastDispatch.java:150)
    at org.gradle.internal.event.AbstractBroadcastDispatch.dispatch(AbstractBroadcastDispatch.java:58)
    at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:325)
    at org.gradle.internal.event.BroadcastDispatch$CompositeDispatch.dispatch(BroadcastDispatch.java:235)
    at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:141)
    at org.gradle.internal.event.ListenerBroadcast.dispatch(ListenerBroadcast.java:37)
    at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
    at com.sun.proxy.$Proxy15.buildFinished(Unknown Source)
    at org.gradle.initialization.DefaultGradleLauncher.finishBuild(DefaultGradleLauncher.java:174)
    at org.gradle.initialization.DefaultGradleLauncher.finishBuild(DefaultGradleLauncher.java:117)
    at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:86)
    at org.gradle.internal.invocation.GradleBuildController$3.create(GradleBuildController.java:78)
    at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:189)
    at org.gradle.internal.work.StopShieldingWorkerLeaseService.withLocks(StopShieldingWorkerLeaseService.java:40)
    at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:78)
    at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:57)
    at org.gradle.tooling.internal.provider.runner.ClientProvidedBuildActionRunner.run(ClientProvidedBuildActionRunner.java:55)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.launcher.exec.ChainingBuildActionRunner.run(ChainingBuildActionRunner.java:35)
    at org.gradle.launcher.exec.BuildOutcomeReportingBuildActionRunner.run(BuildOutcomeReportingBuildActionRunner.java:63)
    at org.gradle.tooling.internal.provider.ValidatingBuildActionRunner.run(ValidatingBuildActionRunner.java:32)
    at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:39)
    at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:51)
    at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:45)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:406)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor$1.execute(DefaultBuildOperationExecutor.java:165)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:250)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:158)
    at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:102)
    at org.gradle.internal.operations.DelegatingBuildOperationExecutor.call(DelegatingBuildOperationExecutor.java:36)
    at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:45)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:50)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter$1.transform(InProcessBuildActionExecuter.java:47)
    at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:80)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:47)
    at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:31)
    at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:42)
    at org.gradle.launcher.exec.BuildTreeScopeBuildActionExecuter.execute(BuildTreeScopeBuildActionExecuter.java:28)
    at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:78)
    at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:52)
    at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:60)
    at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:38)
    at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:68)
    at org.gradle.tooling.internal.provider.SessionScopeBuildActionExecuter.execute(SessionScopeBuildActionExecuter.java:38)
    at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:37)
    at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:26)
    at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:43)
    at org.gradle.tooling.internal.provider.ParallelismConfigurationBuildActionExecuter.execute(ParallelismConfigurationBuildActionExecuter.java:29)
    at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:60)
    at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:32)
    at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:55)
    at org.gradle.tooling.internal.provider.SessionFailureReportingActionExecuter.execute(SessionFailureReportingActionExecuter.java:41)
    at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:48)
    at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:32)
    at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:68)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:39)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:27)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.RequestStopIfSingleUsedDaemon.execute(RequestStopIfSingleUsedDaemon.java:35)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:78)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.create(ForwardClientInput.java:75)
    at org.gradle.util.Swapper.swap(Swapper.java:38)
    at org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:75)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.LogAndCheckHealth.execute(LogAndCheckHealth.java:55)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:63)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:82)
    at org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:37)
    at org.gradle.launcher.daemon.server.api.DaemonCommandExecution.proceed(DaemonCommandExecution.java:104)
    at org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:52)
    at org.gradle.launcher.daemon.server.DaemonStateCoordinator$1.run(DaemonStateCoordinator.java:297)
    at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
    at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
    at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
Caused by: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 2 path $
    at com.google.gson.stream.JsonReader.beginObject(JsonReader.java:385)
    at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:215)
    ... 132 more


* Get more help at https://help.gradle.org

BUILD FAILED in 34s
32 actionable tasks: 8 executed, 24 up-to-date
user1713450
  • 1,307
  • 7
  • 18
  • 1
    That looks a bit like https://issuetracker.google.com/issues/146520838 -- if you have not done so, clean and rebuild the project, and see if that helps. – CommonsWare Feb 16 '20 at 19:49
  • Hey someone marked this as duplicate and closed but it is NOT a duplicate. It's NOT EVEN CLOSE. – user1713450 Feb 16 '20 at 20:23
  • It's a certain duplicate, no matter how special you think the question may be; admit it, you not even looked at the other answers, before complaining. This question neither features the code nor the JSON which produces the issue, therefore I could as well as have closed it for this reason; just use JSON in the expected format, problem solved. – Martin Zeitler Feb 16 '20 at 20:24
  • @MartinZeitler I am not using any JSON in my project. This is a Gradle build issue and all the "duplicate issues" are about people trying to parse their JSON they have control over. I'm trying to build a project in which I have written zero JSON. – user1713450 Feb 16 '20 at 20:26
  • I cannot provide any JSON that causes this or code that causes this because there is zero code or JSON in my project that causes this. It's a Gradle build issue with Android Studio. Look at the stack trace. It's entirely the build process over which I have no control. – user1713450 Feb 16 '20 at 20:27
  • 1
    @MartinZeitler: The OP is not the author of the code that is throwing the exception. This is coming from the Android Gradle Plugin, based on the stack trace. Now, I agree that the question would be a bit better with a [mcve], though I am skeptical that it would help drive a solution here. This feels like an issue with canary-edition builds of the IDE and related tools – CommonsWare Feb 16 '20 at 20:28
  • 1
    @user1713450: Another thing you should try, if you have not done so already, is create a new scrap project. Does it build and run OK? If so, then the problem is tied to your existing project (and why cleaning/rebuilding it might help). If even the scrap project fails, then the issue is more with your environment. – CommonsWare Feb 16 '20 at 20:30
  • @CommonsWare The [issue tracker](https://github.com/android/compose-samples/issues/47) explains why this is happening: "Because Compose requires new functionality in Android Studio 4.0 (and Android Gradle Plugin 4.0) to work.". So meanwhile using Android Studio 3.6 is the answer, until this will become a reality. – Martin Zeitler Feb 16 '20 at 20:41
  • @MartinZeitler Using Android Studio 3.6 cannot be the answer. My question specifies I'm trying to use Jetpack Compose. Your link says 4.0 is required. You say "use 3.6 is the answer." Even your own link disagrees with what you say. – user1713450 Feb 16 '20 at 20:46
  • 1
    @CommonsWare I have been able to run now after the clean (although now the VM is throwing `ClassNotFoundException` re Dex, but that's a separate issue), so if you flesh your comment out into an answer, I will mark it correct once the time period has elapsed and I'm able to do so. You were helpful and also actually read my question carefully. – user1713450 Feb 16 '20 at 20:48

1 Answers1

3

Using pre-release versions of Android Studio may cause problems from time to time, particularly for existing projects. On the whole, I try to use the pre-release Studio versions only with projects that I create in those versions, not with existing projects.

However, based on this issue, cleaning and rebuilding the project should have cleared up the issue... and based on your comment, apparently it did.

My interpretation: Something in the existing project build files (e.g., in .idea/) has a URL that points to a JSON document, and that document's structure changed. Cleaning the project switched it to a new URL, pointing to a document whose structure matches what the pre-release Android Gradle Plugin expects.

CommonsWare
  • 986,068
  • 189
  • 2,389
  • 2,491