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.

TypeAdditionsChangesRemovalsTotal
Packages450054
Classes and Interfaces791659253
Constructors292132
Methods5113528574
Fields141112154
Total764263401067

Changed Packages, Sorted by Percentage Difference

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