API Change Statistics

The overall difference between API Levels 26 and 27 is approximately 0.82%.


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 0 59 0 59
Classes and Interfaces 20 204 0 224
Constructors 6 0 0 6
Methods 206 176 16 398
Fields 42 2 0 44
Total 274 441 16 731

Changed Packages, Sorted by Percentage Difference

Percentage Difference* Package
29 android.service.autofill
21 dalvik.system
19 android.graphics.drawable.shapes
10 org.json
9 android.test.mock
8 java.time.chrono
8 android.system
6 android.net.wifi.p2p
3 android.database.sqlite
3 java.io
3 android.view.accessibility
2 java.util.logging
2 android.telephony.gsm
2 java.time
2 android.content.res
2 android.hardware.fingerprint
2 android.service.wallpaper
1 javax.xml.xpath
1 java.util.zip
1 android.webkit
1 java.util.jar
1 android.transition
1 android.view.autofill
1 java.lang.reflect
<1 android.util
<1 java.util.concurrent
<1 android.os
<1 android.app
<1 android.os.storage
<1 java.nio.file
<1 java.security
<1 android.content.pm
<1 android.media
<1 android.graphics.drawable
<1 android.view.animation
<1 android.widget
<1 java.util
<1 java.lang
<1 android.text
<1 javax.xml.transform
<1 android.text.style
<1 android.animation
<1 android.telecom
<1 android.view
<1 android.net
<1 javax.crypto
<1 android.media.audiofx
<1 android.hardware.camera2
<1 android.test
<1 android.telephony
<1 android.renderscript
<1 android
<1 java.security.cert
<1 android.icu.text
<1 android.media.tv
<1 android.hardware
<1 android.database
<1 java.net
<1 android.content

* See Calculation of Change Percentages, below.


Changed Classes and Interfaces, Sorted by Percentage Difference

