Breaking Up (an Artifact) Is (Not That) Hard To Do
If you are like me, you missed the announcement about v24.2.0 of the
Android Support Library being released last week.
This release has an interesting change:
support-v4 is being chopped
up into smaller modules.
support-v4 still exists. However, rather than being a library itself,
support-v4 relies upon transitive dependencies to pull in a series
of other modules that, in aggregate, cover what the standalone
support-v4 used to:
support-compat: for most of the
support-media-compat: media-specific backports
android.support.v4implementation of fragments, including
support-core-ui: other stuff not listed above that has a UI, such as
support-core-utils: other stuff not listed above, such as
If you use
support-v4, nothing really changes. However, now you can
start requesting the individual modules that you need. This is reminiscent
play-services was broken up into lots of smaller modules a couple
of years ago, so developers could pull in only the pieces that were needed.
The idea is that you should wind up with smaller APKs as a result, as you are not pouring lots of extraneous code into your project, then hoping that tools like ProGuard can get rid of that stuff.
In practice, the results will be mixed. For example,
requires all the rest of the current modules, so changing from
support-fragment will have no significant impact.
appcompat-v7 will need
support-fragment, and so
you will wind up with the extra ~1MB of APK bloat anyway if you are using
If you publish a large library, you could do the same sort of thing
as Google did with
Reorganize your source into discrete modules, with appropriate cross-module
dependencies. If needed, have a placeholder artifact representing the
entire library that pulls in all of the new modules, but adds little to
no code of its own. In general, having smaller libraries helps with
APK size; having the “kitchen sink” artifact makes it easier for
newcomers to get going with the library.
Interested in learning Kotlin? Check out the Klassbook for Kotlin language lessons that you can run right in your browser!