API Change Statistics

The overall difference between API Levels 8 and 9 is approximately 2.93%.


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 4 50 0 54
Classes and Interfaces 79 165 9 253
Constructors 29 2 1 32
Methods 511 35 28 574
Fields 141 11 2 154
Total 764 263 40 1067

Changed Packages, Sorted by Percentage Difference

Percentage Difference* Package
62 dalvik.system
30 java.sql
22 javax.sql
13 java.util.concurrent.locks
10 java.util.concurrent
10 javax.security.auth.x500
8 java.util.zip
7 android.content.res
6 java.util
6 java.net
6 java.text
5 android.os
4 android.hardware
4 android.view
4 javax.security.auth
4 javax.net.ssl
4 android.app
3 java.util.concurrent.atomic
3 android.location
3 java.awt.font
2 java.security
2 java.io
1 javax.xml.validation
1 android.service.wallpaper
1 android.telephony.gsm
1 android.content.pm
1 android.provider
<1 javax.xml.parsers
<1 android.view.inputmethod
<1 java.nio
<1 android.net.wifi
<1 dalvik.bytecode
<1 android.media
<1 java.lang.reflect
<1 android.app.admin
<1 android.test.mock
<1 java.lang
<1 android
<1 android.content
<1 android.widget
<1 android.text.format
<1 javax.xml.datatype
<1 javax.xml.transform
<1 java.util.logging
<1 android.util
<1 android.graphics
<1 android.telephony
<1 org.apache.http.protocol
<1 android.webkit
<1 android.opengl

* See Calculation of Change Percentages, below.


Changed Classes and Interfaces, Sorted by Percentage Difference

