So, I have implemented the option. 

At first glance everything seems ok. 

Main source set:
*styles.xml*

> ...
> <style name="button_text_style" parent="button_text_style_base"/>
> <style name="button_text_style_base" >
>         <item name="android:textSize">@dimen/btn_txt_size</item>
>         <item name="android:textColor">@color/btn_txt_color</item>
>         <item name="android:textStyle">*bold*</item>
> </style>
> …


Some flavor's source set:
*styles.xml*

> ...
> <style name="button_text_style" parent="button_text_style_base">
>         <item name="android:textStyle">*italic*</item>
> </style>
> …

.

So, I obtain 

*styles.xml*

> ...
> <style name="button_text_style" parent="button_text_style_base">
>         <item name="android:textStyle">*italic*</item>
> </style>
> <style name="button_text_style_base">
>         <item name="android:textSize">@dimen/btn_txt_size</item>
>         <item name="android:textColor">@color/btn_txt_color</item>
>         <item name="android:textStyle">*bold*</item>
> </style>
> …


which is equivalent to 

> ...
> <style name="button_text_style">
>         <item name="android:textSize">@dimen/btn_txt_size</item>
>         <item name="android:textColor">@color/btn_txt_color</item>
>         <item name="android:textStyle">*italic*</item>
> </style>
> ...

.
That's what I need.


BUT!

When I try to build it, I get the error saying that resources from 
ActionBarSherlock's could not be found (error message attached).
The error occurs after several clean launches with new styles (maybe some 
gradle cache problems?).
After error occurs, there are two ways to fix it:

   1. revert styles to the old way they were dfeclared (without '_base' 
   styles) 
   2. add 'res' folders of all AARs to the main source set like this:
   
    

>     android {
>         ...
>         // Add resources of all aar dependencies to the main sourceSet to 
> workaround bug where aar resources could not be found
>         project.configurations.compile.allDependencies.each { dep ->
>             if (project.configurations.compile.findAll { 
> it.path.contains(dep.name) && it.path.contains('.aar')}.size() > 0) {
>                 def groupName = dep.group.split('\\.').collect { 
> it.capitalize() }.join()
>                 def artifactName = dep.name.capitalize()
>                 def versionName = dep.version.replace('.', 
> '').replace('-', '')
>                 def dependencyResourcesPath = 
> "$buildDir/exploded-bundles/${groupName}${artifactName}${versionName}.aar/res"
>                 // Fix for bug where resources for aar could not be found
>                 android.sourceSets {
>                     main.res.srcDir "$dependencyResourcesPath"
>                 }
>             }
>         }
>         ...
>     }


I'm using the second solution, but it looks like a terrible hack. 

Is this a known problem?


On Thursday, December 12, 2013 9:08:28 PM UTC+3, Anton Rutkevich wrote:
>
> Thanks for response, Xavier!
>
> This option sounds good to me. I'll try to implement it.
>
> On Thursday, December 12, 2013 7:45:07 PM UTC+3, Xavier Ducrohet wrote:
>>
>> No it's not possible to do exactly that.
>>
>> However I think you could create a base style, that contains the default 
>> values, then in the main source set, you have a style extending it (but 
>> likely doing nothing). In the flavor you can then extend it and override 
>> what you need.
>>
>> This would have to be tested though, but I think this could work.
>>
>>
>> On Thu, Dec 12, 2013 at 6:28 AM, Anton Rutkevich <[email protected]>wrote:
>>
>>> Hi everyone, 
>>>
>>> is it possible to merge resources with overriding?
>>> Given:
>>>
>>> Main source set:
>>> *styles.xml*
>>>
>>>> ...
>>>> <style name="button_text_style">
>>>>         <item name="android:textSize">@dimen/btn_txt_size</item>
>>>>         <item name="android:textColor">@color/btn_txt_color</item>
>>>>         <item name="android:textStyle">bold</item>
>>>> </style>
>>>> …
>>>
>>>
>>> Some flavor's source set:
>>> *styles.xml*
>>>
>>>> ...
>>>> <style name="button_text_style">
>>>>         <item name="android:textStyle">italic</item>
>>>> </style>
>>>> …
>>>
>>> .
>>>
>>> Is it possible to obtain 
>>>
>>> *styles.xml*
>>>
>>>> ...
>>>> <style name="button_text_style">
>>>>         <item name="android:textSize">@dimen/btn_txt_size</item>
>>>>         <item name="android:textColor">@color/btn_txt_color</item>
>>>>         <item name="android:textStyle">italic</item>
>>>> </style>
>>>> …
>>>
>>>
>>> ?
>>>
>>> The actual result I have is
>>> *styles.xml*
>>>
>>>> ...
>>>> <style name="button_text_style">
>>>>         <item name="android:textStyle">italic</item>
>>>> </style>
>>>> …
>>>
>>>  -- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "adt-dev" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to [email protected].
>>> For more options, visit https://groups.google.com/groups/opt_out.
>>>
>>
>>
>>
>> -- 
>> Xavier Ducrohet
>> Android SDK Tech Lead
>> Google Inc.
>> http://developer.android.com | http://tools.android.com
>>
>> Please do not send me questions directly. Thanks! 
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"adt-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.
...

