Status Update
Comments
99...@gmail.com <99...@gmail.com> #2
It looks like we have more directories
›../../out/androidx/appsearch/appsearch-local-storage/build/../nativeBuildStaging/cmake/debug/arm64-v8a/build.ninja📋
›../../out/androidx/appsearch/appsearch-local-storage/build/../nativeBuildStaging/cmake/debug/arm64-v8a/build.ninja.txt📋
›../../out/androidx/appsearch/appsearch-local-storage/build/../nativeBuildStaging/cmake/debug/armeabi-v7a/build.ninja📋
›../../out/androidx/appsearch/appsearch-local-storage/build/../nativeBuildStaging/cmake/debug/armeabi-v7a/build.ninja.txt📋
›../../out/androidx/appsearch/appsearch-local-storage/build/../nativeBuildStaging/cmake/debug/x86/build.ninja📋
›../../out/androidx/appsearch/appsearch-local-storage/build/../nativeBuildStaging/cmake/debug/x86/build.ninja.txt📋
›../../out/androidx/appsearch/appsearch-local-storage/build/../nativeBuildStaging/cmake/debug/x86_64/build.ninja📋
›../../out/androidx/appsearch/appsearch-local-storage/build/../nativeBuildStaging/cmake/debug/x86_64/build.ninja.txt📋
›../../out/androidx/appsearch/appsearch-local-storage/build/../nativeBuildStaging/cmake/release/arm64-v8a/build.ninja📋
›../../out/androidx/appsearch/appsearch-local-storage/build/../nativeBuildStaging/cmake/release/arm64-v8a/build.ninja.txt📋
›../../out/androidx/appsearch/appsearch-local-storage/build/../nativeBuildStaging/cmake/release/armeabi-v7a/build.ninja📋
›../../out/androidx/appsearch/appsearch-local-storage/build/../nativeBuildStaging/cmake/release/armeabi-v7a/build.ninja.txt📋
›../../out/androidx/appsearch/appsearch-local-storage/build/../nativeBuildStaging/cmake/release/x86/build.ninja📋
›../../out/androidx/appsearch/appsearch-local-storage/build/../nativeBuildStaging/cmake/release/x86/build.ninja.txt📋
›../../out/androidx/appsearch/appsearch-local-storage/build/../nativeBuildStaging/cmake/release/x86_64/build.ninja📋
›../../out/androidx/appsearch/appsearch-local-storage/build/../nativeBuildStaging/cmake/release/x86_64/build.ninja.txt📋
it also considers all of these input to configuration cache
99...@gmail.com <99...@gmail.com> #3
Prefab feature also seems to cause the following to be added as configuration ache inputs
›../../out/androidx/external/libyuv/build/intermediates/prefab_package_header_only/prefab_publication.json/debug📋
›../../out/androidx/external/libyuv/build/intermediates/prefab_package_header_only/prefab_publication.json/release📋
›../../out/androidx/test/ext/junit-gtest/build/intermediates/prefab_package_header_only/prefab_publication.json/debug📋
›../../out/androidx/test/ext/junit-gtest/build/intermediates/prefab_package_header_only/prefab_publication.json/release📋
99...@gmail.com <99...@gmail.com> #4
./gradlew zipTestConfigsWithApks
mm...@gmail.com <mm...@gmail.com> #5
./gradlew zipTestConfigsWithApks in the androidx project
Do you mean to run from androidx-main/frameworks/support
? If so, I did a run but it took too long and failed in the end with some 9 errors. Even if it finished successfully, it is too long for debug. Do we have to run that specific task or it can be reproduced with some lightweight task? If would be more helpful if we can even reproduce it in a sample project instead of using the androidx project.
Jomo, do you know where those cxx related files are being created? any pointers?
19...@gmail.com <19...@gmail.com> #6
The easiest is to probably just look at
in there see file system entry
. all of these files are treated as input to the configuration cache. There should be no entries to ../../out/
once all the plugins are fixed.
99...@gmail.com <99...@gmail.com> #7
Sadly, the report doesnt give you traces (I asked rodrigo from gradle to add it in the future version of gradle), so we only see it is coming from plugin 'com.android.internal.library'
xa...@android.com <xa...@android.com> #8
As far as I know, the most effective way to get the traces is to debug a build running with gradle by adding a break point here
99...@gmail.com <99...@gmail.com> #9
The folder path '../../out/androidx/appsearch/appsearch-local-storage/build/intermediates/cxx' originates from ProjectInfo::getIntermediatesDir() which is deprecated with a message that says "Use the version that returns a provider".
The files mentioned in
The files in
A question maybe for Ivan, I thought the tests under com.android.build.gradle.integration.ndk.* would fail if they violated configuration caching (I recall the original push for configuration caching required some of these tests to be temporarily exempted). Is there a new constraint arriving with Gradle 8.1? In other words, are these regressions or have they always existed? It might help narrow down the cause/fix.
da...@gmail.com <da...@gmail.com> #10
Re #8:
if you upgrade androidx to 8.1 and run the following:
./gradlew appsearch:appsearch-local-storage:assembleDebug
you'll get that code path triggered.
There is also the whole gerrit topic you can apply if you want the 8.2-alpha** agp.
Re #9:
Gradle now instruments all file calls (exists(), isDirectory(), etc) and makes them part of configuration cache input if it happens during the configuration. This is a new requirement starting 8.1
xa...@android.com <xa...@android.com> #11
Gradle now instruments all file calls (exists(), isDirectory(), etc) and makes them part of configuration cache input if it happens during the configuration. This is a new requirement starting 8.1
In that case, we should be able to find the issues directly by running tests under com.android.build.gradle.integration.ndk.* and failing when configuration caching misses now when it didn't before (I have no idea how to do that though).
xa...@android.com <xa...@android.com> #12
Note, this affects the second run, so you need to make sure the tests call for a second build and validate that there is a cache hit on the second run.
vo...@gmail.com <vo...@gmail.com> #14
Thanks for your input Jomo! Do you have some cycles helping us making cxx compatible with the new constraint of config caching?
Running build twice in a row for cxx integration tests like com.android.build.gradle.integration.ndk.*
and check if we have a config cache hit using
For example, add the following code at
val result = executor.run(":app:build${appBuildSystem.build}Debug[arm64-v8a]")
result.assertConfigurationCacheHit()
The way recommended by Gradle is to fix is to do the file calls inside ValueSource
. AGP has a "helper" class
be...@gmail.com <be...@gmail.com> #15
Add more details on debugging gradle on top of
- download the latest gradle source code from
https://github.com/gradle/gradle/blob/master/CONTRIBUTING.md and open it in intellij - create a remote debugger with port
5005
in the gradle project - build a sample project from command line with
-Dorg.gradle.debug=true --no-daemon
- run the debugger from the gradle project
br...@16cards.com <br...@16cards.com> #16
For /ssd/ssd5/androidx-main/frameworks/support/.cxx/structured-log
trace is the following
fileIsDirectory:382, Instrumented (org.gradle.internal.classpath)
intercept_isDirectory:88, FileInterceptorsDeclaration (org.gradle.internal.classpath.declarations)
<init>:49, IssueReporterLoggingEnvironment (com.android.build.gradle.internal.cxx.logging)
<init>:68, IssueReporterLoggingEnvironment (com.android.build.gradle.internal.cxx.logging)
createCxxTasks:87, CxxCreateGradleTasksKt (com.android.build.gradle.internal.cxx.configure)
createTopLevelTasks:211, VariantTaskManager (com.android.build.gradle.internal)
createTopLevelTasks:84, ApplicationTaskManager (com.android.build.gradle.internal.tasks)
createTasks:135, VariantTaskManager (com.android.build.gradle.internal)
createAndroidTasks:720, BasePlugin (com.android.build.gradle.internal.plugins)
call:596, BasePlugin$createTasks$2$1 (com.android.build.gradle.internal.plugins)
record:69, ThreadRecorder (com.android.builder.profile)
record:54, ThreadRecorder (com.android.builder.profile)
recordBlockAtConfiguration:224, AnalyticsResourceManager (com.android.build.gradle.internal.profile)
recordBlock:91, AnalyticsConfiguratorService (com.android.build.gradle.internal.profile)
accept:591, BasePlugin$createTasks$2 (com.android.build.gradle.internal.plugins)
accept:588, BasePlugin$createTasks$2 (com.android.build.gradle.internal.plugins)
execute:37, CrashReporting$afterEvaluate$1 (com.android.build.gradle.internal.crash)
execute:35, CrashReporting$afterEvaluate$1 (com.android.build.gradle.internal.crash)
execute:123, DefaultUserCodeApplicationContext$CurrentApplication$1 (org.gradle.configuration.internal)
run:171, DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction$1 (org.gradle.configuration.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)
execute:168, DefaultListenerBuildOperationDecorator$BuildOperationEmittingAction (org.gradle.configuration.internal)
dispatch:97, BroadcastDispatch$ActionInvocationHandler (org.gradle.internal.event)
dispatch:85, BroadcastDispatch$ActionInvocationHandler (org.gradle.internal.event)
dispatch:43, AbstractBroadcastDispatch (org.gradle.internal.event)
dispatch:257, BroadcastDispatch$SingletonDispatch (org.gradle.internal.event)
dispatch:164, BroadcastDispatch$SingletonDispatch (org.gradle.internal.event)
dispatch:83, AbstractBroadcastDispatch (org.gradle.internal.event)
dispatch:69, AbstractBroadcastDispatch (org.gradle.internal.event)
dispatch:363, BroadcastDispatch$CompositeDispatch (org.gradle.internal.event)
dispatch:261, BroadcastDispatch$CompositeDispatch (org.gradle.internal.event)
dispatch:148, ListenerBroadcast (org.gradle.internal.event)
dispatch:37, ListenerBroadcast (org.gradle.internal.event)
invoke:94, ProxyDispatchAdapter$DispatchingInvocationHandler (org.gradle.internal.dispatch)
afterEvaluate:-1, $Proxy78 (jdk.proxy1)
execute:247, LifecycleProjectEvaluator$NotifyAfterEvaluate$1 (org.gradle.configuration.project)
execute:244, LifecycleProjectEvaluator$NotifyAfterEvaluate$1 (org.gradle.configuration.project)
stepEvaluationListener:1483, DefaultProject (org.gradle.api.internal.project)
run:253, LifecycleProjectEvaluator$NotifyAfterEvaluate (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)
lambda$run$0:114, LifecycleProjectEvaluator$EvaluateProject (org.gradle.configuration.project)
accept:-1, LifecycleProjectEvaluator$EvaluateProject$$Lambda$1453/0x00000008015f0dc0 (org.gradle.configuration.project)
lambda$applyToMutableState$1:395, DefaultProjectStateRegistry$ProjectStateImpl (org.gradle.api.internal.project)
apply:-1, DefaultProjectStateRegistry$ProjectStateImpl$$Lambda$1419/0x00000008015bf550 (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:779, 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$1450/0x00000008015eb3c0 (org.gradle.api.internal.project)
lambda$doTransition$14:255, StateTransitionController (org.gradle.internal.model)
get:-1, StateTransitionController$$Lambda$375/0x0000000801009798 (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$1451/0x00000008015eb5e8 (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)
configureHierarchy:49, TaskPathProjectEvaluator (org.gradle.execution)
getSelection:61, DefaultTaskSelector (org.gradle.execution)
resolveTaskName:98, DefaultBuildTaskSelector (org.gradle.execution.selection)
parseTasks:49, CommandLineTaskParser (org.gradle.execution.commandline)
scheduleRequestedTasks:50, TaskNameResolvingBuildTaskScheduler (org.gradle.execution)
scheduleRequestedTasks:72, DefaultTasksBuildTaskScheduler (org.gradle.execution)
lambda$scheduleRequestedTasks$0:46, DefaultTaskExecutionPreparer (org.gradle.initialization)
run:-1, DefaultTaskExecutionPreparer$$Lambda$1824/0x000000080181b328 (org.gradle.initialization)
create:31, Factories$1 (org.gradle.internal)
withReplacedLocks:345, 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$1823/0x000000080181b100 (org.gradle.initialization)
lambda$inState$1:99, StateTransitionController (org.gradle.internal.model)
get:-1, StateTransitionController$$Lambda$326/0x0000000800fd3838 (org.gradle.internal.model)
lambda$inState$2:114, StateTransitionController (org.gradle.internal.model)
create:-1, StateTransitionController$$Lambda$327/0x0000000800fd3a60 (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:282, DefaultBuildLifecycleController$DefaultWorkGraphBuilder (org.gradle.internal.build)
lambda$scheduleRequestedTasks$0:38, DefaultBuildTreeWorkPreparer (org.gradle.internal.buildtree)
accept:-1, DefaultBuildTreeWorkPreparer$$Lambda$1818/0x0000000801818600 (org.gradle.internal.buildtree)
lambda$populateWorkGraph$7:178, DefaultBuildLifecycleController (org.gradle.internal.build)
accept:-1, DefaultBuildLifecycleController$$Lambda$1822/0x000000080181a3b0 (org.gradle.internal.build)
populateWorkGraph:42, DefaultBuildWorkPreparer (org.gradle.internal.build)
populateTaskGraph:115, BuildOperationFiringBuildWorkPreparer$PopulateWorkGraph (org.gradle.internal.build)
run:101, 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:74, BuildOperationFiringBuildWorkPreparer (org.gradle.internal.build)
lambda$populateWorkGraph$8:178, DefaultBuildLifecycleController (org.gradle.internal.build)
run:-1, DefaultBuildLifecycleController$$Lambda$1821/0x000000080181a188 (org.gradle.internal.build)
lambda$inState$1:99, StateTransitionController (org.gradle.internal.model)
get:-1, StateTransitionController$$Lambda$326/0x0000000800fd3838 (org.gradle.internal.model)
lambda$inState$2:114, StateTransitionController (org.gradle.internal.model)
create:-1, StateTransitionController$$Lambda$327/0x0000000800fd3a60 (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:178, DefaultBuildLifecycleController (org.gradle.internal.build)
populateWorkGraph:167, DefaultBuildWorkGraphController$DefaultBuildWorkGraph (org.gradle.internal.build)
populateWorkGraph:73, DefaultBuildController (org.gradle.composite.internal)
withWorkGraph:150, DefaultIncludedBuildTaskGraph$DefaultBuildTreeWorkGraphBuilder (org.gradle.composite.internal)
lambda$scheduleRequestedTasks$1:38, DefaultBuildTreeWorkPreparer (org.gradle.internal.buildtree)
accept:-1, DefaultBuildTreeWorkPreparer$$Lambda$1817/0x000000080180bc48 (org.gradle.internal.buildtree)
run:197, 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:192, DefaultIncludedBuildTaskGraph$DefaultBuildTreeWorkGraph (org.gradle.composite.internal)
scheduleRequestedTasks:37, DefaultBuildTreeWorkPreparer (org.gradle.internal.buildtree)
invoke:41, ConfigurationCacheAwareBuildTreeWorkController$scheduleAndRunRequestedTasks$executionResult$1$result$1 (org.gradle.configurationcache)
invoke:40, ConfigurationCacheAwareBuildTreeWorkController$scheduleAndRunRequestedTasks$executionResult$1$result$1 (org.gradle.configurationcache)
invoke:134, DefaultConfigurationCache$loadOrScheduleRequestedTasks$1 (org.gradle.configurationcache)
invoke:133, DefaultConfigurationCache$loadOrScheduleRequestedTasks$1 (org.gradle.configurationcache)
runWorkThatContributesToCacheEntry:296, DefaultConfigurationCache (org.gradle.configurationcache)
loadOrScheduleRequestedTasks:133, DefaultConfigurationCache (org.gradle.configurationcache)
apply:40, ConfigurationCacheAwareBuildTreeWorkController$scheduleAndRunRequestedTasks$executionResult$1 (org.gradle.configurationcache)
apply:39, ConfigurationCacheAwareBuildTreeWorkController$scheduleAndRunRequestedTasks$executionResult$1 (org.gradle.configurationcache)
withNewWorkGraph:109, DefaultIncludedBuildTaskGraph (org.gradle.composite.internal)
scheduleAndRunRequestedTasks:39, ConfigurationCacheAwareBuildTreeWorkController (org.gradle.configurationcache)
lambda$scheduleAndRunTasks$1:68, DefaultBuildTreeLifecycleController (org.gradle.internal.buildtree)
get:-1, DefaultBuildTreeLifecycleController$$Lambda$329/0x0000000800fd1480 (org.gradle.internal.buildtree)
lambda$runBuild$4:98, DefaultBuildTreeLifecycleController (org.gradle.internal.buildtree)
get:-1, DefaultBuildTreeLifecycleController$$Lambda$330/0x0000000800fd16a8 (org.gradle.internal.buildtree)
lambda$transition$6:169, StateTransitionController (org.gradle.internal.model)
get:-1, StateTransitionController$$Lambda$332/0x0000000800fd1af8 (org.gradle.internal.model)
doTransition:266, StateTransitionController (org.gradle.internal.model)
lambda$transition$7:169, StateTransitionController (org.gradle.internal.model)
create:-1, StateTransitionController$$Lambda$331/0x0000000800fd18d0 (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/0x0000000800fbb048 (org.gradle.launcher.exec)
run:122, 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$171/0x0000000800e32f08 (org.gradle.launcher.exec)
run:53, 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$168/0x0000000800e11160 (org.gradle.launcher.exec)
withLocks:249, DefaultWorkerLeaseService (org.gradle.internal.work)
runAsWorkerThread:109, 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:100, BuildSessionLifecycleBuildActionExecuter$ActionImpl (org.gradle.tooling.internal.provider)
apply:88, 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:50, SessionFailureReportingActionExecuter (org.gradle.tooling.internal.provider)
execute:38, 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:49, ManagedExecutorImpl$1 (org.gradle.internal.concurrent)
runWorker:1136, ThreadPoolExecutor (java.util.concurrent)
run:635, ThreadPoolExecutor$Worker (java.util.concurrent)
run:833, Thread (java.lang)
Description
- Steps to reproduce the problem (including sample code if appropriate).
(1) The attachment bug_android_sdk_21.zip contains 2 sample projects: y and ylib.
(2) Project y depends on project ylib. These 2 projects use the same package name "com.y" in their AndroidManifest.xml.
(3) Define a string in project y/res/values/strings.xml: str_y.
(4) Define an Activity in project y/src/com/y/HomeActivity.java and this activity reference the string stry_y.
- What happened.
(1) In command line, run "ant debug" and will get the error messages as below:
-compile:
[javac] Compiling 3 source files to /home/somewhere/y/bin/classes
[javac] /home/somewhere/y/src/com/y/HomeActivity.java:12: cannot find symbol
[javac] symbol : variable str_y
[javac] location: class com.y.R.string
[javac] setTitle(R.string.str_y);
[javac] ^
[javac] 1 error
(2) While check the y/gen/com/y/R.java, I found the str_y is not generated. All the resources id in y/gen/com/y/R.java actually reference the resources in the library project ylib/res.
(3) The Eclipse ADT can successfully build the attached project with no problem.
- What you think the correct behavior should be.
The ant build should treat the project the same way as the Eclipse.
It's true if I change the library project with a different package name in the AndroidManifest.xml, then I can build it successfully. But this is painful for some big projects rather than the sample projects because we have to tweak all the xxx.R import in the library projects and some of the feature we implemented rely on the "resource override" behavior: e.g. lib project is shared by several app projects and lib define some layout layout_abc.xml, A and B projects all have defined their own layout_abc.xml. And the java code in lib project reference the layout_abc. For this use case, all the related source code will have to be refactored.
This subtle bug is bad. Please fix this as soon as possible.
And it would be great if you can give us some advice or workaround (e.g. turn on some option using some properties so we can use the same way to build by ant).
Thanks!