1. 概要
Android Support Library のバージョン 24.2.0 がリリースされましたが、このバージョンから v4 Support Library を分割されたものが使えるようになりました。
以下の 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-uisupport-core-utilssupport-fragment | 1,322,866 byte |
ということで、その差は 397 byte
でした。ProGuard かければもっと差が出てくれるでしょうけど、それにしても微々たるものですね。
今回は support-compat を外して検証しましたが、仕事で触ってるアプリだったら必要だし、結局あまり分割の恩恵を受ける機会は少なそうだなと感じました。 それだけ support-v4 のお世話になってるってことですね。