Official Jetpack Compose samples.

Overview

Jetpack Compose Samples

Jetpack Compose Samples

This repository contains a set of individual Android Studio projects to help you learn about Compose in Android. Each sample demonstrates different use cases, complexity levels and APIs.

For more information, please read the documentation

💻 Requirements

To try out these sample apps, you need to use Android Studio Arctic Fox. You can clone this repository or import the project from Android Studio following the steps here.

🧬 Samples

Project

JetNews

A sample blog post viewer that demonstrates the use of Compose with a typical Material app and real-world architecture.

• Medium complexity
• Varied UI
• Light & dark themes
• Resource loading
• UI Testing

> Browse

Jetnews sample demo

Jetchat

A sample chat app that focuses on UI state patterns and text input.

• Low complexity
• Material Design 3 theme and Material You dynamic color
• Resource loading
• Back button handling
• Integration with Architecture Components: Navigation, Fragments, LiveData, ViewModel
• Animation
• UI Testing

> Browse

Jetchat sample demo

Jetsurvey

A sample survey app that showcases text input, validation and UI state management in Compose.

• Low complexity
TextField and form validation
• Snackbar implementation
• Element reusability and styling
• Various form elements


> Browse

Jetsurvey sample demo

Jetsnack

Jetsnack is a sample snack ordering app built with Compose.

• Medium complexity
• Custom design system
• Custom layouts
• Animation

> Browse

Jetsnack sample demo

Jetcaster

A sample podcast app that features a full-featured, Redux-style architecture and showcases dynamic themes.

• Advanced sample
• Dynamic theming using podcast artwork
• Image fetching
WindowInsets support
• Coroutines
• Local storage with Room

> Browse

Jetcaster sample demo

Rally

A Compose implementation of the Rally Material study, a financial app that focuses on data, charts, reusability and animations.

• Low complexity
• Material theming with a dark-only theme
• Custom layouts and reusable elements
• Charts and tables
• Animations
• Screenshot tests

> Browse

Rally sample demo

Crane

A Compose implementation of the Crane Material study, a travel app that uses Material Design components and Material Theming to create a personalized, on-brand experience.

• Medium complexity
• Draggable UI elements
• Android Views inside Compose
• UI state handling
• UI Tests

> Browse

Crane sample demo

Owl

A Compose implementation of the Owl Material study. The Owl brand uses bold color, shape, and typography to express its brand attributes: energy, daring, and fun.

• Medium complexity
• Material theming & light/dark themes
• Custom layout
• Animation

> Browse

Owl sample demo

🧬 Additional samples

Project

Material Catalog

A catalog of Material Design components and features available in Jetpack Compose. See how to implement them and how they look and behave on real devices.

• Lives in AOSP—always up to date
• Uses the same samples as API reference docs
• Theme picker to change Material Theming values at runtime
• Links to guidelines, docs, source code, and issue tracker

> Get it on Google Play
> Browse on AOSP

Material Catalog sample demo

Sunflower

A gardening app illustrating Android development best practices with Android Jetpack. The compose branch is partially built with Jetpack Compose.

• Compose working in an existing app: including integration with strings, resources, and themes and styles
• Integration with an existing architecture based on Jetpack libraries
CollapsingToolbarLayout behavior implemented manually with Compose
• Showing Snackbars with Compose

> Browse

Sunflower sample demo

Tivi

A work-in-progress TV show tracking Android app, which connects to Trakt.tv.

• Entirely written in Kotlin and uses Kotlin Coroutines throughout
• Uses many of the Architecture Components: Room, Lifecycle, Navigation
• Uses Hilt for dependency injection

> Browse

Tivi sample demo

License

