API Change Statistics

The overall difference between API Levels 23 and 24 is approximately 6.58%.


Total of Differences, by Number and Type

The table below lists the numbers of program elements (packages, classes, constructors, methods, and fields) that were added, changed, or removed. The table includes only the highest-level program elements — that is, if a class with two methods was added, the number of methods added does not include those two methods, but the number of classes added does include that class.

Type Additions Changes Removals Total
Packages 9 88 0 97
Classes and Interfaces 147 433 3 583
Constructors 24 6 0 30
Methods 877 127 13 1017
Fields 585 31 5 621
Total 1642 685 21 2348

Changed Packages, Sorted by Percentage Difference

Percentage Difference* Package
100 android.test.suitebuilder.annotation
68 android.accessibilityservice
35 android.location
33 android.os.storage
31 android.mtp
29 android.service.notification
25 java.util.concurrent.atomic
25 android.nfc.cardemulation
24 android.app.admin
23 java.awt.font
18 java.util
18 android.app.job
16 android.media.tv
15 android.test.mock
14 android.test
13 android.printservice
12 java.security.acl
11 android.service.media
11 android.app.usage
10 java.security.cert
8 javax.net.ssl
8 android.media.browse
7 java.util.concurrent
7 java.util.logging
6 android.hardware
6 android.telecom
5 android.hardware.camera2.params
5 java.nio.channels
5 javax.sql
5 java.lang.ref
4 android.app
4 java.lang.annotation
4 android.media
4 android.nfc
4 android.view
3 android.os
3 java.lang
3 java.util.concurrent.locks
3 java.lang.reflect
3 android.security.keystore
3 java.net
3 java.util.prefs
3 android.webkit
3 android.opengl
3 android.content.pm
2 android.security
2 android.graphics
2 android.text
2 android.telephony
2 java.util.regex
1 android.media.session
1 java.io
1 android.view.textservice
1 android.util
1 android.view.inputmethod
1 android.content.res
1 java.nio.charset
1 android.service.carrier
1 android.speech.tts
1 android.provider
1 java.security
1 android.text.util
1 java.sql
1 java.nio.channels.spi
<1 android.app.assist
<1 android.bluetooth
<1 android.hardware.camera2
<1 android.print
<1 android.preference
<1 javax.crypto.spec
<1 android.view.accessibility
<1 java.util.zip
<1 android.net.wifi
<1 android.database
<1 android.widget
<1 android.graphics.drawable
<1 android.app.backup
<1 android.content
<1 android.net
<1 android
<1 android.text.style
<1 java.text
<1 android.service.voice
<1 android.drm
<1 android.animation
<1 java.nio
<1 android.renderscript
<1 android.database.sqlite

* See Calculation of Change Percentages, below.


Changed Classes and Interfaces, Sorted by Percentage Difference

