46

I am new to Android development and am wondering what happens if you use attributes on XML tags from an API level greater than your minSdkVersion.

For example having:

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="20" />

And then using this:

<activity android:logo="@drawable/iconwhatever"></activity>

The "android:logo" attribute is from API level 11.

In Android Studio it gives the following error, but I want to know what could happen if this is left alone:

Attribute "logo" is only used in API level 11 and higher. (Current min is 9)

Any help regarding this would be greatly appreciated.

Michael Garner
  • 1,042
  • 1
  • 10
  • 19
  • Logo is used in **ActionBar**. You can use **ActionBarCompat**, to support older devices: http://developer.android.com/guide/topics/ui/actionbar.html – Phantômaxx Oct 14 '14 at 18:24

3 Answers3

81

Unsupported attributes are safely ignored.

From SDK documentation:

When parsing XML resources, Android ignores XML attributes that aren’t supported by the current device. So you can safely use XML attributes that are only supported by newer versions without worrying about older versions breaking when they encounter that code.

ovmjm
  • 1,624
  • 12
  • 15
  • 3
    This is not thruth at all. For example i am just right now getting crashes because of i am using background drawable where the drawable is ripple effect for buttons. It is crashing, because in the drawable i have targetApi lollipop (v21) but i am trying to run the app on api v19. Its crashing on android.view.InflateException: Binary XML file line #10: Error inflating class – tomdelahaba Oct 08 '17 at 00:08
  • 2
    @piggy is this because the attribute isn't supported on API 19, or because the attribute's value happens to be unsupported? – Erik Feb 11 '18 at 19:08
  • 1
    I am targeting API level 31, but have min set to 21. I use `usesPermissionFlags` on `uses-permission` and am getting a linter error: `Error: Attribute usesPermissionFlags is only used in API level 31 and higher (current min is 21) [UnusedAttribute]` Is this then a linter error? – Steven Jeuris Jun 28 '22 at 12:10
2

For XML attributes, its safe to use attributes from newer APIs (they will simply be ignored as the XML parser won't even look for them on older versions).

Kevin Coppock
  • 133,643
  • 45
  • 263
  • 274
0

In this case, the manipulation of attributes that are different APIs must be made via code and not in XML.

In code, you can treat it.

For example:

 if(Build.Version.SDK_INT > 10){

     .... use an attribute

   }
else{

    .... use other
}

For your specific case, use "icon"

<activity android:icon="@drawable/iconwhatever"></activity>
Cícero Moura
  • 2,027
  • 1
  • 24
  • 36