Copyright 2020 The Android Open Source Project

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Comments
  • [Jetnews] TopAppBar doesn't match design spec

    [Jetnews] TopAppBar doesn't match design spec

    Added corrections for the TopAppBar in order to look like the most recent design

    https://github.com/android/compose-samples/issues/459

    Home

    Before image

    After image

    Article

    Before Article header

    After image

    Interests

    Before image

    After image

    cla: yes 
    opened by angeles-bilbao6 17
  • Jetsnack: crash when using navigation bar (going from home to search and going back to home)

    Jetsnack: crash when using navigation bar (going from home to search and going back to home)

    I just tested Jetsnack application and I have a crash when using the navigation bar. (going from home to search and going back to home)

    Java.lang.IllegalArgumentException: LayoutNode@4d37297 children: 0 measureBlocks: androidx.compose.ui.LayoutKt$measureBlocksOf$1@393e433 is not ready. layoutState is NeedsRelayout

    Android Studio 4.2 Preview 7 Android 9

    My stack trace :

    --------- beginning of system
    

    2020-08-28 17:48:37.353 3288-3517/? E/ActivityManager: TouchDown intent received, starting ActiveLaunch 2020-08-28 17:48:37.371 18751-18751/? E/Zygote: isWhitelistProcess - Process is Whitelisted 2020-08-28 17:48:37.373 18751-18751/? E/Zygote: accessInfo : 1 2020-08-28 17:48:37.499 4624-27784/? E/SDHMS:SDHMS_UTIL_IO: e = /sys/class/input_booster/touchkey/time (Permission denied) 2020-08-28 17:48:37.499 4624-27784/? E/SDHMS:SDHMS_UTIL_IO: e = /sys/class/input_booster/touchkey/time (Permission denied) 2020-08-28 17:48:37.501 4624-27784/? E/SDHMS:SDHMS_UTIL_IO: e = /sys/class/input_booster/touchkey/time (Permission denied) 2020-08-28 17:48:37.666 3288-3308/? E/libprocessgroup: Failed to kill process cgroup uid 10430 pid 17199 in 219ms, 1 processes remain 2020-08-28 17:48:37.813 2883-5531/? E/BufferQueueProducer: [com.sec.android.app.launcher/com.sec.android.app.launcher.activities.LauncherActivity[4846]#0] disconnect: not connected (req=1) 2020-08-28 17:48:37.818 3288-4775/? E/WindowManager: win=Window{6ffbc1b u0 com.sec.android.app.launcher/com.sec.android.app.launcher.activities.LauncherActivity} destroySurfaces: appStopped=false win.mWindowRemovalAllowed=false win.mRemoveOnExit=false win.mViewVisibility=8 caller=com.android.server.wm.WindowManagerService.tryStartExitingAnimation:2755 com.android.server.wm.WindowManagerService.relayoutWindow:2453 com.android.server.wm.Session.relayoutForTranslate:302 android.view.IWindowSession$Stub.onTransact:518 com.android.server.wm.Session.onTransact:186 android.os.Binder.execTransact:739 2020-08-28 17:48:39.154 3288-3665/? E/Watchdog: !@Sync 53787 [2020-08-28 17:48:39.154] FD count : 2605 2020-08-28 17:48:39.505 4624-4984/? E/SDHMS:SDHMS_UTIL_IO: e = /sys/class/camera/rear/ssrm_camera_info (No such file or directory) 2020-08-28 17:48:45.735 3288-3361/? E/WindowManager: win=Window{7f6a357 u0 Splash Screen com.example.jetsnack EXITING} destroySurfaces: appStopped=false win.mWindowRemovalAllowed=true win.mRemoveOnExit=true win.mViewVisibility=0 caller=com.android.server.wm.AppWindowToken.destroySurfaces:870 com.android.server.wm.AppWindowToken.destroySurfaces:851 com.android.server.wm.WindowState.onExitAnimationDone:5436 com.android.server.wm.WindowStateAnimator.onAnimationFinished:319 com.android.server.wm.WindowState.onAnimationFinished:5858 com.android.server.wm.-$$Lambda$yVRF8YoeNdTa8GR1wDStVsHu8xM.run:2 com.android.server.wm.SurfaceAnimator.lambda$getFinishedCallback$0:100 2020-08-28 17:48:46.685 9002-10934/? E/Auth: [GoogleAccountDataServiceImpl] getToken() -> BAD_AUTHENTICATION. Account: ELLIDED:1181522219, App: com.android.vending, Service: oauth2:https://www.googleapis.com/auth/googleplay rod: Long live credential not available. at gbz.a(:com.google.android.gms@[email protected] (100306-313409149):19) at gai.a(:com.google.android.gms@[email protected] (100306-313409149):123) at crk.a(:com.google.android.gms@[email protected] (100306-313409149):231) at crk.a(:com.google.android.gms@[email protected] (100306-313409149):111) at fyt.getAuthToken(:com.google.android.gms@[email protected] (100306-313409149):21) at android.accounts.AbstractAccountAuthenticator$Transport.getAuthToken(AbstractAccountAuthenticator.java:247) at android.accounts.IAccountAuthenticator$Stub.onTransact(IAccountAuthenticator.java:114) at android.os.Binder.transact(Binder.java:675) at cte.onTransact(:com.google.android.gms@[email protected] (100306-313409149):2) at android.os.Binder.transact(Binder.java:675) at aaah.onTransact(:com.google.android.gms@[email protected] (100306-313409149):17) at android.os.Binder.execTransact(Binder.java:739) 2020-08-28 17:48:49.547 4624-4984/? E/SDHMS:SDHMS_UTIL_IO: e = /sys/class/camera/rear/ssrm_camera_info (No such file or directory) 2020-08-28 17:48:59.591 4624-4984/? E/SDHMS:SDHMS_UTIL_IO: e = /sys/class/camera/rear/ssrm_camera_info (No such file or directory) 2020-08-28 17:49:01.388 18751-18751/? E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.jetsnack, PID: 18751 java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:504) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964) Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)  Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Method.invoke(Native Method) at androidx.compose.ui.platform.ViewLayer$Companion.updateDisplayList(ViewLayer.kt:259) at androidx.compose.ui.platform.ViewLayer.updateDisplayList(ViewLayer.kt:207) at androidx.compose.ui.platform.AndroidComposeView.dispatchDraw(AndroidComposeView.kt:474) at android.view.View.draw(View.java:21871) at android.view.View.updateDisplayListIfDirty(View.java:20741) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4542) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4514) at android.view.View.updateDisplayListIfDirty(View.java:20696) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4542) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4514) at android.view.View.updateDisplayListIfDirty(View.java:20696) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4542) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4514) at android.view.View.updateDisplayListIfDirty(View.java:20696) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4542) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4514) at android.view.View.updateDisplayListIfDirty(View.java:20696) at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:4542) at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:4514) at android.view.View.updateDisplayListIfDirty(View.java:20696) at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:725) at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:731) at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:840) at android.view.ViewRootImpl.draw(ViewRootImpl.java:3963) at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:3737) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3048) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1911) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8526) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949) at android.view.Choreographer.doCallbacks(Choreographer.java:761) at android.view.Choreographer.doFrame(Choreographer.java:696) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935) at android.os.Handler.handleCallback(Handler.java:873) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:7077) at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:494)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:964)  Caused by: java.lang.IllegalArgumentException: LayoutNode@4d37297 children: 0 measureBlocks: androidx.compose.ui.LayoutKt$measureBlocksOf$1@393e433 is not ready. layoutState is NeedsRelayout at androidx.compose.ui.node.InnerPlaceable.draw(InnerPlaceable.kt:132) at androidx.compose.ui.node.ModifiedLayoutNode.draw(ModifiedLayoutNode.kt:81) at androidx.compose.ui.node.LayerWrapper$layer$1.invoke(Unknown Source:10) at androidx.compose.ui.node.LayerWrapper$layer$1.invoke(Unknown Source:3) at androidx.compose.ui.platform.ViewLayer$dispatchDraw$1$1.invoke(ViewLayer.kt:179) at androidx.compose.ui.platform.ViewLayer$dispatchDraw$1$1.invoke(Unknown Source:0) at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:1668) at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:127) 2020-08-28 17:49:01.389 18751-18751/? E/AndroidRuntime: at androidx.compose.ui.platform.AndroidComposeView.observeLayerModelReads(AndroidComposeView.kt:429) at androidx.compose.ui.platform.ViewLayer.dispatchDraw(ViewLayer.kt:178) at android.view.View.draw(View.java:21871) at android.view.View.updateDisplayListIfDirty(View.java:20741) ... 40 more 2020-08-28 17:49:01.530 3288-3316/? E/WindowManager: RemoteException occurs on reporting focusChanged, w=Window{c82aa0c u0 com.example.jetsnack/com.example.jetsnack.ui.MainActivity EXITING} android.os.DeadObjectException at android.os.BinderProxy.transactNative(Native Method) at android.os.BinderProxy.transact(Binder.java:1145) at android.view.IWindow$Stub$Proxy.windowFocusChanged(IWindow.java:500) at com.android.server.wm.WindowState.reportFocusChangedSerialized(WindowState.java:3950) at com.android.server.wm.WindowManagerService$H.handleMessage(WindowManagerService.java:5472) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:214) at android.os.HandlerThread.run(HandlerThread.java:65) at com.android.server.ServiceThread.run(ServiceThread.java:44) 2020-08-28 17:49:01.532 3288-4118/? E/WindowManager: win=Window{c82aa0c u0 com.example.jetsnack/com.example.jetsnack.ui.MainActivity EXITING} destroySurfaces: appStopped=false win.mWindowRemovalAllowed=true win.mRemoveOnExit=true win.mViewVisibility=0 caller=com.android.server.wm.AppWindowToken.destroySurfaces:870 com.android.server.wm.AppWindowToken.destroySurfaces:851 com.android.server.wm.WindowState.onExitAnimationDone:5436 com.android.server.wm.-$$Lambda$01bPtngJg5AqEoOWfW3rWfV7MH4.accept:2 java.util.ArrayList.forEach:1262 com.android.server.wm.AppWindowToken.onAnimationFinished:2398 com.android.server.wm.AppWindowToken.setVisibility:551 2020-08-28 17:49:01.571 4624-27784/? E/SDHMS:SDHMS_UTIL_IO: e = /sys/class/input_booster/touchkey/time (Permission denied) 2020-08-28 17:49:01.571 4624-27784/? E/SDHMS:SDHMS_UTIL_IO: e = /sys/class/input_booster/touchkey/time (Permission denied) 2020-08-28 17:49:01.573 4624-27784/? E/SDHMS:SDHMS_UTIL_IO: e = /sys/class/input_booster/touchkey/time (Permission denied) 2020-08-28 17:49:01.610 16939-17032/? E/PBSessionCacheImpl: sessionId[74500108481002451] not persisted. 2020-08-28 17:49:01.627 18892-18892/? E/Zygote: isWhitelistProcess - Process is Whitelisted 2020-08-28 17:49:01.629 18892-18892/? E/Zygote: accessInfo : 1 2020-08-28 17:49:01.641 18892-18892/? E/.devicesecurit: Not starting debugger since process cannot load the jdwp agent. 2020-08-28 17:49:01.746 4846-4846/? E/LiveIconManager: createLiveIconBitmap : com.sec.android.app.clockpackage apps size 1 2020-08-28 17:49:08.015 3000-3047/? E/storaged: getDiskStats failed with result NOT_SUPPORTED and size 0 2020-08-28 17:49:09.192 3288-3665/? E/Watchdog: !@Sync 53788 [2020-08-28 17:49:09.192] FD count : 2601 2020-08-28 17:49:09.643 4624-4984/? E/SDHMS:SDHMS_UTIL_IO: e = /sys/class/camera/rear/ssrm_camera_info (No such file or directory) 2020-08-28 17:49:19.680 4624-4984/? E/SDHMS:SDHMS_UTIL_IO: e = /sys/class/camera/rear/ssrm_camera_info (No such file or directory) 2020-08-28 17:49:23.623 18914-18914/? E/Zygote: isWhitelistProcess - Process is Whitelisted 2020-08-28 17:49:23.626 18914-18914/? E/Zygote: accessInfo : 1 2020-08-28 17:49:23.643 18914-18914/? E/ng.storyservic: Not starting debugger since process cannot load the jdwp agent. 2020-08-28 17:49:24.851 18936-18936/? E/Zygote: isWhitelistProcess - Process is Whitelisted 2020-08-28 17:49:24.854 18936-18936/? E/Zygote: accessInfo : 1 2020-08-28 17:49:24.870 18936-18936/? E/ung.faceservic: Not starting debugger since process cannot load the jdwp agent.

    Hope this will help you fix this problem :)

    opened by Neovyse 15
  • [JetNews] List-detail support for main page

    [JetNews] List-detail support for main page

    Adds an initial list-detail support for the main page.

    The overall approach relies on distinguishing between what the user sees as different screens, and what we implement as different navigation routes.

    Navigation-wise, the "home" route is responsible for drawing the list detail screen, as well as the list screen and detail screen on their own (for small devices). Distinguishing between which one to show is now simply a matter of keeping track of whether the user is looking at the list, or a selected article.

    Doing so allows meeting a couple of nice behaviors:

    • We keep track of the user's state (scroll state on the list/detail, as well as which one they were looking at), even while changing which side we are looking at
    • We avoid navigating as a side-effect of a size change
    • We can make size changes reversible (mostly as a consequence of the previous point)

    |List:|Detail:|List and Detail:| |-|-|-| |device-2021-09-02-164232|device-2021-09-02-164126|device-2021-09-02-164044|

    cla: yes 
    opened by alexvanyo 14
  • Improve previews

    Improve previews

    This PR improves previews for composable functions, by:

    1. Providing a name for all previews
    2. Ensuring the correct theme is used by all previews

    Before | After --- | --- image | image

    cla: yes 
    opened by rock3r 12
  • Very slow perfomance

    Very slow perfomance

    I installed JetNews app, it works very very slowly. The worst UX, I have to wait for 7-10 seconds before it navigates to another screen. Please check it.

    opened by NurseyitTursunkulov 12
  • Can't build any Compose project [Gradle Android Plugin]

    Can't build any Compose project [Gradle Android Plugin]

    I am unable to build any compose project, I tried downgrading the gradle plugin version but no other version is supported in this version of android studio.

    Android Studio Arctic Fox | 2020.3.1 Canary 8 Build #AI-203.7148.57.2031.7165533, built on February 23, 2021

    Gradle wrapper version: gradle-6.8.3-all Gradle Android Plugin: 'com.android.tools.build:gradle:7.0.0-alpha08'

    Build file 'C:\Projects\AndroidStudioProjects\TestCompose\app\build.gradle' line: 2
    
    An exception occurred applying plugin request [id: 'com.android.application']
    > Failed to apply plugin 'com.android.internal.application'.
       > java.lang.NoSuchMethodException: java.lang.invoke.MethodHandles.privateLookupIn(java.lang.Class, java.lang.invoke.MethodHandles$Lookup)
    
    * Try:
    Run with --info or --debug option to get more log output. Run with --scan to get full insights.
    
    * Exception is:
    org.gradle.api.plugins.InvalidPluginException: An exception occurred applying plugin request [id: 'com.android.application']
    	at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.exceptionOccurred(DefaultPluginRequestApplicator.java:198)
    	at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.applyPlugin(DefaultPluginRequestApplicator.java:180)
    	at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.lambda$applyPlugins$1(DefaultPluginRequestApplicator.java:125)
    	at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.applyPlugins(DefaultPluginRequestApplicator.java:125)
    	at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.applyPlugins(DefaultPluginRequestApplicator.java:121)
    	at org.gradle.configuration.DefaultScriptPluginFactory$ScriptPluginImpl.apply(DefaultScriptPluginFactory.java:117)
    	at org.gradle.configuration.BuildOperationScriptPlugin$1.run(BuildOperationScriptPlugin.java:65)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
    	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
    	at org.gradle.configuration.BuildOperationScriptPlugin.lambda$apply$0(BuildOperationScriptPlugin.java:62)
    	at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:43)
    	at org.gradle.configuration.BuildOperationScriptPlugin.apply(BuildOperationScriptPlugin.java:62)
    	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.lambda$applyToMutableState$0(DefaultProjectStateRegistry.java:250)
    	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.fromMutableState(DefaultProjectStateRegistry.java:277)
    	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.applyToMutableState(DefaultProjectStateRegistry.java:249)
    	at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:42)
    	at org.gradle.configuration.project.BuildScriptProcessor.execute(BuildScriptProcessor.java:26)
    	at org.gradle.configuration.project.ConfigureActionsProjectEvaluator.evaluate(ConfigureActionsProjectEvaluator.java:35)
    	at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.lambda$run$0(LifecycleProjectEvaluator.java:100)
    	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.lambda$applyToMutableState$0(DefaultProjectStateRegistry.java:250)
    	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.lambda$withProjectLock$3(DefaultProjectStateRegistry.java:310)
    	at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:213)
    	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.withProjectLock(DefaultProjectStateRegistry.java:310)
    	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.fromMutableState(DefaultProjectStateRegistry.java:291)
    	at org.gradle.api.internal.project.DefaultProjectStateRegistry$ProjectStateImpl.applyToMutableState(DefaultProjectStateRegistry.java:249)
    	at org.gradle.configuration.project.LifecycleProjectEvaluator$EvaluateProject.run(LifecycleProjectEvaluator.java:91)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
    	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
    	at org.gradle.configuration.project.LifecycleProjectEvaluator.evaluate(LifecycleProjectEvaluator.java:63)
    	at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:721)
    	at org.gradle.api.internal.project.DefaultProject.evaluate(DefaultProject.java:151)
    	at org.gradle.execution.TaskPathProjectEvaluator.configure(TaskPathProjectEvaluator.java:41)
    	at org.gradle.execution.TaskPathProjectEvaluator.configureHierarchy(TaskPathProjectEvaluator.java:69)
    	at org.gradle.configuration.DefaultProjectsPreparer.prepareProjects(DefaultProjectsPreparer.java:46)
    	at org.gradle.configuration.BuildTreePreparingProjectsPreparer.prepareProjects(BuildTreePreparingProjectsPreparer.java:56)
    	at org.gradle.configuration.BuildOperationFiringProjectsPreparer$ConfigureBuild.run(BuildOperationFiringProjectsPreparer.java:52)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
    	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
    	at org.gradle.configuration.BuildOperationFiringProjectsPreparer.prepareProjects(BuildOperationFiringProjectsPreparer.java:40)
    	at org.gradle.initialization.DefaultGradleLauncher.prepareProjects(DefaultGradleLauncher.java:226)
    	at org.gradle.initialization.DefaultGradleLauncher.doClassicBuildStages(DefaultGradleLauncher.java:163)
    	at org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:148)
    	at org.gradle.initialization.DefaultGradleLauncher.executeTasks(DefaultGradleLauncher.java:124)
    	at org.gradle.internal.invocation.GradleBuildController$1.create(GradleBuildController.java:72)
    	at org.gradle.internal.invocation.GradleBuildController$1.create(GradleBuildController.java:67)
    	at org.gradle.internal.work.DefaultWorkerLeaseService.withLocks(DefaultWorkerLeaseService.java:213)
    	at org.gradle.internal.invocation.GradleBuildController.doBuild(GradleBuildController.java:67)
    	at org.gradle.internal.invocation.GradleBuildController.run(GradleBuildController.java:56)
    	at org.gradle.tooling.internal.provider.runner.AbstractClientProvidedBuildActionRunner.runClientAction(AbstractClientProvidedBuildActionRunner.java:53)
    	at org.gradle.tooling.internal.provider.runner.ClientProvidedPhasedActionRunner.run(ClientProvidedPhasedActionRunner.java:47)
    	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.tooling.internal.provider.FileSystemWatchingBuildActionRunner.run(FileSystemWatchingBuildActionRunner.java:77)
    	at org.gradle.launcher.exec.BuildCompletionNotifyingBuildActionRunner.run(BuildCompletionNotifyingBuildActionRunner.java:41)
    	at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:49)
    	at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner$3.call(RunAsBuildOperationBuildActionRunner.java:44)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
    	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
    	at org.gradle.launcher.exec.RunAsBuildOperationBuildActionRunner.run(RunAsBuildOperationBuildActionRunner.java:44)
    	at org.gradle.launcher.exec.InProcessBuildActionExecuter.lambda$execute$0(InProcessBuildActionExecuter.java:54)
    	at org.gradle.composite.internal.DefaultRootBuildState.run(DefaultRootBuildState.java:86)
    	at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:53)
    	at org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:29)
    	at org.gradle.launcher.exec.BuildTreeScopeLifecycleBuildActionExecuter.lambda$execute$0(BuildTreeScopeLifecycleBuildActionExecuter.java:33)
    	at org.gradle.internal.buildtree.BuildTreeState.run(BuildTreeState.java:49)
    	at org.gradle.launcher.exec.BuildTreeScopeLifecycleBuildActionExecuter.execute(BuildTreeScopeLifecycleBuildActionExecuter.java:32)
    	at org.gradle.launcher.exec.BuildTreeScopeLifecycleBuildActionExecuter.execute(BuildTreeScopeLifecycleBuildActionExecuter.java:27)
    	at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:104)
    	at org.gradle.tooling.internal.provider.ContinuousBuildActionExecuter.execute(ContinuousBuildActionExecuter.java:55)
    	at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:64)
    	at org.gradle.tooling.internal.provider.SubscribableBuildActionExecuter.execute(SubscribableBuildActionExecuter.java:37)
    	at org.gradle.tooling.internal.provider.SessionScopeLifecycleBuildActionExecuter.lambda$execute$0(SessionScopeLifecycleBuildActionExecuter.java:54)
    	at org.gradle.internal.session.BuildSessionState.run(BuildSessionState.java:67)
    	at org.gradle.tooling.internal.provider.SessionScopeLifecycleBuildActionExecuter.execute(SessionScopeLifecycleBuildActionExecuter.java:50)
    	at org.gradle.tooling.internal.provider.SessionScopeLifecycleBuildActionExecuter.execute(SessionScopeLifecycleBuildActionExecuter.java:36)
    	at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:36)
    	at org.gradle.tooling.internal.provider.GradleThreadBuildActionExecuter.execute(GradleThreadBuildActionExecuter.java:25)
    	at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:59)
    	at org.gradle.tooling.internal.provider.StartParamsValidatingActionExecuter.execute(StartParamsValidatingActionExecuter.java:31)
    	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:47)
    	at org.gradle.tooling.internal.provider.SetupLoggingActionExecuter.execute(SetupLoggingActionExecuter.java:31)
    	at org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:65)
    	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:29)
    	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:84)
    	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: org.gradle.api.internal.plugins.PluginApplicationException: Failed to apply plugin 'com.android.internal.application'.
    	at org.gradle.api.internal.plugins.DefaultPluginManager.doApply(DefaultPluginManager.java:163)
    	at org.gradle.api.internal.plugins.DefaultPluginManager.apply(DefaultPluginManager.java:136)
    	at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.applyType(DefaultObjectConfigurationAction.java:160)
    	at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.access$200(DefaultObjectConfigurationAction.java:42)
    	at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction$3.run(DefaultObjectConfigurationAction.java:97)
    	at org.gradle.api.internal.plugins.DefaultObjectConfigurationAction.execute(DefaultObjectConfigurationAction.java:183)
    	at org.gradle.api.internal.project.AbstractPluginAware.apply(AbstractPluginAware.java:49)
    	at com.android.build.gradle.AppPlugin.apply(AppPlugin.kt:28)
    	at com.android.build.gradle.AppPlugin.apply(AppPlugin.kt:24)
    	at org.gradle.api.internal.plugins.ImperativeOnlyPluginTarget.applyImperative(ImperativeOnlyPluginTarget.java:43)
    	at org.gradle.api.internal.plugins.RuleBasedPluginTarget.applyImperative(RuleBasedPluginTarget.java:51)
    	at org.gradle.api.internal.plugins.DefaultPluginManager.addPlugin(DefaultPluginManager.java:177)
    	at org.gradle.api.internal.plugins.DefaultPluginManager.access$100(DefaultPluginManager.java:51)
    	at org.gradle.api.internal.plugins.DefaultPluginManager$AddPluginBuildOperation.run(DefaultPluginManager.java:272)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
    	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
    	at org.gradle.api.internal.plugins.DefaultPluginManager.lambda$doApply$0(DefaultPluginManager.java:157)
    	at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:43)
    	at org.gradle.api.internal.plugins.DefaultPluginManager.doApply(DefaultPluginManager.java:156)
    	at org.gradle.api.internal.plugins.DefaultPluginManager.apply(DefaultPluginManager.java:127)
    	at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.lambda$applyPlugins$0(DefaultPluginRequestApplicator.java:127)
    	at org.gradle.plugin.use.internal.DefaultPluginRequestApplicator.applyPlugin(DefaultPluginRequestApplicator.java:176)
    	... 142 more
    Caused by: org.gradle.internal.operations.BuildOperationInvocationException: java.lang.NoSuchMethodException: java.lang.invoke.MethodHandles.privateLookupIn(java.lang.Class, java.lang.invoke.MethodHandles$Lookup)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.throwAsBuildOperationInvocationException(DefaultBuildOperationRunner.java:188)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.access$100(DefaultBuildOperationRunner.java:24)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:84)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
    	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
    	at org.gradle.api.internal.plugins.DefaultPluginManager.lambda$doApply$0(DefaultPluginManager.java:157)
    	at org.gradle.configuration.internal.DefaultUserCodeApplicationContext.apply(DefaultUserCodeApplicationContext.java:43)
    	at org.gradle.api.internal.plugins.DefaultPluginManager.doApply(DefaultPluginManager.java:156)
    	... 171 more
    Caused by: java.util.concurrent.ExecutionException: java.lang.NoSuchMethodException: java.lang.invoke.MethodHandles.privateLookupIn(java.lang.Class, java.lang.invoke.MethodHandles$Lookup)
    	at com.google.common.util.concurrent.AbstractFuture.getDoneValue(AbstractFuture.java:552)
    	at com.google.common.util.concurrent.AbstractFuture.get(AbstractFuture.java:513)
    	at com.google.common.util.concurrent.AbstractFuture$TrustedFuture.get(AbstractFuture.java:90)
    	at com.google.common.util.concurrent.Uninterruptibles.getUninterruptibly(Uninterruptibles.java:237)
    	at com.google.common.cache.LocalCache$Segment.getAndRecordStats(LocalCache.java:2313)
    	at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2279)
    	at com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2155)
    	at com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2045)
    	at com.google.common.cache.LocalCache.get(LocalCache.java:3953)
    	at com.google.common.cache.LocalCache.getOrLoad(LocalCache.java:3976)
    	at com.google.common.cache.LocalCache$LocalLoadingCache.get(LocalCache.java:4960)
    	at com.android.build.gradle.internal.dsl.decorator.DslDecorator.decorate(DslDecorator.kt:68)
    	at com.android.build.gradle.internal.services.DslServicesImpl.newDecoratedInstance(DslServicesImpl.kt:68)
    	at com.android.build.gradle.internal.plugins.AppPlugin.createExtension(AppPlugin.java:103)
    	at com.android.build.gradle.internal.plugins.BasePlugin.configureExtension(BasePlugin.java:492)
    	at com.android.build.gradle.internal.profile.NoOpAnalyticsConfiguratorService.recordBlock(NoOpAnalyticsConfiguratorService.kt:48)
    	at com.android.build.gradle.internal.plugins.BasePlugin.basePluginApply(BasePlugin.java:336)
    	at com.android.build.gradle.internal.plugins.BasePlugin.lambda$apply$0(BasePlugin.java:264)
    	at com.android.build.gradle.internal.crash.CrashReporting.runAction(crash_reporting.kt:27)
    	at com.android.build.gradle.internal.plugins.BasePlugin.apply(BasePlugin.java:262)
    	at com.android.build.gradle.internal.plugins.BasePlugin.apply(BasePlugin.java:147)
    	at org.gradle.api.internal.plugins.ImperativeOnlyPluginTarget.applyImperative(ImperativeOnlyPluginTarget.java:43)
    	at org.gradle.api.internal.plugins.RuleBasedPluginTarget.applyImperative(RuleBasedPluginTarget.java:51)
    	at org.gradle.api.internal.plugins.DefaultPluginManager.addPlugin(DefaultPluginManager.java:177)
    	at org.gradle.api.internal.plugins.DefaultPluginManager.access$100(DefaultPluginManager.java:51)
    	at org.gradle.api.internal.plugins.DefaultPluginManager$AddPluginBuildOperation.run(DefaultPluginManager.java:272)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
    	... 181 more
    Caused by: java.lang.NoSuchMethodException: java.lang.invoke.MethodHandles.privateLookupIn(java.lang.Class, java.lang.invoke.MethodHandles$Lookup)
    	at com.android.build.gradle.internal.dsl.decorator.DslDecorator$Companion$privateLookupInMethod$2.invoke(DslDecorator.kt:430)
    	at com.android.build.gradle.internal.dsl.decorator.DslDecorator$Companion$privateLookupInMethod$2.invoke(DslDecorator.kt:429)
    	at kotlin.SafePublicationLazyImpl.getValue(LazyJVM.kt:107)
    	at com.android.build.gradle.internal.dsl.decorator.DslDecorator$Companion.getPrivateLookupInMethod(DslDecorator.kt:429)
    	at com.android.build.gradle.internal.dsl.decorator.DslDecorator$Companion.access$getPrivateLookupInMethod(DslDecorator.kt:416)
    	at com.android.build.gradle.internal.dsl.decorator.DslDecorator.lookupDefineClass(DslDecorator.kt:278)
    	at com.android.build.gradle.internal.dsl.decorator.DslDecorator.decorateDslClassImpl$gradle_core(DslDecorator.kt:162)
    	at com.android.build.gradle.internal.dsl.decorator.DslDecorator$cache$1.load(DslDecorator.kt:54)
    	at com.android.build.gradle.internal.dsl.decorator.DslDecorator$cache$1.load(DslDecorator.kt:50)
    	at com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3529)
    	at com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2278)
    	... 204 more
    
    opened by forntoh 10
  • [Jetchat] Rename JetchatScaffold

    [Jetchat] Rename JetchatScaffold

    Renamed JetchatDrawer to JetchatContainer in JetchatScaffold. So I renamed the JetchatDrawer file to JetchatContainer file and In the JetchatConatiner file, all the Drawer to the Container

    Renamed : main_drawer.xml -> main_container.xml

    opened by Min-Jae-Bae 9
  • Cannot import project in Android Studio

    Cannot import project in Android Studio

    Hi!

    I am following the import instructions here: https://developer.android.com/jetpack/compose/setup#sample but get the following error in Android Studio (posted in the Kotlin-slack): https://kotlinlang.slack.com/archives/CJLTWPH7S/p1572702912308100

    When pressing finish I get a dialog saying "Failed to find any projects in Git repository". Copying and opening the URL leads to the correct repo, and cloning and opening the repo in AS works fine. Others are also getting this error.

    opened by Dambakk 9
  • Use ImageLoaderFactory to create the singleton ImageLoader.

    Use ImageLoaderFactory to create the singleton ImageLoader.

    Removes ProvideImageLoader and implements ImageLoaderFactory in the Crane and Owl apps. This has a couple benefits:

    • We only create one ImageLoader which is shared for every rememberImagePainter call. Each ImageLoader has its own memory cache, OkHttpClient, network observer, so it's cheaper to only create one.
    • ImageLoaderFactory creates the ImageLoader lazily the first time rememberImagePainter is called.
    • LocalImageLoader provides ImageLoader(context) sets LocalImageLoader.current for any child composables, however it doesn't set the singleton ImageLoader in the Coil object. If you call LocalContext.current.imageLoader elsewhere in the app, it'll return the singleton ImageLoader and not the value set in LocalImageLoader. Maybe there's a better way for Coil to handle this (open to suggestions!)...
    cla: yes 
    opened by colinrtwhite 8
  • README: Update AS Canary version & added download link

    README: Update AS Canary version & added download link

    Hello,

    I want to propose 2 changes to the README:

    • Updated recommended AS canary version to Arctic Fox 2020.3.1.
    • Add a link that takes directly to the AS canary download page.

    About the first point, in my opinion I'd completely remove the version from the text and just leave it as "the lastest Canary version of Android Studio).

    cla: yes 
    opened by JetpackDuba 8
  • [JetSurvey] Incorrect value in TextField

    [JetSurvey] Incorrect value in TextField

    Hello, I found bug when put an email in TextField, It seems onValueChanged returns incorrect value.

    Testing in JetSurvey module:

    https://user-images.githubusercontent.com/7002198/137103567-839b8ca5-56e1-4308-bfa8-4bf4f0905cb7.mp4

    Test in Samsung SM-T365 with Android 5.1.1 and Samsung Galaxy A6 with Android 8 fails. Test in Android 9 and newer devices works fine.

    Thanks

    opened by DesarrolloAntonio 7
  • PREVIEW: [Jetsurvey] Changed to use Navigation Compose

    PREVIEW: [Jetsurvey] Changed to use Navigation Compose

    Depends on #1058 landing first, so only opening as a draft.

    This eliminates all fragments in favor of navigating at the composable level. I also updated the screen-level composables to take in explicit lambdas rather than event handlers to follow best practices.

    One notable change here is that there is no longer a fragment from which to launch the camera. Instead, the PhotoQuestion uses rememberLauncherForActivityResult. This also uses TakePicturePreview, which doesn't require a pre-registered URI, so the file permission is no longer necessary (the contract returns a Bitmap directly).

    opened by IanGClifton 1
  • [Jetsurvey] Simplification of survey screens

    [Jetsurvey] Simplification of survey screens

    This eliminates the survey repository and related data models in favor of simplifying the code base. Each of the different question types has a generic composable such as MultipleChoiceQuestion, which takes all of the relevant strings/resources to generate the UI. The actual survey data is baked into a specific composable in Survey.kt, such as FreeTimeQuestion, instead of coming from a data model.

    The SurveyViewModel is now much more explicit with methods for each question such as onFreeTimeResponse. In a production app, you'd likely want this to be more flexible to handle server-side questions, but this code pattern makes the sample easier to skim. Every response is maintained in SurveyViewModel as a separate state. This increases verbosity in favor of better readability.

    This also appears to fix the issue of photos not working on API 21, though I'm not sure what specific change fixed it. I verified on a Nexus 4 running Android 5.1.1.

    Note: This does not animate between the final survey question and the survey results. When the work to move the app to Compose Navigation is done, the results will be a separate destination that is navigated to and animated that way.

    This fixes #1054.

    opened by IanGClifton 0
  • [Jetsurvey]: Tapping the survey title closes the survey

    [Jetsurvey]: Tapping the survey title closes the survey

    Is there an existing issue for this?

    • [X] I have searched the existing issues

    Is there a StackOverflow question about this issue?

    • [X] I have searched StackOverflow

    Is this an issue related to one of the samples?

    • [X] Yes, this is a specific issue related to this samples repo.

    Sample app

    Jetsurvey

    What happened?

    Tapping the title (e.g., "1 of 6") will close the survey; this is because the X has a modifier to make it take the whole width. The top bar should be using CenterAlignedTopAppBar and then the ButtonIcon/Icon should not use the full width.

    Relevant logcat output

    No response

    Code of Conduct

    • [X] I agree to follow this project's Code of Conduct
    bug 
    opened by IanGClifton 0
