The app can be installed on my device, but the Google Play Store shows that it is not compatible with your device

65 Views Asked by At

I checked using my mobile phone and two other friends' devices. I discovered that the Google playstore shows that "app is not compatible" with newer Android versions, including 13, but it does show compatibility with older versions, such as <=11.But I found that even tough Google playstore shows it's not compatible still I am able to install it through ADB on my device.

I did some research and found some answers that it is because of this permission. Making it required= false will solve it.

<uses-feature
        android:name="android.hardware.camera2"
        android:required="false" /> 

But I have doubt. Then why actually I am able to install it via ADB but Google playstore shows not compatible? Moreover it is already required=false.

Will upgrading SDK versions to latest and modifying AndroidManifest.xml by upgrading user-permission to the latest version, Plus upgrading files that have functionalities that require user’s permission need to be changed to runtime permission solve this problem?

I am asking because this is not mine project so I don't have ability to publish it in Google Playstore and check whether changes worked or not.

So, If any other changes are required, please let me know. I would greatly appreciate it.

My device is Vivo T1 5G which is not compatible.

AndroidManifest.xml file is

<manifest package="org.catrobat.catroid"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:installLocation="auto">

    <supports-screens
        android:largeScreens="true"
        android:normalScreens="true"
        android:smallScreens="true"
        android:xlargeScreens="false" />

    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />

    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" tools:node="remove" />

    <uses-feature
        android:name="android.hardware.camera2"
        android:required="false" />
    <uses-permission android:name="android.permission.CAMERA" />

    <!-- bluetooth -->
    <uses-feature
        android:name="android.hardware.bluetooth"
        android:required="false" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />
    <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
    <uses-permission android:name="android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS"
        tools:ignore="ProtectedPermissions" />

    <!-- gps -->
    <uses-feature
        android:name="android.hardware.location.gps"
        android:required="false" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

    <!-- nfc -->
    <uses-feature
        android:name="android.hardware.nfc"
        android:required="false" />
    <uses-permission android:name="android.permission.NFC" />

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

    <application
        android:name=".CatroidApplication"
        android:allowBackup="false"
        android:icon="${appIcon}"
        android:label="${appName}"
        android:theme="@style/Catroid"
        android:supportsRtl="true"
        android:requestLegacyExternalStorage="false"
        tools:ignore="UnusedAttribute"
        tools:replace="android:label,android:allowBackup,android:name"
        android:usesCleartextTraffic="true">

.....................
<service android:name=".transfers.project.ProjectUploadService" />
        <service android:name=".transfers.project.ProjectDownloadService" />
        <service android:name=".transfers.MediaDownloadService" />
        <service android:name=".utils.notifications.StatusBarNotificationManager$NotificationActionService" />
        <service android:name=".cast.CastService" android:exported="false"/>

        <provider
            android:authorities="${applicationId}.fileProvider"
            android:name="androidx.core.content.FileProvider"
            android:exported="false"
            android:grantUriPermissions="true">

            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>
    </application>
</manifest>

And build.gradle file is

android {
    compileSdkVersion 30

    buildFeatures {
        viewBinding true
    }

    defaultConfig {

        minSdkVersion 23
        targetSdkVersion 30
    }
}
2

There are 2 best solutions below

4
GlintShadow On

Your build.gradle file is specifying a minimum API of 23 (Android 6.0) and a maximum API of 30 (Android 11.0), so Google Play Store will not install it to anything outside of this range.

To enable Google Play Store to deliver to all of the latest versions, you should change the targetSDKVersion to 34 (Android 14) or 35 (Android 15 to come).

see https://apilevels.com/

You should of course build and test your App on those higher versions of Android, and deal with any issues, before you update it on Play Store.

The issue is probably related to Permissions. For example I see that you have permssion FOREGROUND_SERVICE. For the latest versions >=34 (Build.VERSION_CODES_UPSIDE_DOWN_CAKE) you need to request FOREGROUND_SERVICE_XXX where _XXX is one of a set, e.g. FOREGROUND_SERVICE_LOCATION Below 34, in your code, you need to request FOREGROUND_SERVICE

There may be others, but I know that one from my own experience.

0
tyczj On

I did some research and found some answers that it is because of this permission. Making it required= false will solve it. But I have doubt. Then why actually I am able to install it via ADB but Google playstore shows not compatible?

Simple, Google Play Store does compatibility checks, adb does not check if your device meets the compatibility. ADB simply tries to install whatever you tell it to