EDIT MODE

モバイルアプリ開発に関することを書いています

分割されたv4 Support Librariesのリスト

1. 概要

Android Support Library のバージョン 24.2.0 がリリースされましたが、このバージョンから v4 Support Library を分割されたものが使えるようになりました。

参考:Support Library Features

以下の Library 群として提供されています。

  • support-compat
  • support-core-ui
  • support-core-utils
  • support-fragment
  • support-media-compat

とはいえ、Support Library 群で最も大きかった v4 なので、どのライブラリに何があるのか分からないのが不便だったので、調べてみました。

2. パッケージ構成

support-compat

  • android.support.v4.accessibilityservice
  • android.support.v4.animation
  • android.support.v4.app
  • android.support.v4.content
  • android.support.v4.content.pm
  • android.support.v4.content.res
  • android.support.v4.database
  • android.support.v4.graphics
  • android.support.v4.graphics.drawable
  • android.support.v4.hardware.display
  • android.support.v4.hardware.fingerprint
  • android.support.v4.internal.view
  • android.support.v4.net
  • android.support.v4.os
  • android.support.v4.text
  • android.support.v4.text.util
  • android.support.v4.util
  • android.support.v4.view
  • android.support.v4.view.accessibility
  • android.support.v4.view.animation
  • android.support.v4.widget

support-core-ui

  • android.support.v4.app
  • android.support.v4.view
  • android.support.v4.view.animation
  • android.support.v4.widget

support-core-utils

  • android.support.v4.app
  • android.support.v4.content
  • android.support.v4.content.res
  • android.support.v4.graphics
  • android.support.v4.graphics.drawable
  • android.support.v4.print
  • android.support.v4.provider
  • android.support.v4.text

support-fragment

  • android.support.v4.app

support-media-compat

  • android.support.v4.media
  • android.support.v4.media.session

パッケージ単位で分割されているわけではないので、これだけ見てもよく分かりませんね。(support-compat は、まだでかいなというは分かりますが。)

どのライブラリを使えばいいかは、クラスごとに見てみないと判断が難しそうです。

3. 提供しているクラス

注)以下のリストは、API互換性のための実装クラスは除いてあります。

support-compat

android.support.v4.accessibilityservice

  • AccessibilityServiceInfoCompat

android.support.v4.animation

  • AnimatorCompatHelper
  • AnimatorListenerCompat
  • AnimatorProvider
  • AnimatorUpdateListenerCompat
  • ValueAnimatorCompat

android.support.v4.app

  • ActivityCompat
  • ActivityManagerCompat
  • ActivityOptionsCompat
  • AppOpsManagerCompat
  • BundleCompat
  • BundleUtil
  • NotificationBuilderWithActions
  • NotificationBuilderWithBuilderAccessor
  • NotificationCompat
  • NotificationCompatExtras
  • NotificationCompatSideChannelService
  • NotificationManagerCompat
  • RemoteInput
  • ServiceCompat
  • ShareCompat
  • SharedElementCallback

android.support.v4.content

  • ContentResolverCompat
  • ContextCompat
  • IntentCompat
  • ModernAsyncTask
  • ParallelExecutorCompat
  • SharedPreferencesCompat

android.support.v4.content.pm

  • ActivityInfoCompat

android.support.v4.content.res

  • ConfigurationHelper
  • ResourcesCompat

android.support.v4.database

  • DatabaseUtilsCompat

android.support.v4.graphics

  • BitmapCompat

android.support.v4.graphics.drawable

  • DrawableCompat
  • DrawableWrapper
  • TintAwareDrawable

android.support.v4.hardware.display

  • DisplayManagerCompat

android.support.v4.hardware.fingerprint

  • FingerprintManagerCompat

android.support.v4.internal.view

  • SupportMenu
  • SupportMenuItem
  • SupportSubMenu

android.support.v4.net

  • ConnectivityManagerCompat
  • DatagramSocketWrapper
  • TrafficStatsCompat

android.support.v4.os

  • AsyncTaskCompat
  • BuildCompat
  • CancellationSignal
  • EnvironmentCompat
  • OperationCanceledException
  • ParcelableCompat
  • ParcelableCompatCreatorCallbacks
  • ResultReceiver
  • TraceCompat
  • UserManagerCompat

android.support.v4.text

  • ICUCompat
  • TextDirectionHeuristicCompat
  • TextDirectionHeuristicsCompat
  • TextUtilsCompat

android.support.v4.text.util

  • LinkifyCompat

android.support.v4.util

  • ArrayMap
  • AtomicFile
  • CircularArray
  • CircularIntArray
  • ContainerHelpers
  • DebugUtils
  • LogWriter
  • LongSparseArray
  • LruCache
  • MapCollections
  • Pair
  • PatternsCompat
  • Pools
  • SimpleArrayMap
  • SparseArrayCompat
  • TimeUtils