Executing task ':my-lib:processReleaseResources' (up-to-date check took 0.056 
secs) due to:
  Output file /Users/me/sources/myproject/my-lib/build/libs/my-lib-release.ap_ 
has changed.
  Output file /Users/me/sources/myproject/my-lib/build/source/r/release has 
changed.
  Output file 
/Users/me/sources/myproject/my-lib/build/source/r/release/com/me/mylib/R.java 
has been removed.
command: /Users/me/dev/android-sdk/build-tools/19.0.0/aapt package -f 
--no-crunch -I /Users/me/dev/android-sdk/platforms/android-18/android.jar -M 
/Users/me/sources/myproject/my-lib/build/bundles/release/AndroidManifest.xml -S 
/Users/me/sources/myproject/my-lib/build/res/all/release -A 
/Users/me/sources/myproject/my-lib/build/bundles/release/assets -m -J 
/Users/me/sources/myproject/my-lib/build/source/r/release -F 
/Users/me/sources/myproject/my-lib/build/libs/my-lib-release.ap_ 
--non-constant-id --output-text-symbols 
/Users/me/sources/myproject/my-lib/build/bundles/release
/Users/me/sources/myproject/my-lib/build/res/all/release/values/values.xml:631: 
error: Error retrieving parent for item: No resource found that matches the 
given name 'Widget.Sherlock.ActionBar'.
/Users/me/sources/myproject/my-lib/build/res/all/release/values/values.xml:634: 
error: Error: No resource found that matches the given name: attr 'background'.
/Users/me/sources/myproject/my-lib/build/res/all/release/values/values.xml:636: 
error: Error: No resource found that matches the given name: attr 
'backgroundSplit'.
/Users/me/sources/myproject/my-lib/build/res/all/release/values/values.xml:635: 
error: Error: No resource found that matches the given name: attr 
'backgroundStacked'.
/Users/me/sources/myproject/my-lib/build/res/all/release/values/values.xml:637: 
error: Error: No resource found that matches the given name: attr 'divider'.
/Users/me/sources/myproject/my-lib/build/res/all/release/values/values.xml:639: 
error: Error: No resource found that matches the given name: attr 
'indeterminateProgressStyle'.
/Users/me/sources/myproject/my-lib/build/res/all/release/values/values.xml:641: 
error: Error: No resource found that matches the given name: attr 'itemPadding'.
/Users/me/sources/myproject/my-lib/build/res/all/release/values/values.xml:640: 
error: Error: No resource found that matches the given name: attr 
'progressBarPadding'.
/Users/me/sources/myproject/my-lib/build/res/all/release/values/values.xml:638: 
error: Error: No resource found that matches the given name: attr 
'progressBarStyle'.
/Users/me/sources/myproject/my-lib/build/res/all/release/values/values.xml:633: 
error: Error: No resource found that matches the given name: attr 
'subtitleTextStyle'.
/Users/me/sources/myproject/my-lib/build/res/all/release/values/values.xml:632: 
error: Error: No resource found that matches the given name: attr 
'titleTextStyle'.
/Users/me/sources/myproject/my-lib/build/res/all/release/values/values.xml:646: 
error: Error retrieving parent for item: No resource found that matches the 
given name 'Widget.Sherlock.ActionButton'.
/Users/me/sources/myproject/my-lib/build/res/all/release/values/values.xml:656: 
error: Error retrieving parent for item: No resource found that matches the 
given name 'Widget.Sherlock.ActionBar.TabView'.
/Users/me/sources/myproject/my-lib/build/res/all/release/values/values.xml:669: 
error: Error: No resource found that matches the given name: attr 
'actionBarStyle'.
/Users/me/sources/myproject/my-lib/build/res/all/release/values/values.xml:670: 
error: Error: No resource found that matches the given name: attr 
'actionBarTabBarStyle'.
/Users/me/sources/myproject/my-lib/build/res/all/release/values/values.xml:666: 
error: Error: No resource found that matches the given name: attr 
'actionBarTabStyle'.
/Users/me/sources/myproject/my-lib/build/res/all/release/values/values.xml:668: 
error: Error: No resource found that matches the given name: attr 
'actionBarTabTextStyle'.
/Users/me/sources/myproject/my-lib/build/res/all/release/values/values.xml:667: 
error: Error: No resource found that matches the given name: attr 
'actionButtonStyle'.
/Users/me/sources/myproject/my-lib/build/res/all/release/values/values.xml:672: 
error: Error: No resource found that matches the given name: attr 
'actionOverflowButtonStyle'.
/Users/me/sources/myproject/my-lib/build/res/all/release/values/values.xml:671: 
error: Error: No resource found that matches the given name: attr 
'homeAsUpIndicator'.
/Users/me/sources/myproject/my-lib/build/res/all/release/values/values.xml:682: 
error: Error retrieving parent for item: No resource found that matches the 
given name 'Theme.Sherlock.NoActionBar'.
/Users/me/sources/myproject/my-lib/build/res/all/release/values/values.xml:837: 
error: Error retrieving parent for item: No resource found that matches the 
given name 'Theme.Sherlock'.
/Users/me/sources/myproject/my-lib/build/res/all/release/values/values.xml:858: 
error: Error retrieving parent for item: No resource found that matches the 
given name 'Theme.Sherlock'.
:my-lib:processReleaseResources FAILED
:my-lib:processReleaseResources (Thread[Daemon Thread 6,5,main]) completed. 
Took 0.459 secs.

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':my-lib:processReleaseResources'.
> Could not call IncrementalTask.taskAction() on task 
> ':my-lib:processReleaseResources'

