Gradle second build fails after changing styles.xml

I migrated the project to use Gradle (using the old Android project structure). I recently upgraded Android Studio to version 2.0, which forced me to use the android Gradle v0.5 plugin. I can build my project using any of the options that I defined, or during debugging / release.

Something went wrong for me using the following script:

  • Perform cooling towing
  • Run an engraving assembleTestenvDebug
  • Gradle output:

CREATE SUCCESSFULLY

  • Change any value in styles.xml
  • Engrave assembleTestenvDebug (again)
  • Gradle output:

/Users/myuser/Project/src/com/namespace/project/views/SomeCustomView.java:60: error: could not find the character mSize = arr.getInt (R.styleable.SomeCustomView_some_custom_styleable, 0);

Gradle now complains about every custom xml attribute that I declared in attrs.xml. It drives me crazy, as I have to clean and rebuild the project every time I change styles.xml

Please help me.

Thanks!

My project structure:

- Project - . AndroidManifest.xml - . assets/ - . build/ - . build.gradle - . gen/ - . gradle/ - . gradle.properties - . gradlew - . libs (includes .jar files) - . modules - . . library_projectA - . . library_projectB - . out - . project.properties - . res - . res_testenv - . . values - . . . strings.xml - . res_prodenv - . . values - . . . strings.xml - . settings.gradle - . src/ - . . com/ - . . . namespace/ - . . . . android/ 

build.gradle in the project directory:

 task wrapper(type: Wrapper) { gradleVersion = '1.6' } buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.5.+' } } apply plugin: 'android' dependencies { compile 'com.android.support:support-v4:13.0.0' compile fileTree(dir: 'libs', include: '*.jar') compile project(':modules:libprojectA') compile project(':modules:libprojectB') } android { compileSdkVersion 17 buildToolsVersion "17.0.0" defaultConfig { minSdkVersion 10 targetSdkVersion 17 } signingConfigs { release { } } buildTypes { debug { runProguard false } alphaRelease { runProguard false zipAlign true signingConfig signingConfigs.release } release { runProguard true proguardFile 'proguard-project.txt' signingConfig signingConfigs.release } } productFlavors { testenv {} prodenv {} } sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] res.srcDirs = ['res'] assets.srcDirs = ['assets'] aidl.srcDirs = ['src'] } testenv {} prodenv {} } android.sourceSets.testenv { res.srcDirs = ['res_test'] } android.sourceSets.prodenv { res.srcDirs = ['res_prod'] } } if (project.hasProperty('storeFile') && project.hasProperty('storePassword') && project.hasProperty('keyAlias') && project.hasProperty('keyPassword')) { android.signingConfigs.release.storeFile = file(storeFile) android.signingConfigs.release.storePassword = storePassword android.signingConfigs.release.keyAlias = keyAlias android.signingConfigs.release.keyPassword = keyPassword } 

