androidandroid-studiogradlebuild.gradleandroid-14

This app isn't compatible with the latest version of android. in android 14


my application shows the below warning after installing it on a phone for the first time, only in Android 14:

This app isn't compatible with the latest version of Android.
check for an update or contact the app's developer.

what should I do to solve this warning? and how should I debug my code to find the problem.

I upgraded the application libraries and checked my manifest file for any conflict with Android 14.

this is my build.gradle file

apply plugin: 'com.android.application'

//repositories {
//    mavenCentral()
//    google()
//    maven {
//        url "https://linphone.org/maven_repository"
//    }
//}

configurations {
    compile.exclude module: 'support-v4'
}

configurations.all {
//    exclude group: 'com.google.firebase', module: 'firebase-core'
    exclude group: 'androidx.recyclerview', module: 'recyclerview'
}

dependencies {
    implementation 'androidx.core:core:1.10.1'
    implementation 'androidx.palette:palette:1.0.0'
    implementation 'androidx.exifinterface:exifinterface:1.3.7'
    implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0'
    implementation 'androidx.multidex:multidex:2.0.1'
    implementation "androidx.sharetarget:sharetarget:1.2.0"
    implementation 'androidx.interpolator:interpolator:1.0.0'

    compileOnly 'org.checkerframework:checker-qual:3.12.0'
    compileOnly 'org.checkerframework:checker-compat-qual:2.5.0'
//    implementation 'com.google.firebase:firebase-messaging:22.0.0'
//    implementation 'com.google.firebase:firebase-config:21.0.1'
//    implementation 'com.google.firebase:firebase-datatransport:18.0.1'
//    implementation 'com.google.firebase:firebase-appindexing:20.0.0'
//    implementation 'com.google.android.gms:play-services-maps:17.0.1'
//    implementation 'com.google.android.gms:play-services-auth:19.2.0'
    implementation 'com.google.android.gms:play-services-vision:20.1.3'
//    implementation 'com.google.android.gms:play-services-wearable:17.1.0'
//    implementation 'com.google.android.gms:play-services-wallet:18.1.3'
    implementation 'com.googlecode.mp4parser:isoparser:1.0.6'
    implementation 'com.stripe:stripe-android:2.0.2'
    implementation 'com.google.code.gson:gson:2.10'
    implementation 'com.fasterxml.jackson.core:jackson-core:2.12.1'
    implementation 'com.fasterxml.jackson.core:jackson-annotations:2.12.1'
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.1'
    implementation 'com.squareup.okhttp3:okhttp:3.12.10'
    implementation files('libs/libgsaverification-client.aar')

    coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.0.4'

    //Play Services
//    implementation 'com.google.android.gms:play-services-gcm:16.1.0'
    implementation 'com.google.android.gms:play-services-location:21.0.1'

    implementation project(':liveVideoBroadcasterSDK')
    implementation "ch.acra:acra-http:5.2.1"
    implementation "ch.acra:acra-dialog:5.2.1"

    implementation 'androidx.fragment:fragment:1.5.3'
    implementation 'androidx.annotation:annotation:1.7.1'

//    implementation project(':datepicker')
    implementation 'org.linphone.minimal:linphone-sdk-android:5.2.112'
    implementation 'androidx.media:media:1.2.0'

    implementation 'net.butterflytv.utils:rtmp-client:3.1.0'
    implementation(platform("org.jetbrains.kotlin:kotlin-bom:1.8.0"))
    implementation project(':xxxxx')

}

