Is the dependency safe to upgrade?
Gradle
1 | gradle wrapper --gradle-version 8.2.1 |
Disable Reformat Code before committing
Note, you need to run this command twice to upgrade both Gradle and the Gradle Wrapper itself
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.0.20: 🚧
2.0.0: 🚧
- Compose Compiler Gradle plugin
- Add the
.kotlin
directory to your project’s.gitignore
file. enumValues<T>()
->enumEntries<T>()
- Stable
AutoCloseable
interface
1.9.25: ✔
Enum.values()
->Enum.entries
data object EndOfFile : ReadResult
..<
1.8.22: ✔
- kotlin-stdlib-jdk7 and kotlin-stdlib-jdk8 -> kotlin-stdlib
kotlinx-android-extension
1.7.20: ✔
T & Any
min()
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.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
, andTestScope
API 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: ✔
com.android.tools.build:gradle(& Android Studio)
What's New
in Android Studio has more release notes.8.6.1(Koala 2024.1.2, Gradle 8.7): 🚧
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.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.9.3: ✔
1.9.2: ✔
1.9.1: ✔
1.9.0: ✔
OnUserLeaveHintProvider
- APIs now warn when calling
onBackPressedDispatcher.onBackPressed()
activity-ktx
is 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.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.8.6: 🚧
2.8.5: 🚧
2.8.4: ✔
2.8.2: ✔
LocalLifecycleOwner
=>androidx.lifecycle:lifecycle-runtime-compose
onClick: () -> Unit = dropUnlessResumed/Started { navController.navigate(NEW_SCREEN) }
ViewModel.viewModelScope
is 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
,switchMap
SavedStateHandle
,Array<CustomParcelable>
LifecycleEventEffect
,LifecycleStartEffect
,LifecycleResumeEffect
2.6.2: ✔
2.6.1: ✔(Kotlin 1.8)
LiveData.isInitialized
Lifecycle.launchWhenX
- If you want
Observer.onChanged()
to accept a nullable type, you must instantiate theObserver
with a nullable type.
2.5.1: ✔
2.4.1: ✔(Android 12(31))
lifecycle-common-java8
2.3.1: ✔
-
1.13.1: ✔
1.12.0: ✔(Android 14(34))
- New
LocalePreferences
APIs to help developers to easily access locale data or user’s locale preferences. - Added
LinkMovementMethodCompat
that fixes link touch handling - Added a
SoftwareKeyboardControllerCompat
to 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.4.4: ✔
1.4.3: ✔
1.4.0: ✔
ScatterMap
,ScatterSet
, andObjectList
.
1.3.0: ✔
- You can safely drop any dependencies on
collection:collection-ktx
in favor ofcollection:collection
ascollection-ktx
is now empty. - ❗
ArrayMap.isEmpty
->ArrayMap.isEmpty()
- You can safely drop any dependencies on
1.2.0: ✔
com.android.tools:desugar_jdk_libs
2.0.4: ✔
2.0.3: ✔(AGP 7.4)
1.2.2: ✔(AGP 7.3, Android 13(33))
1.1.5: ✔
getDisplayName
doesn’t work.
androidx.constraintlayout:constraintlayout
2.1.4: ✔
Gone<->Visible components are now animated as expected
androidx.constraintlayout:constraintlayout-compose
- 1.0.1: ✔
androidx.recyclerview:recyclerview
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.8.0: 🚧(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.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.9.1: ✔
2.9.0: ✔(Android 14(34))
work-runtime-ktx
is 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: ✔
androidx.security:security-crypto
- 1.1.0-alpha06: ✔
- 1.1.0-alpha03: ✔
androidx.swiperefreshlayout:swiperefreshlayout
- 1.1.0: ✔
androidx.exifinterface:exifinterface
- 1.3.7: ✔
- 1.3.6: ✔
-
1.3.0: ✔
WindowSizeClass
1.2.0: ✔
1.1.0: ✔
1.0.0: ✔
Jetpack Compose
- Compose Compiler Plugin to Kotlin version
- BOM to library version mapping
- 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.52: ✔
- 2.51.1: ✔
- 2.51: ✔
- 2.50: ✔(Hilt Kotlin 1.9)
- 2.47: ✔
- 2.46.1: ✔
- 2.45: ✔
- 2.44.2: ✔
- 2.42: ✔
- 2.41: ✔
- 2.40.5: ✔
androidx.hilt:hilt-navigation-fragment
- 1.2.0: ✔(Android 1.9)
- 1.0.0: ✔
androidx.hilt:hilt-work
- 1.2.0: ✔(Android 1.9)
- 1.0.0: ✔
androidx.hilt:hilt-compiler
- 1.2.0: ✔(Android 1.9)
- 1.0.0: ✔
com.android.billingclient:billing
7.0.0: 🚧(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
com.squareup.okhttp3:okhttp
4.12.0: ✔(Kotlin 1.9)
- No more proguard rules
4.11.0: ✔
4.10.0: ✔
4.9.3: ✔
com.squareup.retrofit2:retrofit
2.11.0: ✔
- No more proguard rules
2.9.0: ✔
-
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.0
ingradle.properties
1.12.0: ✔
-
- 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: ✔
-
- 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.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.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
,setIsDevelopmentDevice
andcloseNativeReport
manually
- Requires setting
3.4.4: ✔
com.umeng.umsdk:common
- 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.3: ✔
- 1.6.3: ✔
- 1.4.1: ✔
com.umeng.umsdk:share
- 7.3.4: ✔
- 7.2.0: ✔
- 7.1.7: ✔
com.tencent.mm.opensdk:wechat-sdk-android-without-mta
- 6.8.0: ✔
-
- 8.7.0: ✔
- ❗
android.permission.READ_PHONE_STATE
- ❗
- 8.5.2: ✔
- 8.4.4: ✔
- 8.0.3: ✔(APK bloats afterwards)
- 8.7.0: ✔
com.github.Meituan-Dianping.walle:library
- 1.1.7: ✔
- 1.1.6: ✔
com.alipay.sdk:alipaysdk-android
- 15.8.17: ✔
- 15.8.16: ✔
- 15.8.14: ✔
- 15.8.11: ✔
QQ、穿山甲需要手动添加