Status Update
Comments
bi...@google.com <bi...@google.com>
jv...@google.com <jv...@google.com>
ga...@google.com <ga...@google.com>
au...@google.com <au...@google.com> #2
Steps to reproduce
What steps are needed to reproduce this issue?
If required, please provide sample project or apk to reproduce the issue. Also mention the steps to be followed for reproducing the issue with the given sample project or apk.
Expected output
What is the expected output?
Current output
What is the current output?
Android bug report capturing
After reproducing the issue, press the volume up, volume down, and power button simultaneously. This will capture a bug report on your device in the “bug reports” directory. Attach the bug report file to this issue.
Alternate method
After reproducing the issue, navigate to “developer settings”, ensure “USB debugging” is enabled, then enable “Bug report shortcut”. Capture bug report by holding the power button and selecting the “Take bug report” option.
Screen Record of the Issue
Please capture screen record or video of the issue using following steps:
adb shell screenrecord /sdcard/video.mp4
Subsequently use following command to pull the recorded file:
adb pull /sdcard/video.mp4
Attach the file to this issue.
bi...@google.com <bi...@google.com> #3
I think it's my mistake, I guess I should not invoke BiometricPrompt from onResume it will cause an infinite loop.
Running on Samsung A50 Android 9 or Emulator Nexus 5X API 27
Android Studio 3.5.1
compileSdkVersion 29
minSdkVersion 21
targetSdkVersion 29
def biometric_version = "1.0.0-rc01"
implementation "androidx.biometric:biometric:$biometric_version"
Scenario 1:
- No biometric or device credentials (PIN, pattern, password) configured
- Biometric prompt not showing
- Tap on Toast button
- Activity is not responding (can't tap on button)
Scenario 2:
- Device credential configured (Pattern)
- Biometric prompt showing pattern authentication
- Tap on Cancel
- Tap on Toast button
- Activity is not responding (can't tap on button)
Expected output : Toast showing when button tapped
au...@google.com <au...@google.com> #4
Steps to reproduce:
- Fingerprint configured in settings
- Biometric prompt showing
- Tap on cancel
- Tap on Toast button
- Toast is showing
Scenario 2:
- Device credential configured (Pattern)
- Biometric prompt showing pattern authentication
- Tap on Cancel
- Tap on Toast button
- Activity is not responding (can't tap on button)
Behaviour is not the same between biometric and credentials authentication
bi...@google.com <bi...@google.com> #5
ga...@google.com <ga...@google.com> #6
bi...@google.com <bi...@google.com> #7
sp...@google.com <sp...@google.com> #8
Branch: androidx-master-dev
commit a9cbd7e42fd38c18395c23fd17622c731c60c724
Author: Curtis Belmonte <curtislb@google.com>
Date: Mon Oct 28 11:00:33 2019
Fix leak of biometric credential handler activity
Due to a race condition, which can be triggered by launching
BiometricPrompt immediately after it's dismissed (e.g., by calling
authenticate() in onResume() or onCreate()), it's currently possible for
the transparent DeviceCredentialHandlerActivity to get stuck onscreen.
This results in no visible change but consumes all touch events until
the user presses back or pauses the activity.
This commit fixes the issue of the activity getting stuck onscreen by
ensuring that DeviceCredentialHandlerActivity is finished (without an
explicit authentication result) in this case.
Test: Have sample app call BiometricPrompt#authenticate() in onResume()
Before: After first auth, transparent activity is stuck onscreen
After: After first auth, the prompt launches again successfully
Fixes: 143091227
Change-Id: Id11918662be4634c017094806816a990e84ffd62
M biometric/src/main/java/androidx/biometric/DeviceCredentialHandlerActivity.java
sp...@google.com <sp...@google.com> #9
xa...@google.com <xa...@google.com> #10
Scott, do we have a cherry-pick ready for the lint fix?
sp...@google.com <sp...@google.com> #11
Yes, Change-Id: I994677cebb63de5472bb8ea561bdad0336c72f55
sp...@google.com <sp...@google.com> #12
Saurabh, it looks like Xav is OOO until after the deadline for patch 1 check-ins.
Can you or someone else give DrNo approval for ag/I994677cebb63de5472bb8ea561bdad0336c72f55?
sp...@google.com <sp...@google.com> #13
Hey Saurabh, ag/I994677cebb63de5472bb8ea561bdad0336c72f55 still needs DrNo approval. Can you give approval, or can you reassign to someone who can?
au...@google.com <au...@google.com> #14
I still see it being broken in AGP 8.2.0-alpha15.
See me trying to remove the entry from the allow list:
au...@google.com <au...@google.com> #15
Here is a stacktrace from AGP 8.2.0-alpha15 / Gradle 8.3-rc-1
fileExists:380, Instrumented (org.gradle.internal.classpath)
intercept_exists:71, FileInterceptorsDeclaration (org.gradle.internal.classpath.declarations)
settingsFileExists:424, AnalyticsSettings (com.android.tools.analytics)
needToInitializeAnalytics:200, ProjectOptions (com.android.build.gradle.options)
isAnalyticsEnabled:180, ProjectOptions (com.android.build.gradle.options)
basePluginApply:123, AndroidPluginBaseServices (com.android.build.gradle.internal.plugins)
run:348, BasePlugin$apply$1 (com.android.build.gradle.internal.plugins)
runAction:27, CrashReporting (com.android.build.gradle.internal.crash)
apply:347, BasePlugin (com.android.build.gradle.internal.plugins)
apply:126, BasePlugin (com.android.build.gradle.internal.plugins)
applyImperative:43, ImperativeOnlyPluginTarget (org.gradle.api.internal.plugins)
applyImperative:51, RuleBasedPluginTarget (org.gradle.api.internal.plugins)
addPlugin:187, DefaultPluginManager (org.gradle.api.internal.plugins)
access$100:52, DefaultPluginManager (org.gradle.api.internal.plugins)
run:282, DefaultPluginManager$AddPluginBuildOperation (org.gradle.api.internal.plugins)
execute:29, DefaultBuildOperationRunner$1 (org.gradle.internal.operations)
execute:26, DefaultBuildOperationRunner$1 (org.gradle.internal.operations)
execute:66, DefaultBuildOperationRunner$2 (org.gradle.internal.operations)
execute:59, DefaultBuildOperationRunner$2 (org.gradle.internal.operations)
execute:157, DefaultBuildOperationRunner (org.gradle.internal.operations)
execute:59, DefaultBuildOperationRunner (org.gradle.internal.operations)
run:47, DefaultBuildOperationRunner (org.gradle.internal.operations)
run:68, DefaultBuildOperationExecutor (org.gradle.internal.operations)
lambda$doApply$0:167, DefaultPluginManager (org.gradle.api.internal.plugins)
execute:-1, DefaultPluginManager$$Lambda$772/0x0000000801239068 (org.gradle.api.internal.plugins)
apply:44, DefaultUserCodeApplicationContext (org.gradle.configuration.internal)
doApply:166, DefaultPluginManager (org.gradle.api.internal.plugins)
apply:146, DefaultPluginManager (org.gradle.api.internal.plugins)
applyType:161, DefaultObjectConfigurationAction (org.gradle.api.internal.plugins)
access$200:43, DefaultObjectConfigurationAction (org.gradle.api.internal.plugins)
run:98, DefaultObjectConfigurationAction$3 (org.gradle.api.internal.plugins)
execute:184, DefaultObjectConfigurationAction (org.gradle.api.internal.plugins)
apply:49, AbstractPluginAware (org.gradle.api.internal.project)
apply:28, LibraryPlugin (com.android.build.gradle)
apply:24, LibraryPlugin (com.android.build.gradle)
applyImperative:43, ImperativeOnlyPluginTarget (org.gradle.api.internal.plugins)
applyImperative:51, RuleBasedPluginTarget (org.gradle.api.internal.plugins)
addPlugin:187, DefaultPluginManager (org.gradle.api.internal.plugins)
access$100:52, DefaultPluginManager (org.gradle.api.internal.plugins)
run:282, DefaultPluginManager$AddPluginBuildOperation (org.gradle.api.internal.plugins)
execute:29, DefaultBuildOperationRunner$1 (org.gradle.internal.operations)
execute:26, DefaultBuildOperationRunner$1 (org.gradle.internal.operations)
execute:66, DefaultBuildOperationRunner$2 (org.gradle.internal.operations)
execute:59, DefaultBuildOperationRunner$2 (org.gradle.internal.operations)
execute:157, DefaultBuildOperationRunner (org.gradle.internal.operations)
execute:59, DefaultBuildOperationRunner (org.gradle.internal.operations)
run:47, DefaultBuildOperationRunner (org.gradle.internal.operations)
run:68, DefaultBuildOperationExecutor (org.gradle.internal.operations)
lambda$doApply$0:167, DefaultPluginManager (org.gradle.api.internal.plugins)
execute:-1, DefaultPluginManager$$Lambda$772/0x0000000801239068 (org.gradle.api.internal.plugins)
apply:44, DefaultUserCodeApplicationContext (org.gradle.configuration.internal)
doApply:166, DefaultPluginManager (org.gradle.api.internal.plugins)
apply:137, DefaultPluginManager (org.gradle.api.internal.plugins)
lambda$applyPlugin$1:148, DefaultPluginRequestApplicator (org.gradle.plugin.use.internal)
run:-1, DefaultPluginRequestApplicator$$Lambda$2374/0x00000008018feae0 (org.gradle.plugin.use.internal)
applyPlugin:199, DefaultPluginRequestApplicator (org.gradle.plugin.use.internal)
applyPlugin:146, DefaultPluginRequestApplicator (org.gradle.plugin.use.internal)
access$200:60, DefaultPluginRequestApplicator (org.gradle.plugin.use.internal)
lambda$add$1:119, DefaultPluginRequestApplicator$1$1 (org.gradle.plugin.use.internal)
accept:-1, DefaultPluginRequestApplicator$1$1$$Lambda$2372/0x00000008018fe670 (org.gradle.plugin.use.internal)
lambda$applyPlugins$0:142, DefaultPluginRequestApplicator (org.gradle.plugin.use.internal)
accept:-1, DefaultPluginRequestApplicator$$Lambda$2373/0x00000008018fe8a8 (org.gradle.plugin.use.internal)
forEach:75, Iterable (java.lang)
applyPlugins:142, DefaultPluginRequestApplicator (org.gradle.plugin.use.internal)
apply:117, DefaultScriptPluginFactory$ScriptPluginImpl (org.gradle.configuration)
run:65, BuildOperationScriptPlugin$1 (org.gradle.configuration)
execute:29, DefaultBuildOperationRunner$1 (org.gradle.internal.operations)
execute:26, DefaultBuildOperationRunner$1 (org.gradle.internal.operations)
execute:66, DefaultBuildOperationRunner$2 (org.gradle.internal.operations)
execute:59, DefaultBuildOperationRunner$2 (org.gradle.internal.operations)
execute:157, DefaultBuildOperationRunner (org.gradle.internal.operations)
execute:59, DefaultBuildOperationRunner (org.gradle.internal.operations)
run:47, DefaultBuildOperationRunner (org.gradle.internal.operations)
run:68, DefaultBuildOperationExecutor (org.gradle.internal.operations)
lambda$apply$0:62, BuildOperationScriptPlugin (org.gradle.configuration)
execute:-1, BuildOperationScriptPlugin$$Lambda$405/0x000000080107f8b8 (org.gradle.configuration)
apply:44, DefaultUserCodeApplicationContext (org.gradle.configuration.internal)
apply:62, BuildOperationScriptPlugin (org.gradle.configuration)
accept:-1, BuildScriptProcessor$$Lambda$1367/0x00000008015823a0 (org.gradle.configuration.project)
lambda$applyToMutableState$1:395, DefaultProjectStateRegistry$ProjectStateImpl (org.gradle.api.internal.project)
apply:-1, DefaultProjectStateRegistry$ProjectStateImpl$$Lambda$1309/0x0000000801536908 (org.gradle.api.internal.project)
fromMutableState:413, DefaultProjectStateRegistry$ProjectStateImpl (org.gradle.api.internal.project)
applyToMutableState:394, DefaultProjectStateRegistry$ProjectStateImpl (org.gradle.api.internal.project)
execute:46, BuildScriptProcessor (org.gradle.configuration.project)
execute:27, BuildScriptProcessor (org.gradle.configuration.project)
evaluate:35, ConfigureActionsProjectEvaluator (org.gradle.configuration.project)
lambda$run$0:109, LifecycleProjectEvaluator$EvaluateProject (org.gradle.configuration.project)
accept:-1, LifecycleProjectEvaluator$EvaluateProject$$Lambda$1347/0x0000000801568260 (org.gradle.configuration.project)
lambda$applyToMutableState$1:395, DefaultProjectStateRegistry$ProjectStateImpl (org.gradle.api.internal.project)
apply:-1, DefaultProjectStateRegistry$ProjectStateImpl$$Lambda$1309/0x0000000801536908 (org.gradle.api.internal.project)
fromMutableState:413, DefaultProjectStateRegistry$ProjectStateImpl (org.gradle.api.internal.project)
applyToMutableState:394, DefaultProjectStateRegistry$ProjectStateImpl (org.gradle.api.internal.project)
run:100, LifecycleProjectEvaluator$EvaluateProject (org.gradle.configuration.project)
execute:29, DefaultBuildOperationRunner$1 (org.gradle.internal.operations)
execute:26, DefaultBuildOperationRunner$1 (org.gradle.internal.operations)
execute:66, DefaultBuildOperationRunner$2 (org.gradle.internal.operations)
execute:59, DefaultBuildOperationRunner$2 (org.gradle.internal.operations)
execute:157, DefaultBuildOperationRunner (org.gradle.internal.operations)
execute:59, DefaultBuildOperationRunner (org.gradle.internal.operations)
run:47, DefaultBuildOperationRunner (org.gradle.internal.operations)
run:68, DefaultBuildOperationExecutor (org.gradle.internal.operations)
evaluate:72, LifecycleProjectEvaluator (org.gradle.configuration.project)
evaluate:788, DefaultProject (org.gradle.api.internal.project)
evaluate:156, DefaultProject (org.gradle.api.internal.project)
lambda$ensureSelfConfigured$2:84, ProjectLifecycleController (org.gradle.api.internal.project)
run:-1, ProjectLifecycleController$$Lambda$1344/0x0000000801561228 (org.gradle.api.internal.project)
lambda$doTransition$14:255, StateTransitionController (org.gradle.internal.model)
get:-1, StateTransitionController$$Lambda$341/0x00000008010060c8 (org.gradle.internal.model)
doTransition:266, StateTransitionController (org.gradle.internal.model)
doTransition:254, StateTransitionController (org.gradle.internal.model)
lambda$maybeTransitionIfNotCurrentlyTransitioning$10:199, StateTransitionController (org.gradle.internal.model)
run:-1, StateTransitionController$$Lambda$1345/0x0000000801561450 (org.gradle.internal.model)
withLock:34, DefaultSynchronizer (org.gradle.internal.work)
maybeTransitionIfNotCurrentlyTransitioning:195, StateTransitionController (org.gradle.internal.model)
ensureSelfConfigured:84, ProjectLifecycleController (org.gradle.api.internal.project)
ensureConfigured:369, DefaultProjectStateRegistry$ProjectStateImpl (org.gradle.api.internal.project)
configure:33, TaskPathProjectEvaluator (org.gradle.execution)
getSelection:59, DefaultTaskSelector (org.gradle.execution)
resolveTaskName:98, DefaultBuildTaskSelector (org.gradle.execution.selection)
parseTasks:49, CommandLineTaskParser (org.gradle.execution.commandline)
scheduleRequestedTasks:51, TaskNameResolvingBuildTaskScheduler (org.gradle.execution)
scheduleRequestedTasks:72, DefaultTasksBuildTaskScheduler (org.gradle.execution)
lambda$scheduleRequestedTasks$0:46, DefaultTaskExecutionPreparer (org.gradle.initialization)
run:-1, DefaultTaskExecutionPreparer$$Lambda$1748/0x00000008017f6d60 (org.gradle.initialization)
create:31, Factories$1 (org.gradle.internal)
withReplacedLocks:360, DefaultWorkerLeaseService (org.gradle.internal.work)
withMutableStateOfAllProjects:228, DefaultProjectStateRegistry$DefaultBuildProjectRegistry (org.gradle.api.internal.project)
withMutableStateOfAllProjects:221, DefaultProjectStateRegistry$DefaultBuildProjectRegistry (org.gradle.api.internal.project)
scheduleRequestedTasks:45, DefaultTaskExecutionPreparer (org.gradle.initialization)
lambda$scheduleRequestedTasks$0:76, VintageBuildModelController (org.gradle.initialization)
run:-1, VintageBuildModelController$$Lambda$1747/0x00000008017f6b38 (org.gradle.initialization)
lambda$inState$1:99, StateTransitionController (org.gradle.internal.model)
get:-1, StateTransitionController$$Lambda$300/0x0000000800fd08a0 (org.gradle.internal.model)
lambda$inState$2:114, StateTransitionController (org.gradle.internal.model)
create:-1, StateTransitionController$$Lambda$301/0x0000000800fd0ac8 (org.gradle.internal.model)
withLock:44, DefaultSynchronizer (org.gradle.internal.work)
inState:110, StateTransitionController (org.gradle.internal.model)
inState:98, StateTransitionController (org.gradle.internal.model)
scheduleRequestedTasks:76, VintageBuildModelController (org.gradle.initialization)
scheduleRequestedTasks:55, ConfigurationCacheAwareBuildModelController (org.gradle.configurationcache)
addRequestedTasks:351, DefaultBuildLifecycleController$DefaultWorkGraphBuilder (org.gradle.internal.build)
lambda$scheduleRequestedTasks$0:41, DefaultBuildTreeWorkPreparer (org.gradle.internal.buildtree)
accept:-1, DefaultBuildTreeWorkPreparer$$Lambda$1744/0x00000008017e7d08 (org.gradle.internal.buildtree)
lambda$populateWorkGraph$7:186, DefaultBuildLifecycleController (org.gradle.internal.build)
accept:-1, DefaultBuildLifecycleController$$Lambda$1746/0x00000008017f6228 (org.gradle.internal.build)
populateWorkGraph:42, DefaultBuildWorkPreparer (org.gradle.internal.build)
populateTaskGraph:106, BuildOperationFiringBuildWorkPreparer$PopulateWorkGraph (org.gradle.internal.build)
run:92, BuildOperationFiringBuildWorkPreparer$PopulateWorkGraph (org.gradle.internal.build)
execute:29, DefaultBuildOperationRunner$1 (org.gradle.internal.operations)
execute:26, DefaultBuildOperationRunner$1 (org.gradle.internal.operations)
execute:66, DefaultBuildOperationRunner$2 (org.gradle.internal.operations)
execute:59, DefaultBuildOperationRunner$2 (org.gradle.internal.operations)
execute:157, DefaultBuildOperationRunner (org.gradle.internal.operations)
execute:59, DefaultBuildOperationRunner (org.gradle.internal.operations)
run:47, DefaultBuildOperationRunner (org.gradle.internal.operations)
run:68, DefaultBuildOperationExecutor (org.gradle.internal.operations)
populateWorkGraph:67, BuildOperationFiringBuildWorkPreparer (org.gradle.internal.build)
lambda$populateWorkGraph$8:186, DefaultBuildLifecycleController (org.gradle.internal.build)
run:-1, DefaultBuildLifecycleController$$Lambda$1745/0x00000008017f6000 (org.gradle.internal.build)
lambda$inState$1:99, StateTransitionController (org.gradle.internal.model)
get:-1, StateTransitionController$$Lambda$300/0x0000000800fd08a0 (org.gradle.internal.model)
lambda$inState$2:114, StateTransitionController (org.gradle.internal.model)
create:-1, StateTransitionController$$Lambda$301/0x0000000800fd0ac8 (org.gradle.internal.model)
withLock:44, DefaultSynchronizer (org.gradle.internal.work)
inState:110, StateTransitionController (org.gradle.internal.model)
inState:98, StateTransitionController (org.gradle.internal.model)
populateWorkGraph:186, DefaultBuildLifecycleController (org.gradle.internal.build)
populateWorkGraph:169, DefaultBuildWorkGraphController$DefaultBuildWorkGraph (org.gradle.internal.build)
populateWorkGraph:76, DefaultBuildController (org.gradle.composite.internal)
withWorkGraph:153, DefaultIncludedBuildTaskGraph$DefaultBuildTreeWorkGraphBuilder (org.gradle.composite.internal)
lambda$scheduleRequestedTasks$1:41, DefaultBuildTreeWorkPreparer (org.gradle.internal.buildtree)
accept:-1, DefaultBuildTreeWorkPreparer$$Lambda$1740/0x00000008017e5920 (org.gradle.internal.buildtree)
run:209, DefaultIncludedBuildTaskGraph$DefaultBuildTreeWorkGraph$1 (org.gradle.composite.internal)
execute:29, DefaultBuildOperationRunner$1 (org.gradle.internal.operations)
execute:26, DefaultBuildOperationRunner$1 (org.gradle.internal.operations)
execute:66, DefaultBuildOperationRunner$2 (org.gradle.internal.operations)
execute:59, DefaultBuildOperationRunner$2 (org.gradle.internal.operations)
execute:157, DefaultBuildOperationRunner (org.gradle.internal.operations)
execute:59, DefaultBuildOperationRunner (org.gradle.internal.operations)
run:47, DefaultBuildOperationRunner (org.gradle.internal.operations)
run:68, DefaultBuildOperationExecutor (org.gradle.internal.operations)
scheduleWork:204, DefaultIncludedBuildTaskGraph$DefaultBuildTreeWorkGraph (org.gradle.composite.internal)
scheduleRequestedTasks:37, DefaultBuildTreeWorkPreparer (org.gradle.internal.buildtree)
invoke:46, ConfigurationCacheAwareBuildTreeWorkController$scheduleAndRunRequestedTasks$executionResult$1$result$1 (org.gradle.configurationcache)
invoke:45, ConfigurationCacheAwareBuildTreeWorkController$scheduleAndRunRequestedTasks$executionResult$1$result$1 (org.gradle.configurationcache)
invoke:137, DefaultConfigurationCache$loadOrScheduleRequestedTasks$1 (org.gradle.configurationcache)
invoke:136, DefaultConfigurationCache$loadOrScheduleRequestedTasks$1 (org.gradle.configurationcache)
runWorkThatContributesToCacheEntry:303, DefaultConfigurationCache (org.gradle.configurationcache)
loadOrScheduleRequestedTasks:136, DefaultConfigurationCache (org.gradle.configurationcache)
apply:45, ConfigurationCacheAwareBuildTreeWorkController$scheduleAndRunRequestedTasks$executionResult$1 (org.gradle.configurationcache)
apply:44, ConfigurationCacheAwareBuildTreeWorkController$scheduleAndRunRequestedTasks$executionResult$1 (org.gradle.configurationcache)
withNewWorkGraph:112, DefaultIncludedBuildTaskGraph (org.gradle.composite.internal)
scheduleAndRunRequestedTasks:44, ConfigurationCacheAwareBuildTreeWorkController (org.gradle.configurationcache)
lambda$scheduleAndRunTasks$1:68, DefaultBuildTreeLifecycleController (org.gradle.internal.buildtree)
get:-1, DefaultBuildTreeLifecycleController$$Lambda$303/0x0000000800fd1410 (org.gradle.internal.buildtree)
lambda$runBuild$4:98, DefaultBuildTreeLifecycleController (org.gradle.internal.buildtree)
get:-1, DefaultBuildTreeLifecycleController$$Lambda$304/0x0000000800fd1638 (org.gradle.internal.buildtree)
lambda$transition$6:169, StateTransitionController (org.gradle.internal.model)
get:-1, StateTransitionController$$Lambda$306/0x0000000800fd1a88 (org.gradle.internal.model)
doTransition:266, StateTransitionController (org.gradle.internal.model)
lambda$transition$7:169, StateTransitionController (org.gradle.internal.model)
create:-1, StateTransitionController$$Lambda$305/0x0000000800fd1860 (org.gradle.internal.model)
withLock:44, DefaultSynchronizer (org.gradle.internal.work)
transition:169, StateTransitionController (org.gradle.internal.model)
runBuild:95, DefaultBuildTreeLifecycleController (org.gradle.internal.buildtree)
scheduleAndRunTasks:68, DefaultBuildTreeLifecycleController (org.gradle.internal.buildtree)
scheduleAndRunTasks:63, DefaultBuildTreeLifecycleController (org.gradle.internal.buildtree)
run:53, BuildModelActionRunner (org.gradle.tooling.internal.provider.runner)
run:35, ChainingBuildActionRunner (org.gradle.launcher.exec)
run:49, ProblemReportingBuildActionRunner (org.gradle.internal.buildtree)
run:65, BuildOutcomeReportingBuildActionRunner (org.gradle.launcher.exec)
run:140, FileSystemWatchingBuildActionRunner (org.gradle.tooling.internal.provider)
run:41, BuildCompletionNotifyingBuildActionRunner (org.gradle.launcher.exec)
lambda$execute$0:40, RootBuildLifecycleBuildActionExecutor (org.gradle.launcher.exec)
apply:-1, RootBuildLifecycleBuildActionExecutor$$Lambda$296/0x0000000800fc4228 (org.gradle.launcher.exec)
run:123, DefaultRootBuildState (org.gradle.composite.internal)
execute:40, RootBuildLifecycleBuildActionExecutor (org.gradle.launcher.exec)
execute:58, InitDeprecationLoggingActionExecutor (org.gradle.internal.buildtree)
execute:40, DefaultBuildTreeContext (org.gradle.internal.buildtree)
lambda$execute$0:65, BuildTreeLifecycleBuildActionExecutor (org.gradle.launcher.exec)
apply:-1, BuildTreeLifecycleBuildActionExecutor$$Lambda$175/0x0000000800e3d8a0 (org.gradle.launcher.exec)
run:58, BuildTreeState (org.gradle.internal.buildtree)
execute:65, BuildTreeLifecycleBuildActionExecutor (org.gradle.launcher.exec)
call:61, RunAsBuildOperationBuildActionExecutor$3 (org.gradle.launcher.exec)
call:57, RunAsBuildOperationBuildActionExecutor$3 (org.gradle.launcher.exec)
execute:204, DefaultBuildOperationRunner$CallableBuildOperationWorker (org.gradle.internal.operations)
execute:199, DefaultBuildOperationRunner$CallableBuildOperationWorker (org.gradle.internal.operations)
execute:66, DefaultBuildOperationRunner$2 (org.gradle.internal.operations)
execute:59, DefaultBuildOperationRunner$2 (org.gradle.internal.operations)
execute:157, DefaultBuildOperationRunner (org.gradle.internal.operations)
execute:59, DefaultBuildOperationRunner (org.gradle.internal.operations)
call:53, DefaultBuildOperationRunner (org.gradle.internal.operations)
call:73, DefaultBuildOperationExecutor (org.gradle.internal.operations)
execute:57, RunAsBuildOperationBuildActionExecutor (org.gradle.launcher.exec)
lambda$execute$0:36, RunAsWorkerThreadBuildActionExecutor (org.gradle.launcher.exec)
create:-1, RunAsWorkerThreadBuildActionExecutor$$Lambda$172/0x0000000800e15fa0 (org.gradle.launcher.exec)
withLocks:264, DefaultWorkerLeaseService (org.gradle.internal.work)
runAsWorkerThread:128, DefaultWorkerLeaseService (org.gradle.internal.work)
execute:36, RunAsWorkerThreadBuildActionExecutor (org.gradle.launcher.exec)
execute:110, ContinuousBuildActionExecutor (org.gradle.tooling.internal.provider.continuous)
execute:64, SubscribableBuildActionExecutor (org.gradle.tooling.internal.provider)
execute:46, DefaultBuildSessionContext (org.gradle.internal.session)
apply:92, BuildSessionLifecycleBuildActionExecuter$ActionImpl (org.gradle.tooling.internal.provider)
apply:80, BuildSessionLifecycleBuildActionExecuter$ActionImpl (org.gradle.tooling.internal.provider)
run:69, BuildSessionState (org.gradle.internal.session)
execute:62, BuildSessionLifecycleBuildActionExecuter (org.gradle.tooling.internal.provider)
execute:41, BuildSessionLifecycleBuildActionExecuter (org.gradle.tooling.internal.provider)
execute:64, StartParamsValidatingActionExecuter (org.gradle.tooling.internal.provider)
execute:32, StartParamsValidatingActionExecuter (org.gradle.tooling.internal.provider)
execute:51, SessionFailureReportingActionExecuter (org.gradle.tooling.internal.provider)
execute:39, SessionFailureReportingActionExecuter (org.gradle.tooling.internal.provider)
execute:47, SetupLoggingActionExecuter (org.gradle.tooling.internal.provider)
execute:31, SetupLoggingActionExecuter (org.gradle.tooling.internal.provider)
doBuild:65, ExecuteBuild (org.gradle.launcher.daemon.server.exec)
execute:37, BuildCommandOnly (org.gradle.launcher.daemon.server.exec)
proceed:104, DaemonCommandExecution (org.gradle.launcher.daemon.server.api)
execute:39, WatchForDisconnection (org.gradle.launcher.daemon.server.exec)
proceed:104, DaemonCommandExecution (org.gradle.launcher.daemon.server.api)
execute:29, ResetDeprecationLogger (org.gradle.launcher.daemon.server.exec)
proceed:104, DaemonCommandExecution (org.gradle.launcher.daemon.server.api)
execute:35, RequestStopIfSingleUsedDaemon (org.gradle.launcher.daemon.server.exec)
proceed:104, DaemonCommandExecution (org.gradle.launcher.daemon.server.api)
create:78, ForwardClientInput$2 (org.gradle.launcher.daemon.server.exec)
create:75, ForwardClientInput$2 (org.gradle.launcher.daemon.server.exec)
swap:38, Swapper (org.gradle.util.internal)
execute:75, ForwardClientInput (org.gradle.launcher.daemon.server.exec)
proceed:104, DaemonCommandExecution (org.gradle.launcher.daemon.server.api)
execute:64, LogAndCheckHealth (org.gradle.launcher.daemon.server.exec)
proceed:104, DaemonCommandExecution (org.gradle.launcher.daemon.server.api)
doBuild:63, LogToClient (org.gradle.launcher.daemon.server.exec)
execute:37, BuildCommandOnly (org.gradle.launcher.daemon.server.exec)
proceed:104, DaemonCommandExecution (org.gradle.launcher.daemon.server.api)
doBuild:84, EstablishBuildEnvironment (org.gradle.launcher.daemon.server.exec)
execute:37, BuildCommandOnly (org.gradle.launcher.daemon.server.exec)
proceed:104, DaemonCommandExecution (org.gradle.launcher.daemon.server.api)
run:52, StartBuildOrRespondWithBusy$1 (org.gradle.launcher.daemon.server.exec)
run:297, DaemonStateCoordinator$1 (org.gradle.launcher.daemon.server)
onExecute:64, ExecutorPolicy$CatchAndRecordFailures (org.gradle.internal.concurrent)
run:47, AbstractManagedExecutor$1 (org.gradle.internal.concurrent)
runWorker:1136, ThreadPoolExecutor (java.util.concurrent)
run:635, ThreadPoolExecutor$Worker (java.util.concurrent)
run:833, Thread (java.lang)
ga...@google.com <ga...@google.com> #16
This location is still in
Error.fileSystemEntry(
location = "android_prefs_root/analytics.settings",
name = "analytics.settings"
),
so it seems like this bug was incorrectly marked as fixed.
bi...@google.com <bi...@google.com> #17
re #16, the fix for analytics.settings
is to not creating that file unless we have to. see
In our integration tests, there are cases(e.g. AnalyticsConfigurationCachingTest) we need to create this file, therefore you would get
However, in general, androidx shouldn't see this issue. I will chat more with Scott next week.
ga...@google.com <ga...@google.com> #18
Considering there is a workaround (to allow-list this file) moving this to I beta blocking.
je...@google.com <je...@google.com> #19
Bingran asked me if I had any insights about this issue and mentioned that Aurimas didn't manage to reproduce it locally and suspected that it only happened in an incremental build.
I'm still investigating, but I notice a non-incremental build that failed on Aurimas's change from
for
je...@google.com <je...@google.com> #20
bi...@google.com <bi...@google.com> #21
In terms of #20, I think that is expected because we normally see config cache miss if a file is created during configuration. However, if a file get modified, I assume it would say xxx has been modified.
je...@google.com <je...@google.com> #22
This debugging change says that:
analytics.settings was written at:
2023-08-30 20:08:54.977482090 +0000
first Gradle start at Wed Aug 30 20:03:28 UTC 2023
first Gradle end at Wed Aug 30 20:09:35 UTC 2023
It looks like something in the first build wrote this file somewhat near the end of the build
Specifically, about 5m26s - 5m27s after the start of the build and 40s-41s before the end of the build
Resulting scan:
I see a few tasks that started in this build scan at approximately 5m26s, mostly lint-related.
I'll see if I can get more details
je...@google.com <je...@google.com> #23
I checked some timestamps again in aosp/2731437
Gradle started at 21:01:18 UTC 2023
Gradle completed at 21:07:21 UTC 2023
analytics.settings created at 21:05:35.748195543
4m17s after Gradle started
1m46s before Gradle ended
Uploaded the scan to
I see a few tasks running in that scan around 4m17s, mostly but not exclusively lint
je...@google.com <je...@google.com> #24
I just tried this command:
OUT_DIR=../../out DIST_DIR=../../out/dist ./busytown/androidx_compose_multiplatform.sh
and found that that reproduced the error on my computer. Maybe we can simplify it from there
sp...@google.com <sp...@google.com> #25
I see a few tasks running in that scan around 4m17s, mostly but not exclusively lint
I took a look at my previous lint fix after seeing this.
I think the problem might be that LintClient.isGradle
might not always be true when running the lint tasks, in which case
LintClient.isGradle
should be true when running lint tasks from Gradle because we invoke lint with --client-id gradle
, but when I run grep -r "client=\""
on the AndroidX codebase, I see a mix of client="gradle"
and client="cli"
, which suggests to me that the client id is being reset in some cases.
je...@google.com <je...@google.com> #26
I ran this command:
rm ../../out -rf && OUT_DIR=../../out DIST_DIR=../../out/dist ./gradlew lintAnalyzeDebug -Pandroidx.verifyUpToDate
and it created ../../out/.gradle/.android/analytics.settings
but when I ran this command
rm ../../out -rf && OUT_DIR=../../out DIST_DIR=../../out/dist ./gradlew lintAnalyzeDebug -Pandroidx.verifyUpToDate --max-workers 1
it didn't create ../../out/.gradle/.android/analytics.settings
so it could be that reproducing the error requires running certain tasks at the same time
je...@google.com <je...@google.com> #27
Combining
I think lint runs inside the Gradle Daemon JVM process - is that right?
I notice LintClient.kt mentions “@JvmStatic lateinit var clientName: String”. I think that means multiple lint clients might be able to overwrite each others’ values?
Maybe I can figure out which tasks set the lint client to something else
bi...@google.com <bi...@google.com>
je...@google.com <je...@google.com> #30
Thanks!
I investigated a little bit more into the plausibility of our guess (parallel lint invocations causing incorrect client) and it seems to be holding up:
1: I notice that aosp/2724176 changes some clients from "cli" to "gradle" for example
2: I regenerated all of the lint baselines via echo | tee
find -name lint-baseline.xml && ./gradlew updateLintBaseline --max-workers=1
and found that it put 'client="gradle"' into the resulting files
I'll check again later after updating to the corresponding AGP
sp...@google.com <sp...@google.com> #31
Thanks again Jeff!
Reassigning back to Bingran assuming the lint issue has been resolved.
In our integration tests, there are cases(e.g. AnalyticsConfigurationCachingTest) we need to create this file, therefore you would get config cache miss. So it is intended that we still have an entry in ConfigurationCacheReportChecker.
Unfortunately, yes, AnalyticsSettings
is still interacting with the file in a way that is not compatible with configuration caching.
sp...@google.com <sp...@google.com>
an...@google.com <an...@google.com> #33
Thank you for your patience while our engineering team worked to resolve this issue. A fix for this issue is now available in:
- Android Studio Hedgehog | 2023.1.1 Beta 4
- Android Gradle Plugin 8.2.0-beta04
We encourage you to try the latest update.
If you notice further issues or have questions, please file a new bug report.
Thank you for taking the time to submit feedback — we really appreciate it!
an...@google.com <an...@google.com> #34
The fixes for this issue are now also available in:
- Android Studio Iguana | 2023.2.1 Canary 4
- Android Gradle Plugin 8.3.0-alpha04
We encourage you to try the latest update.
If you notice further issues or have questions, please file a new bug report.
jf...@block.xyz <jf...@block.xyz> #35
In Gradle 8.3 we are ignoring this file with the following in gradle.properties
:
org.gradle.configuration-cache.inputs.unsafe.ignore.file-system-checks=**/.gradle/.android/analytics.settings
However, the AnalyticsService still breaks configuration on demand for some people:
> Failed to apply plugin 'com.android.internal.library'.
> Accessing GradleBuildProject.Builder through AnalyticsConfiguratorService is not allowed after AnalyticsService is created.
We've found that setting "hasOptedIn":false,"
in ~.gradle/.android/analytics.settings
fixes the issue.
sp...@google.com <sp...@google.com> #36
Re: #35, that looks like
mf...@gmail.com <mf...@gmail.com> #37
وجيهكم خلوني في حالي ..ماهو مقر.طالب
Description
DESCRIBE THE ISSUE IN DETAIL:
STEPS TO REPRODUCE:
./busytown/androidx_device_tests.sh
Expected
Our build is run twice (for up to dateness validation). Second run uses configuration cache
Actual
Second build does not use configuration cache, it is dropped due to