* Try:
Run with --debug option to get more log output.

* Exception is:
org.gradle.api.tasks.TaskExecutionException: Execution failed for task 
':my-lib:processReleaseResources'.
    at 
org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
    at 
org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    at 
org.gradle.api.internal.tasks.execution.PostExecutionAnalysisTaskExecuter.execute(PostExecutionAnalysisTaskExecuter.java:35)
    at 
org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:64)
    at 
org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:58)
    at 
org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:42)
    at 
org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:52)
    at 
org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:53)
    at 
org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
    at 
org.gradle.api.internal.AbstractTask.executeWithoutThrowingTaskFailure(AbstractTask.java:283)
    at 
org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.executeTask(AbstractTaskPlanExecutor.java:79)
    at 
org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.processTask(AbstractTaskPlanExecutor.java:63)
    at 
org.gradle.execution.taskgraph.AbstractTaskPlanExecutor$TaskExecutorWorker.run(AbstractTaskPlanExecutor.java:51)
    at 
org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$1.run(DefaultTaskPlanExecutor.java:33)
    at org.gradle.internal.Factories$1.create(Factories.java:22)
    at 
org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(DefaultCacheAccess.java:214)
    at 
org.gradle.cache.internal.DefaultCacheAccess.longRunningOperation(DefaultCacheAccess.java:276)
    at 
org.gradle.cache.internal.DefaultPersistentDirectoryStore.longRunningOperation(DefaultPersistentDirectoryStore.java:142)
    at 
org.gradle.api.internal.changedetection.state.DefaultTaskArtifactStateCacheAccess.longRunningOperation(DefaultTaskArtifactStateCacheAccess.java:78)
    at 
org.gradle.execution.taskgraph.DefaultTaskPlanExecutor.process(DefaultTaskPlanExecutor.java:31)
    at 
org.gradle.execution.taskgraph.DefaultTaskGraphExecuter.execute(DefaultTaskGraphExecuter.java:86)
    at 
org.gradle.execution.SelectedTaskExecutionAction.execute(SelectedTaskExecutionAction.java:29)
    at 
org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)
    at 
org.gradle.execution.DefaultBuildExecuter.access$200(DefaultBuildExecuter.java:23)
    at 
org.gradle.execution.DefaultBuildExecuter$2.proceed(DefaultBuildExecuter.java:67)
    at 
org.gradle.execution.DryRunBuildExecutionAction.execute(DryRunBuildExecutionAction.java:32)
    at 
org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:61)
    at 