android {
//    compileSdkVersion 31
//    buildToolsVersion '31.0.0'
    ndkVersion "21.4.7075529"
    compileSdk 34

    defaultConfig.applicationId = "xxx.xxxxx.xxxxxx"
    namespace = "xxx.xxxxx.xxxxxx"

    sourceSets.main.jniLibs.srcDirs = ['./jni/']

    externalNativeBuild {
        cmake {
            path 'jni/CMakeLists.txt'
        }
    }

    lintOptions {
        disable 'MissingTranslation'
        disable 'ExtraTranslation'
        disable 'BlockedPrivateApi'
    }

//    dexOptions {
//        jumboMode = true
//    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8

        coreLibraryDesugaringEnabled true
    }

    signingConfigs {
        debug {
            storeFile file("config/release.keystore")
            storePassword RELEASE_STORE_PASSWORD
            keyAlias RELEASE_KEY_ALIAS
            keyPassword RELEASE_KEY_PASSWORD
        }

        release {
            storeFile file("config/release.keystore")
            storePassword RELEASE_STORE_PASSWORD
            keyAlias RELEASE_KEY_ALIAS
            keyPassword RELEASE_KEY_PASSWORD
        }
    }

    buildTypes {
        debug {
            debuggable true
            jniDebuggable true
            signingConfig signingConfigs.debug
            applicationIdSuffix ""
            minifyEnabled false
            shrinkResources false
            multiDexEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            ndk.debugSymbolLevel = 'FULL'
        }

//        gozaresh {
//            debuggable true
//            jniDebuggable true
//            signingConfig signingConfigs.debug
//            applicationIdSuffix ".beta"
//            minifyEnabled false
//            shrinkResources false
//            multiDexEnabled true
//            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//            ndk.debugSymbolLevel = 'FULL'
//        }

        /*debugAsan {
            debuggable true
            jniDebuggable true
            signingConfig signingConfigs.debug
            applicationIdSuffix ".beta"
            minifyEnabled true
            multiDexEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

            packagingOptions {
                doNotStrip "**.so"
            }

            sourceSets {
                main {
                    jniLibs {
                        srcDir {
                            'jniLibs'
                        }
                    }
                    resources {
                        srcDir {
                            'jniRes'
                        }
                    }
                }
            }
        }*/

//        HA {
//            debuggable false
//            jniDebuggable false
//            signingConfig signingConfigs.debug
//            applicationIdSuffix ".beta"
//            minifyEnabled true
//            multiDexEnabled true
//            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//            ndk.debugSymbolLevel = 'FULL'
//        }

//        standalone {
//            debuggable false
//            jniDebuggable false
//            signingConfig signingConfigs.release
//            applicationIdSuffix ".web"
//            minifyEnabled true
//            multiDexEnabled true
//            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//            ndk.debugSymbolLevel = 'FULL'
//        }

        release {
            debuggable false
            jniDebuggable false
            signingConfig signingConfigs.release
            minifyEnabled true
            shrinkResources false
            multiDexEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            ndk.debugSymbolLevel = 'FULL'
        }
    }

    sourceSets.debug {
        manifest.srcFile 'config/debug/AndroidManifest.xml'
    }

    /*sourceSets.debugAsan {
        manifest.srcFile 'config/debug/AndroidManifest.xml'
    }*/

//    sourceSets.HA {
//        manifest.srcFile 'config/debug/AndroidManifest.xml'
//    }

//    sourceSets.standalone {
//        manifest.srcFile 'config/release/AndroidManifest.xml'
//    }

    sourceSets.release {
        manifest.srcFile 'config/release/AndroidManifest.xml'
    }