Percentage
Difference*
Class or Interface
55 java.util.concurrent.AbstractExecutorService
50 javax.net.ssl.KeyStoreBuilderParameters
50 javax.sql.ConnectionPoolDataSource
50 javax.sql.DataSource
47 java.security.Policy
45 java.net.NetworkInterface
42 java.text.CollationKey
42 java.util.TreeMap
33 java.io.IOException
33 java.util.concurrent.ExecutorService
33 java.util.concurrent.locks.LockSupport
32 javax.sql.RowSet
29 java.util.TreeSet
29 java.sql.BatchUpdateException
26 javax.security.auth.Subject
25 java.util.LinkedList
25 java.security.UnrecoverableKeyException
25 java.sql.SQLWarning
25 java.util.ResourceBundle
23 java.sql.SQLException
20 dalvik.system.PathClassLoader
20 javax.sql.PooledConnection
19 java.sql.PreparedStatement
19 android.location.Criteria
19 android.view.MotionEvent
16 java.sql.CallableStatement
16 java.io.PipedReader
16 java.util.concurrent.locks.AbstractOwnableSynchronizer
16 javax.net.ssl.SSLSessionBindingEvent
16 java.util.Arrays
14 java.security.AccessController
14 java.util.PropertyResourceBundle
13 java.sql.ResultSet
13 android.provider.ContactsContract.CommonDataKinds.Nickname
13 java.nio.Buffer
13 javax.net.ssl.SSLContext
13 java.util.concurrent.TimeUnit
12 java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock
11 java.sql.Connection
11 java.io.File
11 android.hardware.Sensor
11 android.net.wifi.WifiManager.WifiLock
11 javax.net.ssl.SSLContextSpi
10 java.io.PipedInputStream
10 java.sql.Blob
10 java.util.concurrent.Executors
10 javax.security.auth.x500.X500Principal
9 java.lang.Math
9 java.lang.StrictMath
9 android.location.Geocoder
9 android.location.LocationManager
9 android.media.CameraProfile
9 android.os.PowerManager.WakeLock
9 java.sql.Types
9 java.util.Properties
9 javax.xml.validation.SchemaFactory
8 android.content.AbstractThreadedSyncAdapter
8 java.lang.reflect.Member
8 java.sql.Clob
8 javax.net.ssl.SSLSessionContext
8 java.lang.Class
8 java.sql.SQLInput
8 java.sql.SQLOutput
7 android.content.IntentSender
7 java.sql.DataTruncation
7 java.util.concurrent.ScheduledThreadPoolExecutor
7 java.text.DecimalFormatSymbols
7 java.text.DateFormatSymbols
7 java.text.Format
6 android.telephony.gsm.GsmCellLocation
6 java.io.ObjectStreamClass
6 java.util.concurrent.atomic.AtomicBoolean
6 java.util.concurrent.atomic.AtomicReference
6 java.util.concurrent.atomic.AtomicReferenceFieldUpdater
6 android.view.KeyEvent
6 android.media.MediaPlayer
6 android.content.pm.PackageItemInfo
6 java.awt.font.TextAttribute
5 android.content.SharedPreferences.Editor
5 android.graphics.ImageFormat
5 java.text.BreakIterator
5 java.util.concurrent.atomic.AtomicReferenceArray
5 android.hardware.Camera
5 javax.net.ssl.HandshakeCompletedEvent
5 android.content.pm.PackageManager
5 android.hardware.Camera.Parameters
5 java.lang.Double
5 java.lang.Enum
5 android.content.pm.ActivityInfo
5 java.lang.Float
4 android.widget.ListView
4 android.os.Build.VERSION_CODES
4 android.view.inputmethod.InputConnection
4 android.view.inputmethod.InputConnectionWrapper
4 java.lang.reflect.Array
4 java.sql.Array
4 android.test.mock.MockPackageManager
4 android.content.pm.PackageInfo
4 java.sql.DatabaseMetaData
4 android.media.AudioTrack
4 android.provider.MediaStore
4 java.util.concurrent.FutureTask
4 javax.net.ssl.SSLSocket
4 java.text.NumberFormat
4 android.media.ExifInterface
4 android.view.inputmethod.BaseInputConnection
4 java.util.concurrent.ConcurrentHashMap
3 java.net.SocketImpl
3 java.util.concurrent.atomic.AtomicIntegerFieldUpdater
3 java.util.concurrent.atomic.AtomicLongFieldUpdater
3 javax.xml.parsers.SAXParserFactory
3 android.os.DropBoxManager.Entry
3 android.util.DisplayMetrics
3 java.util.concurrent.atomic.AtomicIntegerArray
3 java.util.concurrent.atomic.AtomicLongArray
3 javax.xml.transform.TransformerFactory
3 android.hardware.SensorManager
3 java.sql.Statement
3 android.R.drawable
3 android.media.CamcorderProfile
3 android.view.ViewConfiguration
3 java.lang.Package
3 java.sql.ParameterMetaData
3 android.provider.Settings
3 javax.net.ssl.SSLEngine
2 android.os.ParcelFileDescriptor
2 android.service.wallpaper.WallpaperService.Engine
2 java.util.concurrent.ThreadPoolExecutor
2 java.util.concurrent.atomic.AtomicInteger
2 java.util.concurrent.atomic.AtomicLong
2 android.app.Notification
2 java.util.Calendar
2 java.lang.String
2 android.Manifest.permission
2 java.util.concurrent.locks.ReentrantReadWriteLock
2 android.os.Build
2 android.webkit.WebSettings
2 android.app.ActivityManager.RunningAppProcessInfo
2 javax.xml.parsers.DocumentBuilderFactory
2 java.util.logging.Logger
2 java.sql.ResultSetMetaData
1 android.R.style
1 android.os.Environment
1 javax.xml.datatype.DatatypeFactory
1 java.util.Collections
1 android.app.admin.DevicePolicyManager
1 java.lang.System
1 android.text.format.DateUtils
1 org.apache.http.protocol.HTTP
1 android.media.MediaRecorder
1 android.view.View
1 android.widget.RemoteViews
1 java.io.PrintStream
1 java.io.PrintWriter
1 android.content.pm.ApplicationInfo
1 android.view.Window
1 java.util.Locale
<1 android.content.Context
<1 dalvik.bytecode.Opcodes
<1 android.R.attr
<1 java.util.Scanner
<1 android.telephony.TelephonyManager
<1 android.content.res.Configuration
<1 android.app.Activity
<1 android.opengl.GLES20

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