Home > Back-end >  call requires api level 24 java.util.comparator
call requires api level 24 java.util.comparator

Time:12-23

I am getting api level error when using Comparator, but when I add @RequiresApi(N) annotation, error is solved. error lint

The problem is after adding @RequiresApi(N) annotation, this app cannot be run in api level below 24, I get this error on API 23 phone -

 Process: com.example.chatapp, PID: 13778
java.lang.NoClassDefFoundError: adapters.chatPageAdapter$$ExternalSyntheticLambda0
    at adapters.chatPageAdapter.onBindViewHolder(chatPageAdapter.java:59)
    at adapters.chatPageAdapter.onBindViewHolder(chatPageAdapter.java:25)
    at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:7065)
    at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:7107)
    at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:6012)
    at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6279)
    at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6118)
    at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:6114)
    at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2303)
    at androidx.recyclerview.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1627)
    at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1587)
    at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:665)
    at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:4134)
    at androidx.recyclerview.widget.RecyclerView.onMeasure(RecyclerView.java:3540)

So, is there any way that I can use this method and even run app on api below 23?

Build.Gradle -

android {
    compileSdk 30

buildFeatures {
    viewBinding true
}

defaultConfig {
    applicationId "com.example.chatapp"
    minSdk 23
    targetSdk 30
    versionCode 1
    versionName "1.0"

    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    }
}
compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
}
}

CodePudding user response:

You can enable desugarring - it will enable lower api version to also use the lastest java8 features.

In your app module's build.gradle, add coreLibraryDesugaringEnabled

 compileOptions {
        // Flag to enable support for the new language APIs
        coreLibraryDesugaringEnabled true
        // Sets Java compatibility to Java 8
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

dependencies {
    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5'
}
  • Related