Percentage
Difference*
Class or Interface
100 android.net.wifi.p2p.WifiP2pManager.Channel
75 java.time.chrono.ChronoLocalDateImpl
66 android.test.mock.MockResources
60 android.util.Base64InputStream
50 android.media.RemoteControlClient.MetadataEditor
50 java.util.logging.ConsoleHandler
50 org.json.JSONException
36 android.transition.TransitionSet
33 android.content.res.AssetFileDescriptor.AutoCloseInputStream
33 android.graphics.drawable.shapes.OvalShape
33 android.graphics.drawable.shapes.RoundRectShape
33 dalvik.system.BaseDexClassLoader
33 dalvik.system.InMemoryDexClassLoader
33 java.io.StringWriter
33 java.nio.file.DirectoryIteratorException
28 java.io.StringBufferInputStream
27 java.io.BufferedOutputStream
26 java.io.ByteArrayInputStream
25 java.util.Vector
25 android.webkit.CookieSyncManager
25 java.io.LineNumberInputStream
22 android.view.HapticFeedbackConstants
22 java.io.BufferedInputStream
21 java.time.chrono.MinguoDate
21 java.time.chrono.ThaiBuddhistDate
20 android.graphics.drawable.shapes.PathShape
20 android.service.autofill.SaveInfo.Builder
20 android.text.InputFilter.AllCaps
20 android.text.style.MetricAffectingSpan
20 java.io.UncheckedIOException
20 java.io.WriteAbortedException
20 java.security.PrivilegedActionException
20 java.time.chrono.HijrahDate
20 java.time.chrono.JapaneseDate
20 javax.xml.xpath.XPathException
19 java.lang.StringBuffer
18 android.content.pm.PackageInstaller.SessionInfo
18 java.io.CharArrayWriter
16 java.security.KeyStore.PasswordProtection
16 java.security.Provider
16 java.util.zip.DeflaterInputStream
15 java.util.jar.JarFile
14 android.graphics.drawable.shapes.ArcShape
14 android.graphics.drawable.shapes.RectShape
14 android.telephony.gsm.SmsMessage.SubmitPdu
14 java.lang.reflect.UndeclaredThrowableException
14 java.util.concurrent.ThreadLocalRandom
12 android.system.StructStat
12 java.io.PipedReader
11 android.app.IntentService
11 android.media.VolumeShaper
11 android.os.MemoryFile
11 android.view.animation.AnimationSet
11 android.widget.FrameLayout
11 android.widget.TableRow
11 java.io.PipedOutputStream
11 java.lang.ClassNotFoundException
11 java.lang.ExceptionInInitializerError
11 java.lang.reflect.InvocationTargetException
10 android.view.accessibility.AccessibilityManager
10 android.test.mock.MockContentProvider
9 android.widget.ActionMenuView
9 android.hardware.fingerprint.FingerprintManager
9 android.media.MediaCrypto
9 android.media.MediaDescrambler
9 java.util.concurrent.CopyOnWriteArraySet
9 java.util.zip.GZIPOutputStream
8 java.time.chrono.ChronoLocalDateTime
8 java.io.PrintWriter
8 java.io.ByteArrayOutputStream
8 java.io.PipedInputStream
7 java.time.LocalDate
7 android.database.sqlite.SQLiteOpenHelper
7 android.widget.RadioGroup
7 java.io.FileInputStream
7 java.time.chrono.ChronoLocalDate
7 java.security.SecureRandom
6 java.time.chrono.ChronoZonedDateTime
6 android.telecom.Call.RttCall
6 java.io.DataOutputStream
6 java.io.PushbackInputStream
6 java.util.HashSet
6 java.util.concurrent.ConcurrentLinkedQueue
6 java.time.Year
6 android.webkit.WebViewClient
5 android.media.Ringtone
5 android.renderscript.AllocationAdapter
5 android.widget.EditText
5 android.widget.ToggleButton
5 java.io.FileOutputStream
5 java.time.Instant
5 java.util.concurrent.ForkJoinPool
5 java.time.YearMonth
5 android.content.pm.PackageInstaller.Session
5 android.net.VpnService
5 java.io.PrintStream
5 java.util.ArrayList
5 android.view.autofill.AutofillManager
4 javax.xml.transform.TransformerException
4 android.widget.LinearLayout
4 android.service.wallpaper.WallpaperService.Engine
4 java.util.Hashtable
4 android.os.PersistableBundle
4 java.time.OffsetTime
4 java.time.LocalTime
4 android.graphics.drawable.DrawableContainer
4 android.graphics.drawable.NinePatchDrawable
4 android.media.MediaCas
4 android.widget.BaseAdapter
4 android.widget.TableLayout
4 java.security.cert.PKIXRevocationChecker
3 java.time.ZonedDateTime
3 android.graphics.drawable.AdaptiveIconDrawable
3 android.widget.GridLayout
3 android.animation.ObjectAnimator
3 java.util.concurrent.SynchronousQueue
3 javax.crypto.ExemptionMechanism
3 android.app.WallpaperManager
3 android.icu.text.DateIntervalFormat
3 java.util.concurrent.ArrayBlockingQueue
3 java.util.concurrent.LinkedBlockingQueue
3 java.time.LocalDateTime
3 android.icu.text.RuleBasedCollator
3 android.animation.AnimatorSet
3 android.media.MediaSync
2 android.graphics.drawable.ShapeDrawable
2 java.util.concurrent.PriorityBlockingQueue
2 android.webkit.WebView
2 android.media.JetPlayer
2 android.media.SoundPool
2 android.os.FileObserver
2 android.test.AndroidTestRunner
2 java.time.OffsetDateTime
2 java.util.Collection
2 java.util.concurrent.LinkedTransferQueue
2 java.util.zip.Inflater
2 android.view.TextureView
2 java.time.chrono.HijrahChronology
2 java.time.chrono.JapaneseChronology
2 java.time.chrono.MinguoChronology
2 java.time.chrono.ThaiBuddhistChronology
2 java.util.SimpleTimeZone
2 android.telephony.SmsManager
2 java.time.chrono.IsoChronology
2 android.widget.Toolbar
2 android.widget.ProgressBar
2 android.os.storage.StorageManager
2 java.util.TreeSet
2 java.util.concurrent.ConcurrentSkipListSet
1 java.net.URL
1 java.util.concurrent.ConcurrentLinkedDeque
1 android.R.string
1 java.util.LinkedList
1 android.content.pm.PermissionInfo
1 android.os.Build.VERSION_CODES
1 java.util.ArrayDeque
1 android.graphics.drawable.BitmapDrawable
1 android.media.tv.TvContract
1 java.util.concurrent.ConcurrentSkipListMap
1 java.time.Period
1 android.media.audiofx.Visualizer
1 android.net.NetworkCapabilities
1 android.media.MediaExtractor
1 android.widget.RelativeLayout
1 java.util.zip.Deflater
1 java.util.concurrent.ThreadPoolExecutor
1 android.hardware.Camera
1 android.animation.ValueAnimator
1 android.media.MediaDrm
1 android.media.audiofx.AudioEffect
1 android.database.sqlite.SQLiteDatabase
1 android.graphics.drawable.GradientDrawable
1 java.util.concurrent.LinkedBlockingDeque
1 android.media.MediaCodecInfo.CodecProfileLevel
1 android.media.MediaMetadataRetriever
1 android.app.NotificationManager
1 android.media.MediaRecorder
1 android.media.AudioRecord
1 java.util.zip.ZipOutputStream
<1 android.database.AbstractCursor
<1 android.graphics.drawable.LayerDrawable
<1 android.media.MediaCodec
<1 java.util.zip.ZipFile
<1 android.view.InputDevice
<1 android.view.animation.Animation
<1 android.content.pm.PackageManager
<1 android.hardware.camera2.CaptureRequest
<1 android.os.Bundle
<1 android.view.WindowManager.LayoutParams
<1 android.content.pm.ApplicationInfo
<1 android.hardware.camera2.CaptureResult
<1 android.media.AudioTrack
<1 android.hardware.camera2.CameraCharacteristics
<1 android.widget.AbsListView
<1 android.media.ToneGenerator
<1 android.media.MediaPlayer
<1 android.app.Activity
<1 android.view.ViewGroup
<1 android.telephony.CarrierConfigManager
<1 android.telephony.TelephonyManager
<1 android.view.Window
<1 android.system.OsConstants
<1 android.content.Intent
<1 android.R.attr

* 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%.