android.support.v4.view

  • AccessibilityDelegateCompat
  • ActionProvider
  • GestureDetectorCompat
  • GravityCompat
  • InputDeviceCompat
  • KeyEventCompat
  • LayoutInflaterCompat
  • LayoutInflaterFactory
  • MarginLayoutParamsCompat
  • MenuCompat
  • MenuItemCompat
  • MotionEventCompat
  • NestedScrollingChild
  • NestedScrollingParent
  • OnApplyWindowInsetsListener
  • PointerIconCompat
  • ScaleGestureDetectorCompat
  • ScrollingView
  • TintableBackgroundView
  • VelocityTrackerCompat
  • ViewCompat
  • ViewConfigurationCompat
  • ViewGroupCompat
  • ViewParentCompat
  • ViewPropertyAnimatorCompat
  • ViewPropertyAnimatorListener
  • ViewPropertyAnimatorListenerAdapter
  • ViewPropertyAnimatorUpdateListener
  • WindowCompat
  • WindowInsetsCompat

android.support.v4.view.accessibility

  • AccessibilityEventCompat
  • AccessibilityManagerCompat
  • AccessibilityNodeInfoCompat
  • AccessibilityNodeProviderCompat
  • AccessibilityRecordCompat
  • AccessibilityWindowInfoCompat

android.support.v4.view.animation

  • PathInterpolatorCompat

android.support.v4.widget

  • CompoundButtonCompat
  • EdgeEffectCompat
  • ListPopupWindowCompat
  • ListViewCompat
  • PopupMenuCompat
  • PopupWindowCompat
  • ScrollerCompat
  • SearchViewCompat
  • TextViewCompat
  • TintableCompoundButton

support-core-ui

android.support.v4.app

  • ActionBarDrawerToggle

android.support.v4.view

  • AbsSavedState
  • AsyncLayoutInflater
  • NestedScrollingChildHelper
  • NestedScrollingParentHelper
  • PagerAdapter
  • PagerTabStrip
  • PagerTitleStrip
  • ViewPager

android.support.v4.view.animation

  • FastOutLinearInInterpolator
  • FastOutSlowInInterpolator
  • LinearOutSlowInInterpolator
  • LookupTableInterpolator

android.support.v4.widget

  • AutoScrollHelper
  • CircleImageView
  • ContentLoadingProgressBar
  • CursorAdapter
  • CursorFilter
  • DrawerLayout
  • ExploreByTouchHelper
  • FocusStrategy
  • ListViewAutoScrollHelper
  • MaterialProgressDrawable
  • NestedScrollView
  • ResourceCursorAdapter
  • SimpleCursorAdapter
  • SlidingPaneLayout
  • Space
  • SwipeProgressBar
  • SwipeRefreshLayout
  • ViewDragHelper

support-core-utils

android.support.v4.app

  • AppLaunchChecker
  • NavUtils
  • TaskStackBuilder

android.support.v4.content

  • AsyncTaskLoader
  • CursorLoader
  • FileProvider
  • Loader
  • LocalBroadcastManager
  • PermissionChecker
  • WakefulBroadcastReceiver

android.support.v4.content.res

  • TypedArrayUtils

android.support.v4.graphics

  • ColorUtils

android.support.v4.graphics.drawable

  • RoundedBitmapDrawable
  • RoundedBitmapDrawableFactory

android.support.v4.print

  • PrintHelper

android.support.v4.provider

  • DocumentFile
  • RawDocumentFile
  • SingleDocumentFile
  • TreeDocumentFile

android.support.v4.text

  • BidiFormatter

support-fragment

android.support.v4.app

  • BackStackRecord
  • DialogFragment
  • Fragment
  • FragmentActivity
  • FragmentContainer
  • FragmentController
  • FragmentHostCallback
  • FragmentManager
  • FragmentManagerNonConfig
  • FragmentPagerAdapter
  • FragmentStatePagerAdapter
  • FragmentTabHost
  • FragmentTransaction
  • ListFragment
  • LoaderManager
  • NoSaveStateFrameLayout
  • SuperNotCalledException

support-media-compat

android.support.v4.media

  • MediaBrowserCompat
  • MediaBrowserCompatUtils
  • MediaBrowserProtocol
  • MediaBrowserServiceCompat
  • MediaDescriptionCompat
  • MediaMetadataCompat
  • RatingCompat
  • TransportController
  • TransportMediator
  • TransportMediatorCallback
  • TransportPerformer
  • TransportStateListener
  • VolumeProviderCompat

android.support.v4.media.session

  • MediaButtonReceiver
  • MediaControllerCompat
  • MediaSessionCompat
  • ParcelableVolumeInfo
  • PlaybackStateCompat

4. どのくらいの容量削減が見込めそうか?

公式サイトには

For backwards compatibility, if you list support-v4 in your Gradle script, your APK will include all of the v4 modules. However, to reduce APK size, we recommend that you just list the specific modules your app needs.

という記述があり、support-v4 を必要なものだけ組み込む方が、APK サイズが小さくなるらしいので試してみました。

以下のような条件で、アプリの APK サイズを比較してみた結果です。

共通の条件

  • Android Studio v2.1.3 で新規プロジェクトを EmptyActivity で作成
  • ProGuard なし
  • Debug ビルド
  • compileSdkVersion 24
  • support library 24.2.0
Library Size
アプリ A support-v4 1,323,263 byte
アプリ B support-core-ui
support-core-utils
support-fragment
1,322,866 byte

ということで、その差は 397 byte でした。ProGuard かければもっと差が出てくれるでしょうけど、それにしても微々たるものですね。

今回は support-compat を外して検証しましたが、仕事で触ってるアプリだったら必要だし、結局あまり分割の恩恵を受ける機会は少なそうだなと感じました。 それだけ support-v4 のお世話になってるってことですね。