Percentage
Difference*
Class or Interface
100 java.security.acl.Permission
90 android.text.Html
80 java.util.Comparator
79 java.io.ObjectInputStream.GetField
61 java.util.concurrent.ConcurrentHashMap
54 android.media.ExifInterface
50 android.location.GpsStatus.Listener
50 android.location.GpsStatus.NmeaListener
50 android.test.TestSuiteProvider
50 android.test.mock.MockApplication
50 android.test.mock.MockResources
50 java.lang.Iterable
50 java.util.EventListenerProxy
50 java.util.Formattable
50 java.util.FormatterClosedException
50 java.util.logging.LoggingPermission
50 javax.sql.RowSetEvent
36 java.lang.reflect.AnnotatedElement
35 java.util.ResourceBundle
33 android.media.AudioRecord.OnRoutingChangedListener
33 android.media.AudioTrack.OnRoutingChangedListener
33 android.mtp.MtpDeviceInfo
33 android.os.storage.StorageManager
33 android.service.media.MediaBrowserService.BrowserRoot
33 java.lang.InternalError
33 java.lang.VirtualMachineError
33 java.lang.reflect.AccessibleObject
33 java.util.Random
31 javax.net.ssl.SSLParameters
28 android.app.usage.NetworkStatsManager
28 android.service.notification.NotificationListenerService.Ranking
28 java.util.Iterator
28 java.util.Map.Entry
28 java.util.logging.LogManager
28 java.util.Map
27 java.util.concurrent.CopyOnWriteArraySet
26 android.app.NotificationManager
25 android.app.Notification.MediaStyle
25 android.media.AudioTimestamp
25 android.media.browse.MediaBrowser.SubscriptionCallback
25 android.test.IsolatedContext
25 android.test.PerformanceTestCase
25 java.lang.ref.ReferenceQueue
25 java.sql.SQLPermission
25 java.util.IllegalFormatCodePointException
25 java.util.IllegalFormatFlagsException
25 java.util.InputMismatchException
23 java.util.ArrayList
23 android.mtp.MtpConstants
23 android.provider.ContactsContract.Intents
23 java.nio.channels.ServerSocketChannel
20 java.util.Hashtable
20 android.app.DatePickerDialog
20 android.app.Notification.BigTextStyle
20 android.app.Notification.InboxStyle
20 android.content.res.Resources.NotFoundException
20 android.media.tv.TvInputManager.TvInputCallback
20 android.provider.ContactsContract.PhoneLookupColumns
20 android.security.NetworkSecurityPolicy
20 java.lang.CharSequence
20 java.security.cert.CertPathBuilderSpi
20 java.security.cert.CertPathValidatorSpi
20 java.util.HashMap
20 java.util.SortedMap
20 java.util.concurrent.atomic.AtomicReference
20 java.util.concurrent.atomic.AtomicReferenceFieldUpdater
19 android.location.LocationManager
19 java.util.Arrays
18 android.telephony.SubscriptionManager
18 java.nio.charset.CoderResult
18 java.util.concurrent.atomic.AtomicReferenceArray
17 android.print.PrinterInfo.Builder
17 android.app.WallpaperManager
17 android.media.tv.TvContract
17 android.preference.PreferenceManager
16 android.app.usage.NetworkStats.Bucket
16 android.mtp.MtpObjectInfo
16 android.provider.VoicemailContract.Status
16 android.test.SingleLaunchActivityTestCase
16 android.test.SyncBaseInstrumentation
16 android.test.mock.MockDialogInterface
16 java.util.FormatFlagsConversionMismatchException
16 java.util.IdentityHashMap
16 java.util.IllegalFormatConversionException
16 java.util.WeakHashMap
16 java.util.logging.StreamHandler
16 java.util.prefs.NodeChangeEvent
16 javax.sql.ConnectionEvent
15 android.telephony.CarrierConfigManager
15 android.mtp.MtpDevice
15 android.widget.AbsSeekBar
15 java.util.logging.Handler
15 android.app.job.JobInfo.Builder
15 android.media.browse.MediaBrowser
15 android.widget.Toolbar
14 java.lang.Math
14 android.media.MediaCodecInfo.CodecProfileLevel
14 android.app.Notification.BigPictureStyle
14 android.app.job.JobParameters
14 android.content.pm.LauncherApps.Callback
14 android.speech.tts.UtteranceProgressListener
14 android.view.View.BaseSavedState
14 android.view.textservice.SpellCheckerSubtype
14 java.nio.channels.SocketChannel
14 java.util.Objects
13 java.lang.Boolean
13 android.app.job.JobInfo
13 android.service.media.MediaBrowserService
12 android.app.NotificationManager.Policy
12 android.graphics.drawable.GradientDrawable
12 android.provider.ContactsContract.RawContactsColumns
12 android.test.ActivityTestCase
12 android.test.InstrumentationTestSuite
12 android.widget.DatePicker
12 java.security.cert.CertPathValidatorException
12 java.util.concurrent.atomic.AtomicIntegerFieldUpdater
12 java.util.concurrent.atomic.AtomicLongFieldUpdater
12 java.util.logging.MemoryHandler
12 java.util.prefs.PreferenceChangeEvent
12 android.app.Notification.Builder
11 android.service.carrier.CarrierMessagingService
11 android.media.session.MediaController.TransportControls
11 java.lang.Package
11 java.nio.channels.DatagramChannel
11 java.util.concurrent.atomic.AtomicIntegerArray
11 java.util.concurrent.atomic.AtomicLongArray
11 android.database.CursorJoiner
11 android.media.tv.TvView
11 android.provider.DocumentsContract.Document
11 android.telephony.CellIdentityGsm
11 android.text.style.LocaleSpan
11 java.lang.Error
11 java.lang.Exception
11 java.lang.RuntimeException
11 java.sql.Timestamp
11 javax.sql.CommonDataSource
10 android.app.admin.DevicePolicyManager
10 android.service.notification.NotificationListenerService
10 android.app.admin.DeviceAdminReceiver
10 android.media.session.MediaSession.Callback
10 android.provider.Telephony.Sms.Intents
10 java.lang.StrictMath
10 android.bluetooth.BluetoothGattService
10 android.media.tv.TvContract.Programs
10 android.test.ActivityInstrumentationTestCase2
10 java.util.EnumMap
10 java.util.concurrent.atomic.AtomicInteger
10 java.util.concurrent.atomic.AtomicLong
10 javax.crypto.spec.SecretKeySpec
9 android.media.tv.TvInputInfo
9 android.media.MediaFormat
9 android.app.FragmentController
9 android.graphics.BitmapFactory.Options
9 android.media.MediaRouter.RouteInfo
9 android.media.tv.TvInputManager
9 android.provider.DocumentsContract
9 java.util.concurrent.ConcurrentSkipListMap
9 android.media.MediaRecorder.VideoEncoder
9 android.media.tv.TvInputService
9 android.os.UserManager
9 android.provider.ContactsContract.Directory
9 android.provider.DocumentsProvider
9 android.provider.VoicemailContract
9 android.text.TextUtils.SimpleStringSplitter
9 android.webkit.WebResourceRequest
9 java.io.BufferedReader
9 java.lang.Double
9 java.util.Collection
9 java.lang.Class
8 android.hardware.Sensor
8 java.lang.Float
8 android.media.AudioRecord
8 android.accessibilityservice.AccessibilityService
8 java.awt.font.NumericShaper
8 java.util.Vector
8 android.app.AlarmManager
8 android.test.ApplicationTestCase
8 android.test.RenamingDelegatingContext
8 java.io.ObjectInputStream
8 java.util.LinkedHashMap
8 android.bluetooth.BluetoothGattDescriptor
8 android.service.notification.StatusBarNotification
8 java.util.regex.Pattern
7 android.app.Notification.Action.WearableExtender
7 android.os.UserHandle
7 android.provider.ContactsContract.CommonDataKinds.Callable
7 android.security.keystore.KeyProtection
7 android.widget.Chronometer
7 java.security.cert.PKIXCertPathChecker
7 java.util.PriorityQueue
7 android.os.Process
7 android.printservice.PrintJob
7 android.security.keystore.KeyGenParameterSpec
7 android.security.keystore.KeyGenParameterSpec.Builder
7 android.app.ActivityOptions
7 android.hardware.camera2.CameraDevice
7 android.location.GpsSatellite
7 android.location.GpsStatus
7 android.security.keystore.KeyProtection.Builder
7 java.sql.DataTruncation
6 android.media.AudioTrack
6 android.webkit.WebViewClient
6 android.app.job.JobScheduler
6 android.hardware.camera2.CameraCaptureSession.CaptureCallback
6 android.media.MediaCodec.CryptoException
6 android.telecom.PhoneAccount
6 android.view.AbsSavedState
6 android.view.accessibility.AccessibilityWindowInfo
6 android.widget.FrameLayout.LayoutParams
6 java.security.cert.X509CRLEntry
6 java.util.HashSet
6 java.util.concurrent.ConcurrentLinkedQueue
6 java.util.zip.InflaterInputStream
6 java.lang.Integer
6 java.lang.Long
6 android.telephony.TelephonyManager
6 android.view.Window
6 android.content.ClipDescription
6 android.security.keystore.KeyInfo
6 android.text.util.Linkify
6 java.util.ResourceBundle.Control
6 java.util.TreeMap
6 android.view.inputmethod.InputMethodSubtype
5 android.app.Notification.Action.Builder
5 android.content.pm.PackageInstaller.Session
5 android.graphics.Outline
5 android.media.MediaCodec.CryptoInfo
5 android.media.tv.TvContentRating
5 android.net.wifi.WifiEnterpriseConfig.Eap
5 android.telephony.CellIdentityLte
5 android.telephony.CellIdentityWcdma
5 android.view.inputmethod.InputConnectionWrapper
5 java.nio.channels.spi.SelectorProvider
5 java.security.cert.CertPathBuilder
5 java.security.cert.CertPathValidator
5 android.app.Notification.WearableExtender
5 android.net.ConnectivityManager
5 android.test.AndroidTestCase
5 android.widget.TabWidget
5 java.text.DecimalFormatSymbols
5 android.app.Service
5 android.view.inputmethod.InputConnection
5 java.util.concurrent.ForkJoinTask
5 android.provider.CallLog.Calls
5 android.media.MediaRecorder.AudioSource
5 java.util.Currency
5 javax.net.ssl.SSLServerSocket
5 java.util.Collections
5 java.util.logging.Logger
5 android.view.inputmethod.BaseInputConnection
5 android.telecom.TelecomManager
5 android.test.ActivityUnitTestCase
5 android.test.InstrumentationTestCase
5 android.test.ServiceTestCase
5 java.lang.Byte
5 java.sql.SQLWarning
4 android.content.pm.PackageManager
4 android.content.ContentProviderClient
4 android.content.pm.ServiceInfo
4 android.media.session.PlaybackState
4 java.lang.Short
4 java.net.URLClassLoader
4 java.nio.channels.FileLock
4 java.security.Provider
4 java.util.concurrent.Executors
4 android.text.style.SuggestionSpan
4 android.app.DownloadManager.Request
4 android.util.Patterns
4 java.sql.BatchUpdateException
4 android.app.Activity
4 android.provider.Settings
4 android.app.Notification.Action
4 android.app.backup.BackupAgent
4 android.content.pm.FeatureInfo
4 android.media.AudioFormat
4 android.media.tv.TvTrackInfo.Builder
4 android.telecom.PhoneAccount.Builder
4 android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder
4 android.app.Notification
4 android.media.tv.TvInputService.Session
4 android.content.SyncRequest.Builder
4 android.content.pm.ComponentInfo
3 android.animation.Animator
3 java.sql.SQLException
3 java.util.List
3 android.content.pm.PackageInstaller.SessionParams
3 android.printservice.PrinterDiscoverySession
3 android.provider.DocumentsContract.Root
3 android.telecom.InCallService
3 java.net.HttpCookie
3 android.media.MediaExtractor
3 android.text.TextUtils
3 android.app.FragmentHostCallback
3 android.app.assist.AssistContent
3 android.provider.ContactsContract.CommonDataKinds.StructuredName
3 android.telecom.ConnectionService
3 java.lang.reflect.Constructor
3 java.util.Locale
3 java.util.concurrent.SynchronousQueue
3 android.net.TrafficStats
3 android.net.wifi.WifiEnterpriseConfig
3 android.webkit.WebSettings
3 android.net.NetworkInfo
3 android.os.StrictMode.VmPolicy.Builder
3 android.provider.ContactsContract.CommonDataKinds.Organization
3 java.util.concurrent.ArrayBlockingQueue
3 java.util.concurrent.ForkJoinPool
3 java.util.concurrent.LinkedBlockingQueue
3 android.R.id
3 android.test.InstrumentationTestRunner
3 android.test.mock.MockContext
3 android.bluetooth.BluetoothGattCharacteristic
3 android.drm.DrmManagerClient
3 android.content.ContextWrapper
2 android.test.mock.MockPackageManager
2 android.app.FragmentTransaction
2 android.hardware.SensorManager
2 android.media.tv.TvTrackInfo
2 android.provider.ContactsContract.CommonDataKinds.Email
2 android.provider.VoicemailContract.Voicemails
2 android.widget.CalendarView
2 java.util.concurrent.PriorityBlockingQueue
2 java.util.zip.ZipFile
2 android.test.AndroidTestRunner
2 android.test.ViewAsserts
2 android.provider.Settings.Global
2 android.content.Context
2 android.hardware.Camera
2 android.os.PowerManager
2 android.telecom.RemoteConference
2 java.lang.reflect.Method
2 android.accessibilityservice.AccessibilityServiceInfo
2 java.lang.AbstractStringBuilder
2 android.media.MediaRecorder
2 android.media.tv.TvContract.Programs.Genres
2 java.util.concurrent.LinkedTransferQueue
2 android.content.ContentResolver
2 android.content.pm.ApplicationInfo
2 android.graphics.ImageFormat
2 java.util.GregorianCalendar
2 android.telecom.Call.Details
2 java.nio.channels.FileChannel
2 android.widget.PopupWindow
2 android.app.DownloadManager
2 android.provider.ContactsContract.Contacts
2 android.view.Window.Callback
2 java.security.cert.X509Certificate
2 java.util.TimeZone
2 android.R.attr
2 android.renderscript.Allocation
2 java.util.Calendar
2 android.content.Intent
2 android.app.UiAutomation
2 android.graphics.Color
2 android.util.DisplayMetrics
2 java.util.TreeSet
2 java.util.concurrent.ConcurrentSkipListSet
2 android.app.Fragment
2 android.service.voice.VoiceInteractionSession
1 android.os.Build.VERSION_CODES
1 android.renderscript.Script
1 javax.net.ssl.SSLSocket
1 android.hardware.camera2.CaptureResult
1 android.content.pm.PermissionInfo
1 java.util.concurrent.ConcurrentLinkedDeque
1 android.Manifest.permission
1 android.opengl.GLSurfaceView
1 android.telecom.Connection
1 java.lang.reflect.Field
1 java.util.LinkedList
1 android.media.AudioAttributes
1 java.net.URLConnection
1 java.util.ArrayDeque
1 java.io.ObjectOutputStream
1 android.view.View
1 android.widget.LinearLayout
1 android.view.accessibility.AccessibilityNodeInfo
1 android.view.KeyEvent
1 android.media.AudioDeviceInfo
1 java.lang.ClassLoader
1 java.util.concurrent.CopyOnWriteArrayList
1 android.test.TouchUtils
1 android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction
1 android.content.res.Configuration
1 android.provider.ContactsContract.CommonDataKinds.Phone
1 java.nio.CharBuffer
1 java.util.BitSet
1 android.view.Display
1 javax.net.ssl.SSLEngine
1 android.nfc.NfcAdapter
1 android.test.MoreAsserts
1 android.media.AudioManager
1 android.view.inputmethod.EditorInfo
1 android.content.pm.ActivityInfo
1 java.util.concurrent.LinkedBlockingDeque
1 android.hardware.camera2.CameraCharacteristics
1 android.widget.ProgressBar
1 android.preference.Preference
1 android.test.mock.MockCursor
1 android.view.ViewParent
1 java.util.zip.ZipInputStream
1 android.view.inputmethod.InputMethodManager
1 android.widget.AutoCompleteTextView
1 java.util.zip.ZipOutputStream
<1 android.graphics.drawable.LayerDrawable
<1 android.media.MediaCodec
<1 android.widget.TextView
<1 android.graphics.Paint
<1 android.widget.RemoteViews
<1 android.hardware.camera2.CaptureRequest
<1 java.util.Scanner
<1 android.app.Instrumentation
<1 android.opengl.GLES31
<1 android.media.MediaCodecInfo.CodecCapabilities
<1 java.lang.Character
<1 android.database.sqlite.SQLiteDatabase
<1 android.provider.Settings.Secure
<1 android.media.MediaPlayer
<1 android.view.MotionEvent
<1 android.R.style
<1 android.opengl.GLES30
<1 android.provider.Settings.System
<1 android.view.ViewGroup
<1 android.hardware.camera2.CameraMetadata
<1 java.lang.Character.UnicodeBlock
<1 android.test.FlakyTest
<1 android.test.UiThreadTest
<1 android.test.suitebuilder.annotation.LargeTest
<1 android.test.suitebuilder.annotation.MediumTest
<1 android.test.suitebuilder.annotation.SmallTest
<1 android.test.suitebuilder.annotation.Smoke
<1 android.test.suitebuilder.annotation.Suppress
<1 java.util.IllegalFormatException

* See Calculation of Change Percentages, below.


Calculation of Change Percentages

The percent change statistic reported for all elements in the "to" API Level specification is defined recursively as follows:

Percentage difference = 100 * (added + removed + 2*changed)
                        -----------------------------------
                        sum of public elements in BOTH APIs

where added is the number of packages added, removed is the number of packages removed, and changed is the number of packages changed. This definition is applied recursively for the classes and their program elements, so the value for a changed package will be less than 1, unless every class in that package has changed. The definition ensures that if all packages are removed and all new packages are added, the change will be 100%.