Is the dependency safe to upgrade?
Gradle
1 | gradle wrapper --gradle-version= |
Note, you need to run this command twice to upgrade both Gradle and the Gradle Wrapper itself
9.0.0: ??(Java 17, Kotlin 2.2) The whole community isn’t ready yet
8.14.3: ✔
8.13: ❌
8.11.1: ✔
8.10.2: ✔
8.8: ✔(Kotlin 1.9)
8.2.1: ✔
8.1.1: ✔
Configuration cache stable(requires Kotlin 1.8 and
sourceCompatibility, etc.)1
2
3
4
5
6
7compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_17.toString()
}
8.0.2: ✔
7.5.1: ✔
Kotlin
org.jetbrains.kotlin:kotlin
2.1.21: ✔
KSPrequired formoshi,room, andandroidx.hilt
2.0.21: ✔
2.0.0: ⬆
- Compose Compiler Gradle plugin
- Add the
.kotlindirectory to your project’s.gitignorefile. enumValues<T>()->enumEntries<T>()- Stable
AutoCloseableinterface
1.9.25: ✔
Enum.values()->Enum.entriesdata object EndOfFile : ReadResult..<
1.8.22: ✔
- kotlin-stdlib-jdk7 and kotlin-stdlib-jdk8 -> kotlin-stdlib
kotlinx-android-extension
1.7.20: ✔
T & Anymin()andmax()throw exceptions if emptyDeepRecursiveFunction- sam-with-receiver plugin
1.6.21: ✔
1.6.10: ✔
buildList,buildSet, andbuildMap
1.5.31: ✔
org.jetbrains.kotlinx:kotlinx-coroutines
1.10.2: ✔(Kotlin 2.1)
1.9.0: ✔(Kotlin 2.0)
1.8.1: ✔
1.8.0: ✔(Kotlin 1.9)
1.7.3: ✔
1.7.1: ✔(Kotlin 1.8)
TestCoroutineScheduler,runTest, andTestScopeAPI are promoted to stable
1.6.4: ✔
1.5.2: ✔
org.jetbrains.kotlinx:kotlinx-collections-immutable
- 0.3.8: ✔
- 0.3.7: ✔
- 0.3.5: ✔
-
- 2.1.21-2.0.2: ✔
com.android.tools.build:gradle(& Android Studio)
What's Newin Android Studio has more release notes.8.13.0(Narwhal 4 Feature Drop | 2025.1.4, Gradle 8.13): ??
8.13.0(Narwhal 3 Feature Drop | 2025.1.3, Gradle 8.13): ✔
8.12.2(Narwhal 2025.1.2, Gradle 8.13): ❌(Mysterious 8.12.3)
- Studio Labs
- Gemini in Android Studio’s Agent Mode
- 16 KB page size support
- Partner Device Labs available with Android Device Streaming
- K2 mode by default: ❗ No warnings on deprecated fields
8.10.1(Meerkat 2024.3.2, Gradle 8.11.1): ✔
8.8.2(Ladybug 2024.2.2, Gradle 8.10.2): ✔
8.6.1(Koala 2024.1.2, Gradle 8.7): ✔ Lots of bugs, but at least usable.
8.4.2(JellyFish 2023.3.1, Gradle 8.6): ❌ Broken Logcat and ADB Wifi
8.3.2(Iguana 2023.2.1, Gradle 8.4, JDK 17, Maxium API Level 34): ✔
8.2.2(Hedgehog 2023.1.1): ✔
8.1.4(Giraffe): Skipped
❗ Upgrade all dependencies to the latest first
🤔 Proguard removes empty constructors?
1
2
3-keepclassmembers class * extends foo.bar.Class {
<init>();
}
8.0.2(Flamingo, 2022.2.1): ✔
- 🟠 Retrofit After enable R8 full mode getting ParameterizedType error Gone in retrofit 2.11.0
- 🟠 Proguard Rules (OkHttp 4.7.2) Gone in okhttp 4.12.0
- AGP Upgrade Assistant 👍
- JDK 17 required to run AGP 8.0
7.4.2: ❌ Broken
- New Logcat
7.3.1: ✔
Since 7.1.3:
7.2.2: ❌ Basically broken
7.1.3: ✔
7.0.4: ✔
-
1.7.1: ✔
1.7.0: ✔
1.6.1: ✔
AppCompatDelegate.setApplicationLocales(LocaleListCompat)
1.5.1: ✔(Android 13(33))
1.4.2: ✔
1.4.1: ✔(Android 12(31))
1.3.1: ✔
-
1.11.0: ??(Android 16(36))
1.10.1: ✔(Android 15(35))
LocalActivity
1.9.0: ✔
OnUserLeaveHintProvider- APIs now warn when calling
onBackPressedDispatcher.onBackPressed() activity-ktxis now completely empty.
1.8.1: -
ComponentActivity.enableEdgeToEdge()has been added to easily set up the edge-to-edge display in a backward-compatible manner.
1.7.2: ✔(Kotlin 1.8, Compose 2023.06.01)
-
1.8.9: ✔
1.8.8: ✔
1.8.6: ✔
1.8.5: ✔
1.8.4: ✔
1.8.2: ✔
Composable(fragment-compose):AndroidFragment
1.7.1: ✔
1.7.0: ✔
1.6.2: ✔
1.6.1: ✔
1.5.6: ✔
1.4.1: ✔(Android 12(31))
- FragmentContainerView.getFragment
1.3.6: ✔
-
2.9.4: ✔
2.9.1: ✔
SavedStateHandle.getMutableStateFlow- KotlinX Serialization Support
2.8.7: ✔
2.8.6: ⬆(Compose 1.7)
2.8.4: ✔
2.8.2: ✔
LocalLifecycleOwner=>androidx.lifecycle:lifecycle-runtime-composeonClick: () -> Unit = dropUnlessResumed/Started { navController.navigate(NEW_SCREEN) }ViewModel.viewModelScopeis now an overridable constructor parameter, allowing you to inject your own dispatcher
2.7.0: ✔(Android 14(34))
- Read Important changes since 2.6.0
LiveData.map,switchMapSavedStateHandle,Array<CustomParcelable>LifecycleEventEffect,LifecycleStartEffect,LifecycleResumeEffect
2.6.2: ✔
2.6.1: ✔(Kotlin 1.8)
LiveData.isInitializedLifecycle.launchWhenX- If you want
Observer.onChanged()to accept a nullable type, you must instantiate theObserverwith a nullable type.
2.5.1: ✔
2.4.1: ✔(Android 12(31))
lifecycle-common-java8
2.3.1: ✔
-
1.17.0: ✔
1.16.0: ✔
- JSpecify nullness annotations
- KTX
Bitmap.createBitmapBitmap.createScaledBitmapColor.parseColorBitmapDrawable(.getPixel.childCount.edit()ColorDrawable
1.15.0: ^(Android 15(35))
1.13.1: ✔
1.12.0: ✔(Android 14(34))
- New
LocalePreferencesAPIs to help developers to easily access locale data or user’s locale preferences. - Added
LinkMovementMethodCompatthat fixes link touch handling - Added a
SoftwareKeyboardControllerCompatto provide direct methods to show and hide the software keyboard given a View.
- New
1.10.1: ✔(Kotlin 1.8)
- Adds compatibility methods for new APIs introduced in Android 13 for Parcels, Bundles, and Intents.
1.9.0: ✔(Android 13(33))
1.8.0: ✔
1.7.0: ✔(Android 12(31))
1.6.0: ✔
androidx.collection:collection-ktx
1.5.0: ✔
SieveCacheis a new allocation-free replacement forLruCachethat offers better hit ratio characteristics.
1.4.5: ✔
1.4.0: ✔
ScatterMap,ScatterSet, andObjectList.
1.3.0: ✔
- You can safely drop any dependencies on
collection:collection-ktxin favor ofcollection:collectionascollection-ktxis now empty. - ❗
ArrayMap.isEmpty->ArrayMap.isEmpty()
- You can safely drop any dependencies on
1.2.0: ✔
com.android.tools:desugar_jdk_libs
2.1.5: ✔
2.1.3: ❌(AGP 8.0)
- java.lang.IllegalArgumentException: this and base files have different roots
2.0.4: ✔
2.0.3: ✔(AGP 7.4)
1.2.2: ✔(AGP 7.3, Android 13(33))
1.1.5: ✔
getDisplayNamedoesn’t work.
androidx.constraintlayout:constraintlayout
2.2.1: ✔
2.2.0: ✔
2.1.4: ✔
Gone<->Visible components are now animated as expected
androidx.constraintlayout:constraintlayout-compose
- 1.1.1: ✔
- 1.1.0: ✔(Compose 1.7)
- !
Dimension.ratioonly allowsW:H
- !
- 1.0.1: ✔
androidx.recyclerview:recyclerview
1.4.0: ✔(Android 15)
1.3.2: ✔ Depending on a beta viewpager2
1.3.0: ✔
ConcatAdapter.getWrappedAdapterAndPosition
1.2.1: ✔
androidx.viewpager2:viewpager2
- 1.1.0: ✔
- 1.0.0: ✔
androidx.navigation:navigation
2.9.5: ??
2.9.4: ??
2.9.3: ✔
2.9.1: ✔
2.8.6: ✔
2.8.5: ✔
2.8.4: ✔(Compose 1.7)
- Navigation Kotlin DSL Type-Safety(used by Navigation Compose)
navigation-fragment-compose:<composable android:id="@+id/home_screen"...
2.7.7: ✔(Android 14(34))
2.5.3: ✔
2.4.2: ✔
2.3.5: ✔
-
2.8.3: ??
2.8.1: ✔
2.7.2: ✔(Kotlin 2.1)
2.6.1: ✔(Android 14(34))
2.5.2: ✔
2.4.3: ✔(Kotlin 1.7)
2.4.1: ✔(Android 12(31))
- Auto Migrations👍
2.3.0: ✔
androidx.preference:preference
- 1.2.1: ✔
- 1.1.1: ✔
-
2.10.3: ❌
2.10.2: ❌
2.10.1: ✔(Android 15(35))
2.9.1: ✔
2.9.0: ✔(Android 14(34))
work-runtime-ktxis now empty.override val workManagerConfiguration: androidx.work.Configuration
2.8.1: ✔(Kotlin 1.7.21)
2.7.1: ✔(Android 12(31))
2.6.0: ✔
-
- 1.2.0: ✔
- 1.1.1: ✔
-
- 1.8.0: ✔
ExoPlayer.setScrubbingModeEnabled(boolean)DefaultEncoderFactory.setEnableCodecDbLite- Filling an initial gap (added via
addGap()) with silent audio now requires explicitly settingexperimentalSetForceAudioTrack(true)inEditedMediaItemSequence.Builder.
- 1.6.1, 1.7.1: ✔
- 1.4.1: ✔
- 1.8.0: ✔
androidx.security:security-crypto
- 1.1.0-alpha06: ✔
- 1.1.0-alpha03: ✔
androidx.swiperefreshlayout:swiperefreshlayout
- 1.1.0: ✔
androidx.exifinterface:exifinterface
- 1.4.1: ✔
- 1.3.7: ✔
- 1.3.6: ✔
-
1.4.0: ✔
1.3.0: ✔
WindowSizeClass
1.2.0: ✔
1.1.0: ✔
1.0.0: ✔
-
- 1.1.7: ??
- 1.1.2: ❌
-
2025.10.01: ??(Compose 1.9.4)
2025.10.00: ??(Compose 1.9.3)
2025.09.01: ✔(Compose 1.9.2, Lifecycle 2.9.4)
2025.08.01: ✔(Compose 1.9.0)
- ❗
ViewCompat.setOnApplyWindowInsetsListenerdoesn’t work onComposeView LocalIndication provides:IndicationNodeFactoryModifier.dropShadow()andModifier.innerShadow()Modifier.onVisibilityChangedandModifier.onFirstVisiblerememberLazyListState(cacheWindow = LazyLayoutCacheWindow())OutputTransformationModifier.scrollable2D
- ❗
2025.06.01, 2025.07.00: ✔(Compsoe 1.8.3)
2025.06.00: ✔(Compose 1.8.2)
Modifier.semantics { contentType = ContentType.Username }autoSize = TextAutoSize.StepBased()Modifier.onLayoutRectChangedLocalOverscrollConfiguration->LocalOverscrollFactoryLocalConfiguration.current.screenWidthDp->LocalWindowInfo.current.containerSizeContextualFlowRowandContextualFlowColumn
2025.04.01: ⬆️(Android 15, Compose 1.8)
2025.04.00: ⬆️
2025.02.00, 2025.03.01: ✔(Compose 1.7.8)
2024.12.01: ✔(Compose 1.7.6)
2024.11.00: ✔(Compose 1.7.5)
- Apply
AppCompatDelegate.setDefaultNightMode LocalRippleTheme->LocalRippleConfigurationwindowInsets =->contentWindowInsets =CoordinatorLayout
- Apply
2023.06.01: ✔(Compose UI 1.4 + Kotlin 1.8.22 + Compose Compiler Plugin 1.4.8 + accompanist 0.30.1)
com.google.android.material:material
1.9.0: ??
Set the background color:
1
2
3
4
5<style name="AppTheme" parent="Theme.Material3.DayNight.NoActionBar">
<item name="elevationOverlayEnabled">false</item>
<item name="android:colorBackground">#FFF</item>
<item name="colorSurface">#FFF</item>
</style>1.4.0: ✔
com.google.android.flexbox:flexbox
- 3.0.0: ✔
-
- 2.57.1: ??
- 2.56.2: ✔(Kotlin 2.1)
- 2.55: ✔
- 2.52: ✔
- 2.51.1: ✔
- 2.50: ✔(Hilt Kotlin 1.9)
- 2.47: ✔
- 2.46.1: ✔
- 2.45: ✔
- 2.44.2: ✔
- 2.41: ✔
- 2.40.5: ✔
androidx.hilt:hilt-*
- 1.3.0: ✔
- 1.2.0: ✔(Android 1.9)
- 1.0.0: ✔
com.android.billingclient:billing
7.1.1: ✔(Android 14(34))
enablePendingPurchases()=>enablePendingPurchases(PendingPurchasesParams.newBuilder().enableOneTimeProducts().build())BillingClient.queryPurchaseHistoryAsync()
6.2.1: ✔
6.0.1: ✔
4.1.0: ✔
3.0.2: ✔
com.google.android.gms:play-services-ads
- 22.2.0: ✔
- 21.4.0: ✔
- 20.6.0: ✔
com.google.android.gms:play-services-auth
21.1.1: 🚧
21.0.0: ❗
- Removed Credentials API. Replaced by Credential Manager.
20.6.0: ✔
20.2.0: ✔
Third-party
-
4.12.0: ✔(Kotlin 1.9)
- No more proguard rules
4.11.0: ✔
4.10.0: ✔
4.9.3: ✔
com.squareup.retrofit2:retrofit
3.0.0: ✔
2.11.0: ✔
- No more proguard rules
2.9.0: ✔
-
1.15.2: ✔
1.15.1: ✔(Kotlin 1.9)
1.15.0: ✔(Kotlin 1.8)
1.14.0: ✔(Kotlin 1.7, Android 13(33))
- No more
android.jetifier.ignorelist=moshi-1.13.0
- No more
1.13.0: ✔
- Kotlin 1.6.0
- AGP 7.0.x(and 7.1.x?):
android.jetifier.ignorelist=moshi-1.13.0ingradle.properties
1.12.0: ✔
-
- 3.15.0: ✔
- 3.10.2: ⬆️(Kotlin 2.1)
- 3.9.1: ✔
- 3.9.0: ✔(Kotlin 1.9)
- 3.3.0: ✔(Kotlin 1.8)
- 3.2.0: ✔
- 2.10.0: ✔
com.squareup.leakcanary:leakcanary-android-startup
- 2.14: ✔
- 2.13: ✔
- 2.12: ✔
- 2.10(Android 13(33)): ✔
- 2.9.1: ✔
com.jakewharton.timber:timber
- 5.0.1: ✔
-
- 4.16.0: ✔
- 4.15.1: ✔
- 4.14.2: ✔(Android 13(33))
- 4.13.2: ✔
- 4.12.0: ✔
-
- 3.2.0: ✔(Kotlin 2.1)
- 2.7.0: ⬆️(Kotlin 2.0)
- 2.5.0: ⬆️(Kotlin 1.9, Android 14(34))
- 2.4.0: ✔
-
6.5.2: 🚧(ImageAssetManager NPE Fixed)
6.1.0+: ❌ ImageAssetManager NPE
6.0.1: ✔
- Allow animations in zip files to contain embedded base64 encoded images
5.2.0: ✔
5.0.3: ✔
4.2.2: ✔
com.github.chuckerteam.chucker:library
- 4.1.0: ??
- 4.0.0: ✔(Material 1.9.0)
- 3.5.2: ✔
com.evernote:android-job
- 1.4.2: ✔(Doesn’t work on Android 12(31))
pub.devrel:easypermissions
- 3.0.0: ✔
-
- 5.7.0: ✔(Kotlin 1.7, Android 13(33))
- 5.6.0: ✔(Android 12(31))
- 5.5.1: ✔
-
- 3.3.1: ✔
- 3.2.0: ✔
-
- 2.11.5: ✔
- 2.10.0: ✔(UTF-8 Support)
- 2.9.1: ✔
com.github.kizitonwose:CalendarView
- 1.0.4: ✔(java.time)
- 0.3.5: ✔(ThreeTenABP)
com.github.ben-manes:gradle-versions-plugin
- 0.52.0: ✔
- 0.51.0: ✔
- 0.50.0: ✔
com.dropbox.dependency-guard:dependency-guard
- 0.5.0: ✔
- 0.4.3: ✔
- 0.3.2: ✔
-
13.2.0: !
The client token is now mandatory. SDK initialization will have a check on it and throw out an exception if the client token is not available.
13.1.0: ✔
pl.droidsonroids.gif:android-gif-drawable
- 1.2.29: ✔(Kotlin 2.0)
- 1.2.28: ✔
- 1.2.25: ✔
-
- 0.1.1: 🚧(Android 15(35))
- 0.1.0: ✔
Chinese
-
4.1.9.3: ✔
4.1.9.2: ✔
4.0.4: ✔
- Requires setting
deviceID,deviceModel,setIsDevelopmentDeviceandcloseNativeReportmanually
- Requires setting
3.4.4: ✔
-
- 9.8.8: ✔
- 9.8.5: ✔
- 9.8.0: ✔
- 9.7.5: ✔
- 9.6.8: ✔
- 9.5.2: ✔
- 9.4.7: ✔
- 9.4.5, 9.4.6: ❌ broken
- 9.4.4: ✔
com.umeng.umsdk:asms
- 1.8.7.2: ✔
- 1.8.6: ✔
- 1.8.3: ✔
- 1.6.3: ✔
- 1.4.1: ✔
com.umeng.umsdk:share
- 7.3.7: ✔
- 7.3.5: ✔
- 7.3.4: ✔
- 7.2.0: ✔
- 7.1.7: ✔
com.umeng.umsdk:apm
- 2.0.6: ??
- 2.0.4: ✔
com.tencent.mm.opensdk:wechat-sdk-android-without-mta: Deprecated
- 6.8.0: ✔
com.tencent.mm.opensdk:wechat-sdk-android
- 6.8.34: ✔
-
- 8.9.1: ✔
- 8.8.0: ✔
- 8.7.0: ✔
- ❗
android.permission.READ_PHONE_STATE
- ❗
- 8.5.2: ✔
- 8.4.4: ✔
- 8.0.3: ✔(APK bloats afterwards)
com.github.Meituan-Dianping.walle:library
- 1.1.7: ✔
- 1.1.6: ✔
com.alipay.sdk:alipaysdk-android
- 15.8.35: ✔
- 15.8.33: ✔
- 15.8.17: ✔
- 15.8.16: ✔
- 15.8.14: ✔
- 15.8.11: ✔
QQ、穿山甲需要手动添加