Releases(v2022.10.00)
A collection of animations, compositions, UIs using Jetpack Compose. You can say Jetpack Compose cookbook or play-ground if you want!

Why Not Compose! A collection of animations, compositions, UIs using Jetpack Compose. You can say Jetpack Compose cookbook or play-ground if you want!

Md. Mahmudul Hasan Shohag 186 Jan 1, 2023
Learn Jetpack Compose for Android by Examples. Learn how to use Jetpack Compose for Android App Development. Android’s modern toolkit for building native UI.

Learn Jetpack Compose for Android by Examples. Learn how to use Jetpack Compose for Android App Development. Android’s modern toolkit for building native UI.

MindOrks 382 Jan 5, 2023
This is a sample app(For beginners - App #2) built using Jetpack Compose. It demonstrates the concept of State Hoisting in Jetpack Compose.

JetBMICalculator This is a sample app(For beginners - App #2) built using Jetpack Compose. It demonstrates the concept of State Hoisting in Jetpack Co

BHAVNA THACKER 3 Dec 31, 2022
Jetpack-Compose-Demo - Instagram Profile UI using Jetpack Compose

Jetpack-Compose-Demo Instagram Profile UI using Jetpack Compose

omar 1 Aug 11, 2022
Jetpack-compose-animations-examples - Cool animations implemented with Jetpack compose

Jetpack-compose-animations-examples This repository consists of 4 animations: St

Canopas Software 180 Jan 2, 2023
Compose-navigation - Set of utils to help with integrating Jetpack Compose and Jetpack's Navigation

Jetpack Compose Navigation Set of utils to help with integrating Jetpack Compose

Adam Kobus 5 Apr 5, 2022
Jetpack-compose-uis - A collection of some UIs using Jetpack Compose. built using Katalog

Jetpack Compose UIs This is a collection of some UIs using Jetpack Compose. It i

Mori Atsushi 3 Dec 15, 2022
A simple authentication application using Jetpack compose to illustrate signin and sign up using Mvvm, Kotlin and jetpack compose

Authentication A simple authentication application using Jetpack compose to illustrate signin and sign up using Mvvm, Kotlin and jetpack compose Scree

Felix Kariuki 5 Dec 29, 2022
An application that i developed with a aim of learning Jetpack compose and many other jetpack libraries

An application that i developed with a aim of learning Jetpack compose and many other jetpack libraries, The application make use of jikan Api which displays a list of animations,there more details and even trailers of the animations.

Odhiambo Brandy 10 Nov 23, 2022
A Kotlin library to use Jetpack Compose in Android and iOS. Allow to write UI for both in Kotin. Still experimental as many compose features are not yet available.

Multiplatform Compose A Kotlin library to use Jetpack Compose in Android and iOS. Allow to write UI for both in Kotin. Still experimental as many comp

Clément Beffa 548 Jan 7, 2023
K5-compose is a sketchy port of p5.js for Jetpack Compose

k5-compose k5-compose is a sketchy port of P5.js for Jetpack Compose Desktop. This library provides you a playground to play with your sketches so you

Nikhil Chaudhari 176 Nov 22, 2022
Jetpack Compose based project, used to stress-testing compose features / integrations and explore non-trivial functionality

Project containing Jetpack Compose samples For pagination & network images it uses CATAAS. Known issues Navigation-Compose Issue with fast tapping on

Denis Rudenko 59 Dec 14, 2022
Pokedex Compose is an independent re-write of a demo application by the name of Pokedex, but written in jetpack compose.

Pokedex Compose Pokedex Compose is an independent re-write of a similar project by the name of Pokedex. I am recreating the UI but I am doing it using

Jose Patino 4 May 1, 2022
Compose-Instagram-Profile-UI - Instagram profile screen UI using android jetpack compose

Compose-Intsgram-Profile-UI Instagram profile screen UI using android jetpack co

TILLERN 1 Mar 8, 2022
Luis David Orellana 3 Jun 20, 2022
Lock Screen-Compose - Lock Screen with Jetpack Compose

Lock_Screen-Compose 此專案為Jetpack Compose練習題.

Kanneki Chen 0 Jan 26, 2022
Compose-Ratingbar-library - A simple implementation for rating bar in Jetpack Compose

Compose-Ratingbar-library - A simple implementation for rating bar in Jetpack Compose

Mahmoud Hussein 14 Dec 21, 2022
Compose Curved-Scroll is an Android Jetpack Compose library made with ❤️

Compose-Curved-Scroll-library Compose Curved-Scroll is an Android Jetpack Compos

mohamed tamer 23 Aug 24, 2022
Android.compose.squircle - Android LightWeight Squircle Library for JetPack Compose

Android LightWeight Squircle Library for JetPack Compose Usage Based on Compose

Quang Nguyen 9 Jul 5, 2022