//    sourceSets.gozaresh {
//        manifest.srcFile 'config/debug/AndroidManifest.xml'
//    }

    flavorDimensions "minApi"

    productFlavors {
        armv7 {
            ndk {
                abiFilters "armeabi-v7a"
            }
            ext {
                abiVersionCode = 1
            }
        }
//        x86 {
//            ndk {
//                abiFilters "x86"
//            }
//            ext {
//                abiVersionCode = 2
//            }
//        }
//        armv7_SDK23 {
//            ndk {
//                abiFilters "armeabi-v7a"
//            }
//            sourceSets.debug {
//                manifest.srcFile 'config/debug/AndroidManifest_SDK23.xml'
//            }
//            sourceSets.release {
//                manifest.srcFile 'config/release/AndroidManifest_SDK23.xml'
//            }
//            minSdkVersion 23
//            ext {
//                abiVersionCode = 3
//            }
//        }
//        x86_SDK23 {
//            ndk {
//                abiFilters "x86"
//            }
//            sourceSets.debug {
//                manifest.srcFile 'config/debug/AndroidManifest_SDK23.xml'
//            }
//            sourceSets.release {
//                manifest.srcFile 'config/release/AndroidManifest_SDK23.xml'
//            }
//            minSdkVersion 23
//            ext {
//                abiVersionCode = 4
//            }
//        }
//        arm64 {
//            ndk {
//                abiFilters "arm64-v8a"
//            }
//            ext {
//                abiVersionCode = 5
//            }
//        }
//        x64 {
//            ndk {
//                abiFilters "x86_64"
//            }
//            ext {
//                abiVersionCode = 6
//            }
//        }
//        arm64_SDK23 {
//            ndk {
//                abiFilters "arm64-v8a"
//            }
//            sourceSets.debug {
//                manifest.srcFile 'config/debug/AndroidManifest_SDK23.xml'
//            }
//            sourceSets.release {
//                manifest.srcFile 'config/release/AndroidManifest_SDK23.xml'
//            }
//            minSdkVersion 23
//            ext {
//                abiVersionCode = 7
//            }
//        }
//        x64_SDK23 {
//            ndk {
//                abiFilters "x86_64"
//            }
//            sourceSets.debug {
//                manifest.srcFile 'config/debug/AndroidManifest_SDK23.xml'
//            }
//            sourceSets.release {
//                manifest.srcFile 'config/release/AndroidManifest_SDK23.xml'
//            }
//            minSdkVersion 23
//            ext {
//                abiVersionCode = 8
//            }
//        }
        afat {
            ndk {
                abiFilters "armeabi-v7a"/*, "arm64-v8a", "x86", "x86_64"*/
            }
            sourceSets.debug {
                manifest.srcFile 'config/debug/AndroidManifest_SDK23.xml'
            }
            sourceSets.release {
                manifest.srcFile 'config/release/AndroidManifest_SDK23.xml'
            }
//            sourceSets.standalone {
//                manifest.srcFile 'config/release/AndroidManifest_standalone.xml'
//            }
            ext {
                abiVersionCode = 9
            }
        }
    }

    defaultConfig.versionCode = 2460

    applicationVariants.all { variant ->
        variant.outputs.all { output ->
            outputFileName = outputFileName = "xxxx-7.0.0(" + defaultConfig.versionCode + ").apk"
            output.versionCodeOverride = defaultConfig.versionCode * 10 + variant.productFlavors.get(0).abiVersionCode
        }
    }

    variantFilter { variant ->
        def names = variant.flavors*.name
        if (variant.buildType.name != "release" && !names.contains("afat")) {
            setIgnore(true)
        }
    }

    defaultConfig {
        minSdkVersion 21
        targetSdkVersion 34
        versionName "34.2.0"

        vectorDrawables.generatedDensities = ['mdpi', 'hdpi', 'xhdpi', 'xxhdpi']

        externalNativeBuild {
            cmake {
                version '3.10.2'
                arguments '-DANDROID_STL=c++_static', '-DANDROID_PLATFORM=android-16'/*, "-j=16"*/ //todo enable parallel threads for the cross-compilation process
            }
        }
    }
}

Solution

  • Finally, I found the cause of that warning. I use NDK and native code in my project and because of that when I want to build a release of my app I should specify the CPU architecture that I want to build my code for

    ndk {
        abiFilters "armeabi-v7a"/*, "arm64-v8a", "x86", "x86_64"*/
    }
    

    as you can see I build only for armeabi-v7a so when I installed that app on phones with Android 14 and arm64-v8a CPU architecture that warning shows.

    To resolve that issue the only thing that I need to do is enable arm64-v8a in NDK settings like this:

    ndk {
        abiFilters "armeabi-v7a", "arm64-v8a" /*, "x86", "x86_64"*/
    }
    

    As Google said When you're working with native code, hardware matters.