- Understanding the Android Support Library
- What is the Android Support Library?
- Compatibility Libraries
- v7-appcompat
- Under the Hood
- Component Libraries
- Other Libraries
- Common Questions
- When should I use the Android Support Library?
- Which version of the Android Support Library should I use?
- Support Library Features
- In this document
- See also
- v4 Support Library
- Multidex Support Library
- v7 Support Libraries
- v7 appcompat library
- v7 cardview library
- v7 gridlayout library
- v7 mediarouter library
- v7 palette library
- v7 recyclerview library
- v8 Support Library
- v8 renderscript library
- v13 Support Library
- v17 Leanback Library
- Annotations Support Library
- Design Support Library
Understanding the Android Support Library
by Josh Hight June 2, 2015
One of the great strengths of the Android platform is its support for a huge number and variety of devices. From your handset, tablet, and smartwatch to your television, car, and beyond, Android wants to be the all-purpose mobile computing platform. In terms of numbers, this approach has been very successful – there are likely more than 20,000 distinct devices at the time of this writing 1 . That’s far more than any competing platforms.
Supporting all these devices, though, poses a couple of challenges. Users expect apps to function consistently on every device, despite significant differences in hardware and software. Meanwhile, because of unique challenges in delivering Android software updates to users, developers cannot always depend on users having access to the latest Android releases. In fact, developers should anticipate most of their users to be running releases that are 18 months old or older 2 .
Without help from the Android team, developers would be forced to make some pretty ugly compromises in order to support most of their users. Fortunately, the Android team recognized that accommodating older devices and releases was strategically important. However, doing this in a way that doesn’t hamstring future releases presents an architectural challenge because the Android APIs obviously need to evolve over time. How can important new APIs be made available to the majority of Android users and not just those with newer devices lucky enough to run the latest releases?
The answer is one of the most important and peculiar design decisions made by the Android team: the Android Support Library.
What is the Android Support Library?
The Android Support Library was originally released in 2011 as the Android Compatibility Library. In over 75% of all app installs, it is the most widely used Android library 3 . Android developers already know that the Android Support Library provides newer APIs for older releases. But that’s not the whole story.
The Android Support Library is not actually a single library, but rather a collection of libraries that can roughly be divided into two groups: compatibility and component libraries.
Each library uses a naming convention that identifies the minSdkVersion your project must have in order to use it. This can be a little confusing, because it seems natural to think that support libraries with higher version numbers include the features from previous libraries (you might think v7-appcompat improves upon and includes all features from v4). In most cases, this is incorrect. To add to this confusion, libraries themselves have a revision number. For example, “AppCompat v21” actually refers to support library v7-appcompat, revision 21.
Compatibility Libraries
Compatibility libraries focus on back porting features from newer framework releases so that devices running previous releases can take advantage of the newer APIs. The major compatibility libraries are v4 and v7-appcompat.
Large and monolithic, the v4 library is the granddaddy of them all. It includes many features and, as its name suggests, supports back to API 4. In addition to support implementations for major classes like Fragment and Loader (which were both introduced in the framework in API 11), you’ll also find several widely-used classes not present in the framework at all, such as ViewPager and DrawerLayout.
Don’t let its name fool you: despite supporting all the way back to Android 1.6, this remains a very widely used and important library. And because of support library dependencies, it’s often hard to avoid the use of v4 entirely.
v7-appcompat
Often simply referred to as AppCompat, the v7-appcompat library provides support implementations for ActionBar (introduced in API 11) and Toolbar (introduced in API 21) for releases back to API 7. It requires the v4 library but does not include it. Thus, any feature dependent upon v7-appcompat is also dependent upon v4.
Under the Hood
The compatibility libraries largely use shims to back port features. These compatibility shims are thin wrappers around components that pass calls through to the underlying framework implementation if used on a release that supports the API. On older releases, the shims instead call the support implementation, perhaps with slightly different or reduced functionality.
However, in some cases a compatibility shim is not used. Instead, in these cases the support library always uses its own implementation in place of the framework implementation — even when the release supports the framework implementation. One major example of this is v4 support Fragments.
This is a very interesting decision, one that ripples across the entire Android framework. Android has created an entirely different support implementation of these major features, duplicating a lot of functionality, and packaging it as a different set of classes and resources. These support implementations live in parallel to their framework cousins, complete with their own inheritance hierarchy, revisions, and bugs.
Google claims that in these cases most of the APIs are the same, except that they belong to a different package and have minor differences in a few method names and signatures. However, in practice, there are some inconsistent and not so insignificant API differences between support and framework implementations – differences that will likely grow over time.
Furthermore, in some cases, developers may think they have the choice between framework and support implementations of a particular feature, only to find out that support dependencies dictate that decision for them. For example, the v7-appcompat library enables developers to use Material Design UI features introduced in API 21. However, doing so requires that all activities extend from AppCompatActivity, which extends from the v4 support FragmentActivity. So, developers targeting anything less than API 21 and wishing to use Material Design UI features are forced to use v4 support Fragments, rather than framework Fragments.
Google considers use of the support libraries a best practice, even if not necessarily required. It includes v7-appcompat and v4 libraries in most of its sample code as well as in Android Studio’s new project templates. Google is clearly investing significant effort in these compatibility libraries and expects developers to heavily rely upon them.
Component Libraries
In addition to compatibility libraries, the Android Support Library also provides smaller, more modular component libraries that enable developers to add features that are otherwise not part of the standard framework. These self-contained libraries can be easily added or removed from a project without concern for dependencies. There are several valuable component libraries to consider:
- v7-recyclerview: provides the RecyclerView component, which efficiently displays and animates large amounts of data and is designed to replace ListView
- v7-cardview: provides the CardView component, enabling the cards UI design pattern
- v7-gridlayout: provides the GridLayout class, which enables organizing UI elements into a rectangular grid
- v7-mediarouter: provides MediaRouter and related classes, enabling Google Cast support
- v7-palette: provides the Palette class, which enables developers to identify primary colors in an image
Adding any of these components to your gradle-based project is as simple as adding a dependency to your build script.
Beyond the benefits of convenience and modularity, separating these components into their own libraries allows Google to release important APIs outside of the framework. This allows feedback to be gathered and design iterated before possibly being finalized into the framework, where breaking changes would be much more difficult make.
Other Libraries
The Android Support Library also contains a few other libraries that are used less often, but still worth mentioning:
- v8: provides support for RenderScript (introduced in API 11) back to API 8
- v13: provides additional compatibility support for the Fragment UI pattern and bundles the v4 library
- v17: provides support for building TV UIs
- multidex: provides support for building apps with multiple DEX files
- annotations: provides support for annotations like @NonNull and @IntDef
Common Questions
When should I use the Android Support Library?
You should use one of the support libraries when you need specific framework features that are newer than the minSdkVersion of your app or that are not available in the standard framework.
However, Google considers the general use of the support libraries to be a best practice, even if not necessarily required.
Which version of the Android Support Library should I use?
In short, use the version your application can support that has the features you need. Some features are modular. For example, to use RecyclerView, simply add the v7-recyclerview dependency identifier to your gradle build script.
If you need one of the compatibility components from v4, you can use v13 instead if your minSdkVersion supports that, since it bundles v4. Otherwise, if you need to support API versions
Источник
Support Library Features
In this document
See also
The Android Support Library package contains several libraries that can be included in your application. Each of these libraries supports a specific range of Android platform versions and set of features.
This guide explains the important features and version support provided by the Support Libraries to help you decide which of them you should include in your application. In general, we recommend including the v4 support and v7 appcompat libraries, because they support a wide range of Android versions and provide APIs for recommended user interface patterns.
In order to use any of the following libraries, you must download the library files to your Android SDK installation. Follow the directions for downloading the Support Libraries in Support Library Setup to complete this step. You must take additional steps to include a specific Support Library in your application. See the end of each library section below for important information on how to include the library in your application.
v4 Support Library
This library is designed to be used with Android 1.6 (API level 4) and higher. It includes the largest set of APIs compared to the other libraries, including support for application components, user interface features, accessibility, data handling, network connectivity, and programming utilities. Here are a few of the key classes included in the v4 library:
- App Components
- Fragment — Adds support for encapsulation of user interface and functionality with Fragments, enabling applications to provide layouts that adjust between small and large-screen devices.
- NotificationCompat — Adds support for rich notification features.
- LocalBroadcastManager — Allows applications to easily register for and receive intents within a single application without broadcasting them globally.
- User Interface
- ViewPager — Adds a ViewGroup that manages the layout for the child views, which the user can swipe between.
- PagerTitleStrip — Adds a non-interactive title strip, that can be added as a child of ViewPager .
- PagerTabStrip — Adds a navigation widget for switching between paged views, that can also be used with ViewPager .
- DrawerLayout — Adds support for creating a Navigation Drawer that can be pulled in from the edge of a window.
- SlidingPaneLayout — Adds widget for creating linked summary and detail views that appropriately adapt to various screen sizes.
- Accessibility
- ExploreByTouchHelper — Adds a helper class for implementing accessibility support for custom views.
- AccessibilityEventCompat — Adds support for AccessibilityEvent . For more information about implementing accessibility, see Accessibility.
- AccessibilityNodeInfoCompat — Adds support for AccessibilityNodeInfo .
- AccessibilityNodeProviderCompat — Adds support for AccessibilityNodeProvider .
- AccessibilityDelegateCompat — Adds support for View.AccessibilityDelegate .
- Content
- Loader — Adds support for asynchronous loading of data. The library also provides concrete implementations of this class, including CursorLoader and AsyncTaskLoader .
- FileProvider — Adds support for sharing of private files between applications.
There are many other APIs included in this library. For complete, detailed information about the v4 Support Library APIs, see the android.support.v4 package in the API reference.
After you download the Android Support Libraries, this library is located in the /extras/android/support/v4/ directory. The library does not contain user interface resources. To include it in your application project, follow the instructions for Adding libraries without resources.
Caution: Using dynamic dependencies, especially for higher version numbers, can cause unexpected version updates and regression incompatibilities.
The Gradle build script dependency identifier for this library is as follows:
Multidex Support Library
This library provides support for building apps with multiple Dalvik Executable (DEX) files. Apps that reference more than 65536 methods are required to use multidex configurations. For more information about using multidex, see Building Apps with Over 65K Methods.
After you download the Android Support Libraries, this library is located in the /extras/android/support/multidex/ directory. The library does not contain user interface resources. To include it in your application project, follow the instructions for Adding libraries without resources.
The Gradle build script dependency identifier for this library is as follows:
v7 Support Libraries
There are several libraries designed to be used with Android 2.1 (API level 7) and higher. These libraries provide specific feature sets and can be included in your application independently from each other.
v7 appcompat library
This library adds support for the Action Bar user interface design pattern. This library includes support for material design user interface implementations.
Note: This library depends on the v4 Support Library. If you are using Ant or Eclipse, make sure you include the v4 Support Library as part of this library’s classpath.
Here are a few of the key classes included in the v7 appcompat library:
- ActionBar — Provides an implementation of the action bar user interface pattern. For more information on using the Action Bar, see the Action Bar developer guide.
- AppCompatActivity — Adds an application activity class that can be used as a base class for activities that use the Support Library action bar implementation.
- AppCompatDialog — Adds a dialog class that can be used as a base class for AppCompat themed dialogs.
- ShareActionProvider — Adds support for a standardized sharing action (such as email or posting to social applications) that can be included in an action bar.
After you download the Android Support Libraries, this library is located in the /extras/android/support/v7/appcompat/ directory. The library contains user interface resources. To include it in your application project, follow the instructions for Adding libraries with resources.
The Gradle build script dependency identifier for this library is as follows:
v7 cardview library
This library adds support for the CardView widget, which lets you show information inside cards that have a consistent look on any app. These cards are useful for material design implementations, and are used extensively in layouts for TV apps.
After you download the Android Support Libraries, this library is located in the /extras/android/support/v7/cardview/ directory. The library contains user interface resources. To include it in your application project, follow the instructions for Adding libraries with resources.
The Gradle build script dependency identifier for this library is as follows:
v7 gridlayout library
After you download the Android Support Libraries, this library adds support for the GridLayout class, which allows you to arrange user interface elements using a grid of rectangular cells. For detailed information about the v7 gridlayout library APIs, see the android.support.v7.widget package in the API reference.
This library is located in the /extras/android/support/v7/gridlayout/ directory . The library contains user interface resources. To include it in your application project, follow the instructions for Adding libraries with resources.
The Gradle build script dependency identifier for this library is as follows:
v7 mediarouter library
This library provides MediaRouter , MediaRouteProvider , and related media classes that support Google Cast.
In general, the APIs in the v7 mediarouter library provide a means of controlling the routing of media channels and streams from the current device to external screens, speakers, and other destination devices. The library includes APIs for publishing app-specific media route providers, for discovering and selecting destination devices, for checking media status, and more. For detailed information about the v7 mediarouter library APIs, see the android.support.v7.media package in the API reference.
The v7 mediarouter library is located in the /extras/android/support/v7/mediarouter/ directory after you download the Android Support Library. It’s provided as a library project with a dependency on the v7 appcompat library, so you’ll need to include both libraries in your build path when setting up your project. For more information on how to set up your project, follow the instructions in Adding libraries with resources. If you are developing in Eclipse/ADT, make sure to include both the android-support-v7-mediarouter.jar and android-support-v7-appcompat.jar files.
If you are using Android Studio, all you need to do is specify the Gradle build script dependency identifier com.android.support:support-v7-mediarouter: , where » » is the minimum revision at which the library is available. For example:
The v7 mediarouter library APIs introduced in Support Library r18 are subject to change in later revisions of the Support Library. At this time, we recommend using the library only in connection with Google Cast.
v7 palette library
The v7 palette support library includes the Palette class, which lets you extract prominent colors from an image. For example, a music app could use a Palette object to extract the major colors from an album cover, and use those colors to build a color-coordinated song title card.
After you download the Android Support Libraries, this library is located in the /extras/android/support/v7/palette/ directory. The library does not contain user interface resources. To include it in your application project, follow the instructions for Adding libraries without resources.
The Gradle build script dependency identifier for this library is as follows:
v7 recyclerview library
The recyclerview library adds the RecyclerView class. This class provides support for the RecyclerView widget, a view for efficiently displaying large data sets by providing a limited window of data items.
After you download the Android Support Libraries, this library is located in the /extras/android/support/v7/recyclerview/ directory. The library contains user interface resources. To include it in your application project, follow the instructions for Adding libraries with resources.
The Gradle build script dependency identifier for this library is as follows:
v8 Support Library
This library is designed to be used with Android 2.2 (API level 8) and higher. This library provides specific feature sets and can be included in your application independently from other libraries.
v8 renderscript library
This library is designed to be used with Android (API level 8) and higher. It adds support for the RenderScript computation framework. These APIs are included in the android.support.v8.renderscript package. You should be aware that the steps for including these APIs in your application is very different from other support library APIs. For more information about using these APIs in your application, see the RenderScript developer guide.
Note: Use of RenderScript with the support library is supported with Android Studio and Gradle-based builds, as well as the Eclipse plugin and Ant build tools. The renderscript library is located in the build-tools/$VERSION/renderscript/ folder.
The following example shows the Gradle build script properties for this library:
v13 Support Library
This library is designed to be used for Android 3.2 (API level 13) and higher. It adds support for the Fragment user interface pattern with the ( FragmentCompat ) class and additional fragment support classes. For more information about fragments, see the Fragments developer guide. For detailed information about the v13 Support Library APIs, see the android.support.v13 package in the API reference.
After you download the Android Support Libraries, this library is located in the /extras/android/support/v13/ directory. The library does not contain user interface resources. To include it in your application project, follow the instructions for Adding libraries without resources.
The Gradle build script dependency identifier for this library is as follows:
v17 Leanback Library
The android.support.v17.leanback package provides APIs to support building user interfaces on TV devices. It provides a number of important widgets for TV apps. Some of the notable classes include:
- BrowseFragment — A fragment for creating a primary layout for browsing categories and rows of media items.
- DetailsFragment — A wrapper fragment for Leanback details screens.
- PlaybackOverlayFragment — A subclass of DetailsFragment for displaying playback controls and related content.
- SearchFragment — A fragment to handle searches. The fragment receives the user’s search request and passes it to the application-provided SearchResultProvider . The SearchResultProvider returns the search results to the SearchFragment , which renders them into a RowsFragment .
After you download the Android Support Libraries, this library is located in the /extras/android/support/v17/leanback directory. For more information on how to set up your project, follow the instructions in Adding libraries with resources.
The Gradle build script dependency identifier for this library is as follows:
Annotations Support Library
The Annotation package provides APIs to support adding annotation metadata to your apps.
After you download the Android Support Libraries, this library is located in the /extras/android/support/annotations directory. For more information on how to set up your project, follow the instructions in Adding libraries with resources.
The Gradle build script dependency identifier for this library is as follows:
Design Support Library
The Design package provides APIs to support adding material design components and patterns to your apps.
The Design Support library adds support for various material design components and patterns for app developers to build upon, such as navigation drawers, floating action buttons (FAB), snackbars, and tabs.
After you download the Android Support Libraries, this library is located in the /extras/android/support/design directory. For more information on how to set up your project, follow the instructions in Adding libraries with resources.
The Gradle build script dependency identifier for this library is as follows:
Источник