and build.gradle for each of the library projects:

 buildscript { repositories { mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:0.5.+' } } apply plugin: 'android-library' dependencies { compile 'com.android.support:support-v4:13.0.0' } android { compileSdkVersion 17 buildToolsVersion "17.0.0" defaultConfig { minSdkVersion 10 targetSdkVersion 17 } sourceSets { main { manifest.srcFile 'AndroidManifest.xml' java.srcDirs = ['src'] resources.srcDirs = ['src'] res.srcDirs = ['res'] } } } 

Attached stacktrace:

org.gradle.api.tasks.TaskExecutionException: Execution completed for task ': compileTestenvDebug'. at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions (ExecuteActionsTaskExecuter.java:69) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute (ExecuteActionsTaskExecuter.gava .api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute (PostExecutionAnalysisTaskExecuter.java:35) at org.gradle.api.internal.changedetection.state.CacheLockReleasingTaskExecuter $ 1.run (CacheLockReleasing.gacheec.ec Factories $ 1.create (Factories.java:22) at org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation (DefaultCacheAccess.java:179) at org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation (DefaultCacheAccess.java:232) at org.gradle.cache.internal.DefaultPersistentDirectoryStore.longRunningOperation (DefaultPersistentDirectoryStore.java:142) at org.gradle.api.internal.changedetection.state.DefaultTaskArtifactStateCacheAccess.longRunni ngOperation (DefaultTaskArtifactStateCacheAccess.java:83) at org.gradle.api.internal.changedetection.state.CacheLockReleasingTaskExecuter.execute (CacheLockReleasingTaskExecuter.java:33) on org.gradle.api.internal.tasks.execececececececececececececececececececececec java: 58) at org.gradle.api.internal.tasks.execution.ContextualisingTaskExecuter.execute (ContextualisingTaskExecuter.java:34) at org.gradle.api.internal.changedetection.state.CacheLockAcquiringTaskExecuter $ 1.run (CacheLaskAcquiring.c ) at org.gradle.internal.Factories $ 1.create (Factories.java:22) at org.gradle.cache.internal.DefaultCacheAccess.useCache (DefaultCacheAccess.java:124) at org.gradle.cache.internal.DefaultCacheAccess.useCache (DefaultCacheAccess.java:112) at org.gradle.cache.internal.DefaultPersistentDirectoryStore.useCache (DefaultPersistentDirectoryStore.java:134) at org.gradle.api.internal.changedetection.state.DefaultTaskArtifactStateCac heAccess.useCache (DefaultTaskArtifactStateCacheAccess.java:79) at org.gradle.api.internal.changedetection.state.CacheLockAcquiringTaskExecuter.execute (CacheLockAcquiringTaskExecuter.java:37) at org.gradle.api.inecexecal.tecidecidecidecidid ValidatingTaskExecuter.java:57) on org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute (SkipEmptySourceFilesTaskExecuter.java:41) on org.gradle.api.internal.tasks.execution.SkipTaskWithNecoececoecececoececoecececoececoecexececnotecoecexecececec 51) at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute (SkipOnlyIfTaskExecuter.java:52) at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.executeOututeAuta Usautaask .gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure (AbstractTask.java:282) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.executeTask (DefaultTaskPlanExecutor. java: 48) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.processTask (DefaultTaskPlanExecutor.java:34) at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process (DefaultTaskPlanExecutor.java:27) at org.gradleaskgraph.execution .DefaultTaskGraphExecuter.execute (DefaultTaskGraphExecuter.java:89) at org.gradle.execution.SelectedTaskExecutionAction.execute (SelectedTaskExecutionAction.java:29) at org.gradle.execution.DefaultBuildExecuter.execute (defaultBuild. execution.DefaultBuildExecuter.access $ 200 (DefaultBuildExecuter.java:23) at org.gradle.execution.DefaultBuildExecuter $ 2.proceed (DefaultBuildExecuter.java:67) at org.gradle.api.internal.changedetection.state.TaskCacheLockHandlingBuildecueclund .java: 31) at org.gradle.internal.Factories $ 1.create (Factories.java:22) at org.gradle.cache.internal.DefaultCacheAccess.useCache (DefaultCacheAccess.java:124) at org. gradle.cache.internal.DefaultCacheAccess.useCache (DefaultCacheAccess.java:112) at org.gradle.cache.internal.DefaultPersistentDirectoryStore.useCache (DefaultPersistentDirectoryStore.java:134) at org.gradle.api.internal.changedetectionTateachefault useCache (DefaultTaskArtifactStateCacheAccess.java:79) at org.gradle.api.internal.changedetection.state.TaskCacheLockHandlingBuildExecuter.execute (TaskCacheLockHandlingBuildExecuter.java:29) at org.gradle.execececuterutuoglebildild .gradle.execution.DefaultBuildExecuter.access $ 200 (DefaultBuildExecuter.java:23) at org.gradle.execution.DefaultBuildExecuter $ 2.proceed (DefaultBuildExecuter.java:67) at org.gradle.execution.DryRunBuildExecutionAction.execute ) at org.gradle.execution.DefaultBuildExecuter.execute (DefaultBuildExecuter.java:61) at org.gradle.execution.DefaultBuildExecuter.execute (DefaultBui ldExecuter.java:54) at org.gradle.initialization.DefaultGradleLauncher.doBuildStages (DefaultGradleLauncher.java:166) at org.gradle.initialization.DefaultGradleLauncher.doBuild (DefaultGradleLauncher.java:113) at org.gleleralallelerallelealallele.glelealallelealalleleleal.glele.Default.glle.dl. (DefaultGradleLauncher.java:81) at org.gradle.launcher.exec.InProcessBuildActionExecuter $ DefaultBuildController.run (InProcessBuildActionExecuter.java:64) at org.gradle.launcher.cli.ExecuteBuildAction.run (Executeju gradle.launcher.cli.ExecuteBuildAction.run (ExecuteBuildAction.java:24) on org.gradle.launcher.exec.InProcessBuildActionExecuter.execute (InProcessBuildActionExecuter.java:35) on org.gradle.launcher.exec.Execececilduild java: 26) on org.gradle.launcher.cli.RunBuildAction.run (RunBuildAction.java:50) at org.gradle.api.internal.Actions $ RunnableActionAdapter.execute (Actions.java:171) at org.gradle .launcher.cli.CommandLineActionFactory $ ParseAndBuildAction.execute (CommandLineActionFactory.java:201) at org.gradle.launcher.cli.CommandLineActionFactory $ ParseAndBuildAction.execute. Commandlaory.LaFlory. Atom .execute (CommandLineActionFactory.java:170) at org.gradle.launcher.cli.CommandLineActionFactory $ WithLogging.execute (CommandLineActionFactory.java:139) at org.gradle.launcher.cli.ExceptionReportingAction.execute (ExceptionReportingAction org.gradle.launcher.cli.ExceptionReportingAction.execute (ExceptionReportingAction.java:22) at org.gradle.launcher.Main.doAction (Main.java:48) at org.gradle.launcher.bootstrap.EntryPoint.run (EntryPoint. java: 45) on org.gradle.launcher.Main.main (Main.java:39) on org.gradle.launcher.bootstrap.ProcessBootstrap.runNoExit (ProcessBootstrap.java:50) on org.gradle.launcher.bootstrap.ProcessBootstrap .run (ProcessBootstrap.ja va: 32) at org.gradle.launcher.GradleMain.main (GradleMain.java:26) at org.gradle.wrapper.BootstrapMainStarter.start (BootstrapMainStarter.java:33) at org.gradle.wrapper.WrapperExecutor.execute (WrapperExecutor .java: 130) on org.gradle.wrapper.GradleWrapperMain.main (GradleWrapperMain.java:48) Called: org.gradle.api.internal.tasks.compile.CompilationFailedException: compiled; see compiler error output. at org.gradle.api.internal.tasks.compile.jdk6.Jdk6JavaCompiler.execute (Jdk6JavaCompiler.java:42) at org.gradle.api.internal.tasks.compile.jdk6.Jdk6JavaCompiler.execute (Jdk6JavaCompiler.j at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.delegateAndHandleErrors (NormalizingJavaCompiler.java:95) at org.gradle.api.internal.tasks.compile.NormalizingJavaCompiler.execute (NormalizingJavaCompiler.java:48) .api.internal.tasks.compile.NormalizingJavaCompiler.execute (NormalizingJavaCompiler.java:34) at org.gradle.api.internal.tasks.compile.DelegatingJavaCompiler.execute (DelegatingJavaCompiler.java:29) at org.gradle.api.internal .tasks.compile.DelegatingJavaCompiler.execute (DelegatingJavaCompiler.java:20) at org.gradle.api.internal.tasks.compile.IncrementalJavaCompilerSupport.execute (IncrementalJavaCompilerSupport.java:33) at org.gradle.api.internal.tasks.com .IncrementalJavaCompilerSupport.execute (IncrementalJavaCompi lerSupport.java:24) at org.gradle.api.tasks.compile.Compile.compile (Compile.java:68) at org.gradle.api.internal.BeanDynamicObject $ MetaClassAdapter.invokeMethod (BeanDynamicObject.java:216) at org .gradle.api.internal.BeanDynamicObject.invokeMethod (BeanDynamicObject.Java: 122) at org.gradle.api.internal.CompositeDynamicObject.invokeMethod (CompositeDynamicObject.java:147) at org.gradle.api.jorescompile.pore.pore.pore.pocompile.pocompilepile.pocompilepile.pocompile.pocompilepile.pocompile.pocompile.pile.pile (Unknown source) at org.gradle.util.ReflectionUtil.invoke (ReflectionUtil.groovy: 23) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory $ StandardTaskAction.doExecute (AnnotationProcessingTaskFactory.java.grad .api.internal.project.taskfactory.AnnotationProcessingTaskFactory $ StandardTaskAction.execute (AnnotationProcessingTaskFactory.java:210) at org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory $ StandardTaskActionexecute ationProcessingTaskFactory.java:199) at org.gradle.api.internal.AbstractTask $ TaskActionWrapper.execute (AbstractTask.java∗26) at org.gradle.api.internal.AbstractTask $ TaskActionWrapper.execute (AbstractTask.java:509) .gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction (ExecuteActionsTaskExecuter.java:80) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions (ExecuteActionsTaskExecuter.ava ... 70

+6
source share
2 answers

This is fixed in 0.5.4, which is available now.

+2
source

I have a theory, but I could be wrong.

Looking for a user guide I do not see any mention of adding custom source sets directly. This may mean that the build system does not detect changes to sourceSets, such as testenv , unless it is part of the taste or type of build.

I would try to define your environment as a group of taste. Not sure about your specific requirements, but it might look something like this:

 flavorGroups "environment", "flavors" productFlavors { testenv { flavorGroup "environment" } prodenv { flavorGroup "environment" } flavorA { flavorGroup "flavors" ... } flavorB { flavorGroup "flavors" ... } 

This suggests that you need an assembly that may consist of these two, for example app-flavor1-testenv-debug.apk . Just a thought though, I did not test it.

Also, if you get this working, I would recommend switching to a new layout. So you can rely on the src/main/res conventions merging with src/testenv/res and src/debug/res if they exist, without even mentioning them in build.gradle .

+2
source

Source: https://habr.com/ru/post/949529/


All Articles