Note: This has been updated to reflect the release of API 21, Lollipop. Be sure to download the latest SDK.
In one of my modules I had the following in build.gradle:
dependencies {
    compile 'com.android.support:support-v4:+'
}
Changing this to
dependencies {
    // do not use dynamic updating.
    compile 'com.android.support:support-v4:21.0.0' 
}
fixed the issue.
Make sure you're not doing a general inclusion of com.android.support:support-v4:+ or any other support libraries (v7, v13, appcompat, etc), anywhere in your project.
I'd assume the problem is v4:+ picks up the release candidate (21.0.0-rc1) latest L release which obviously requires the L SDK. 
Edit:
If you need to use the new views (CardView, RecyclerView, and Palette), the following should work:
compile "com.android.support:cardview-v7:21.0.0"
compile "com.android.support:recyclerview-v7:21.0.0"
compile "com.android.support:palette-v7:21.0.0"
(Credit to EddieRingle on /androiddev - http://www.reddit.com/r/androiddev/comments/297xli/howto_use_the_v21_support_libs_on_older_versions/)
Another Edit
Be sure to see @murtuza's answer below regarding appcompat-v7 and upvote if it helps!
Also, in case you are importing the appcompat-v7 library make sure you tag a version number at the end of it like so:
compile 'com.android.support:support-v4:19.+'
compile 'com.android.support:appcompat-v7:19.+'
After only changing the support-v4 version, I still received the error:
Manifest merger failed : uses-sdk:minSdkVersion 15 cannot be smaller than version L declared in library com.android.support:support-v4:21.0.0-rc1
It was a bit confusing because it looks like v4 is still the problem, but, in fact, restricting the appcompat v7 version fixed the problem.
Solution 1:
Change uses-sdk to <uses-sdk tools:node="replace" /> and add      xmlns:tools="http://schemas.android.com/tools"
in AndroidManifest.xml
 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.demo.android"
    android:versionCode="16"
    android:versionName="3.3.1">
    .
    .
    <uses-sdk tools:node="replace" />
    .
    .
</manifest>
Make sure you use gradle 0.11 and above to use Manifest merger.
Solution 2:
Change     compile 'com.android.support:support-v4:+' to  compile 'com.android.support:support-v4:20.+' in build.gradle. This will prevent gradle from using 
v4:21.0.0 that requires version L.
However, if your any of your external dependencies uses the same. You will probably have to wait for them to update the same.
Solution 3:
Remove/Comment <version>21.0.0-rc1</version> in your file <android-sdk>/extras/android/m2repository/com/android/support-v4/maven-metadata.xml
Repeat the same for support-v7
<uses-sdk tools:node="replace" />
No longer works.
change uses-sdk to 
<uses-sdk tools:overrideLibrary="com.packagename.of.libary.with.conflict" />
and addxmlns:tools="http://schemas.android.com/tools" 
in the       AndroidManifest.xml file
The problem still arises with transitive dependencies. Gradle offers a way to force the usage of a specific version of a dependency.
For example you can add something like:
configurations.all {
    resolutionStrategy {
        force 'com.android.support:support-v4:20.+'
        force 'com.android.support:appcompat-v7:20.+'
    }
}
to your build.gradle.
If you want to learn more about gradle resolution strategies refer to this guide http://www.gradle.org/docs/current/dsl/org.gradle.api.artifacts.ResolutionStrategy.html
I found this while reading the corresponding issue which I will link here
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With