Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android app won't build -- The minCompileSdk (31) specified in a dependency's androidx.work:work-runtime:2.7.0-beta01

Tags:

android

gradle

I'm trying to build a project in my M1,

but I got this error when I run npx react-native run-android

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:checkDebugAarMetadata'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.CheckAarMetadataWorkAction
   > The minCompileSdk (31) specified in a
     dependency's AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties)
     is greater than this module's compileSdkVersion (android-30).
     Dependency: androidx.work:work-runtime:2.7.0-beta01.
     AAR metadata file: /Users/macpro/.gradle/caches/transforms-3/999e9d813832e06d8f1b7de52647a502/transformed/work-runtime-2.7.0-beta01/META-INF/com/android/build/gradle/aar-metadata.properties.

Android/build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    ext {
        buildToolsVersion = "30.0.0"
        minSdkVersion = 21
        compileSdkVersion = 30
        targetSdkVersion = 30
        supportLibVersion   = "28.0.0"
    }
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath('com.android.tools.build:gradle:4.1.2')
        classpath('com.google.gms:google-services:4.3.0')
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        mavenLocal()
        maven {
            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
            url("$rootDir/../node_modules/react-native/android")
        }
        maven {
            // Android JSC is installed from npm
            url("$rootDir/../node_modules/jsc-android/dist")
        }

        google()
        jcenter()
        maven { url 'https://www.jitpack.io' }
    }
    
}

gradle-wrapper.properties

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
like image 295
Oliver D Avatar asked Sep 02 '21 22:09

Oliver D


People also ask

How do I access build gradle?

The app level build. gradle file is located inside your project folder under app/build. gradle.

What is the difference between compileSdkVersion and targetSdkVersion?

Even if the compileSdkVersion and targetSdkVersion have completely different meanings they are obviously not independent. targetSdkVersion cannot be higher than the compileSdkVersion simply because we cannot target things that we know nothing about during compilation.

What is Android Target version?

The Target Android Version (also known as targetSdkVersion ) is the API level of the Android device where the app expects to run. Android uses this setting to determine whether to enable any compatibility behaviors – this ensures that your app continues to work the way you expect.


7 Answers

The error is being caused because one of your dependencies is internally using WorkManager 2.7.0-beta01 that was released today (which needs API 31). In my case it was CheckAarMetadata.kt.

You can fix it by forcing Gradle to use an older version of Work Manager for the transitive dependency that works with API 30. In your build.gradle file add:

dependencies {
    def work_version = "2.6.0"
    // Force WorkManager 2.6.0 for transitive dependency
    implementation("androidx.work:work-runtime-ktx:$work_version") {
        force = true
    }
}

This should fix it.

like image 180
hamrosvet Avatar answered Oct 23 '22 18:10

hamrosvet


This is because in work-runtime:2.7.0-beta01 the compileSdkVersion was updated to 31

you could either update your compileSdkVersion to 31

or use an older version of work-runtime that doesn't include this change

It is mentioned in the release notes of Version 2.7.0-beta01

Note: WorkManager Version 2.7.0 is required for apps targeting Android 12 (S).

for example, adding this to your build.gradle should fix it

api(group: "androidx.work", name: "work-runtime") {
    version {
        strictly "2.7.0-alpha04"
    }
}
like image 27
humazed Avatar answered Oct 23 '22 17:10

humazed


I had the same problem and I was able to solve it by changing the version of appcompat in the dependencies What I had:

 implementation 'androidx.appcompat:appcompat:1.4.0'

I changed it to:

implementation 'androidx.appcompat:appcompat:1.3.1'

Note that I am using java.

like image 8
AK Alhamdani Avatar answered Oct 23 '22 17:10

AK Alhamdani


I was also having the same issue in my project and now that issue is being resolved. The issue was because of the dependency androidx.work:work-runtime But I would like to first mention that I was not using that dependency in my project directly (not added in my app level gradle), probably some other dependency was using that internally.

So what I did is forcefully downgraded its version by adding this

configurations.all {
        resolutionStrategy { force 'androidx.work:work-runtime:2.6.0' }
    }

inside

android {
 defaultConfig {
   //here
 }
}

and it resolved my issue.

like image 4
Kishan Solanki Avatar answered Oct 23 '22 19:10

Kishan Solanki


I experienced the same thing but was actually caused by work manager dependency that I upgraded to version 2.7.0 I simply downgraded it back to 2.6.0

dependencies{
implementation 'androidx.work:work-runtime-ktx:2.6.0'
}
like image 4
Onuoha Chukwuemeka Charles Avatar answered Oct 23 '22 18:10

Onuoha Chukwuemeka Charles


In my flutter application, changed the compileSdkVersion and targetSdkVersion in android\app\build.gradle

android {
compileSdkVersion 31 // Changed to 31

sourceSets {
    main.java.srcDirs += 'src/main/kotlin'
}

defaultConfig {
    applicationId "com.example.blah_blah"
    minSdkVersion 16
    targetSdkVersion 31  //Changed to 31
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
}

buildTypes {
    release {
        // TODO: Add your own signing config for the release build.
        // Signing with the debug keys for now, so `flutter run --release` works.
        signingConfig signingConfigs.debug
    }
}

}

And also, changed the kotlin version to '1.6.10' in android\build.gradle

buildscript {
ext.kotlin_version = '1.6.10' //change here
repositories {
    google()
    jcenter()
}

dependencies {
    classpath 'com.android.tools.build:gradle:4.1.0'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}

}

like image 4
Aashish Jha Avatar answered Oct 23 '22 19:10

Aashish Jha


For those others facing the below error from last 36hrs (due to an update on androidx-core):

Error:

   > A failure occurred while executing com.android.build.gradle.internal.tasks.CheckAarMetadataWorkAction
      > The minCompileSdk (31) specified in a
        dependency's AAR metadata (META-INF/com/android/build/gradle/aar-metadata.properties)
        is greater than this module's compileSdkVersion (android-30).
        Dependency: androidx.core:core-ktx:1.7.0-alpha02.

you can try to force use androidx to older version:

place it under android/app/build.gradle (under dependencies {} preferably or outside android {})

configurations.all {
    resolutionStrategy { force 'androidx.core:core-ktx:1.6.0' }
}

enter image description here

like image 3
Robin Avatar answered Oct 23 '22 18:10

Robin