org.gradle.execution.DefaultBuildExecuter.execute(DefaultBuildExecuter.java:54)
    at 
org.gradle.initialization.DefaultGradleLauncher.doBuildStages(DefaultGradleLauncher.java:166)
    at 
org.gradle.initialization.DefaultGradleLauncher.doBuild(DefaultGradleLauncher.java:113)
    at 
org.gradle.initialization.DefaultGradleLauncher.run(DefaultGradleLauncher.java:81)
    at 
org.gradle.launcher.exec.InProcessBuildActionExecuter$DefaultBuildController.run(InProcessBuildActionExecuter.java:64)
    at 
org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:33)
    at 
org.gradle.launcher.cli.ExecuteBuildAction.run(ExecuteBuildAction.java:24)
    at 
org.gradle.launcher.exec.InProcessBuildActionExecuter.execute(InProcessBuildActionExecuter.java:35)
    at 
org.gradle.launcher.daemon.server.exec.ExecuteBuild.doBuild(ExecuteBuild.java:45)
    at 
org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at 
org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at 
org.gradle.launcher.daemon.server.exec.WatchForDisconnection.execute(WatchForDisconnection.java:42)
    at 
org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at 
org.gradle.launcher.daemon.server.exec.ResetDeprecationLogger.execute(ResetDeprecationLogger.java:24)
    at 
org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at 
org.gradle.launcher.daemon.server.exec.StartStopIfBuildAndStop.execute(StartStopIfBuildAndStop.java:33)
    at 
org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at 
org.gradle.launcher.daemon.server.exec.ReturnResult.execute(ReturnResult.java:34)
    at 
org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at 
org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:71)
    at 
org.gradle.launcher.daemon.server.exec.ForwardClientInput$2.call(ForwardClientInput.java:69)
    at org.gradle.util.Swapper.swap(Swapper.java:38)
    at 
org.gradle.launcher.daemon.server.exec.ForwardClientInput.execute(ForwardClientInput.java:69)
    at 
org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at 
org.gradle.launcher.daemon.server.exec.LogToClient.doBuild(LogToClient.java:60)
    at 
org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at 
org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at 
org.gradle.launcher.daemon.server.exec.EstablishBuildEnvironment.doBuild(EstablishBuildEnvironment.java:59)
    at 
org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at 
org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at 
org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy$1.run(StartBuildOrRespondWithBusy.java:45)
    at 
org.gradle.launcher.daemon.server.DaemonStateCoordinator.runCommand(DaemonStateCoordinator.java:186)
    at 
org.gradle.launcher.daemon.server.exec.StartBuildOrRespondWithBusy.doBuild(StartBuildOrRespondWithBusy.java:49)
    at 
org.gradle.launcher.daemon.server.exec.BuildCommandOnly.execute(BuildCommandOnly.java:34)
    at 
org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at 
org.gradle.launcher.daemon.server.exec.HandleStop.execute(HandleStop.java:36)
    at 
org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at 
org.gradle.launcher.daemon.server.exec.CatchAndForwardDaemonFailure.execute(CatchAndForwardDaemonFailure.java:32)
    at 
org.gradle.launcher.daemon.server.exec.DaemonCommandExecution.proceed(DaemonCommandExecution.java:125)
    at 
org.gradle.launcher.daemon.server.exec.DefaultDaemonCommandExecuter.executeCommand(DefaultDaemonCommandExecuter.java:48)
    at 
org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.handleCommand(DefaultIncomingConnectionHandler.java:155)
    at 
org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.receiveAndHandleCommand(DefaultIncomingConnectionHandler.java:128)
    at 
org.gradle.launcher.daemon.server.DefaultIncomingConnectionHandler$ConnectionWorker.run(DefaultIncomingConnectionHandler.java:116)
    at 
org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:66)
Caused by: org.gradle.api.GradleException: Could not call 
IncrementalTask.taskAction() on task ':my-lib:processReleaseResources'
    at org.gradle.util.JavaMethod.invoke(JavaMethod.java:69)
    at 
org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.doExecute(AnnotationProcessingTaskFactory.java:219)
    at 
org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:212)
    at 
org.gradle.api.internal.project.taskfactory.AnnotationProcessingTaskFactory$StandardTaskAction.execute(AnnotationProcessingTaskFactory.java:201)
    at 
org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:527)
    at 
org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:510)
    at 
org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:80)
    at 
org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:61)
    ... 70 more

Reply via email to