9

Play Store tells me: “Your device isn't compatible with this version.”
Aurora Store tells me: “Download Failed” “App not supported”

  1. Why do these stores think it is not supported?
  2. If I get the .apk package file otherwise, how can I see the list of requirements (including minimum required API level)?

(Btw, the app (de.tafmobile.mobility.leipzigmove) which raised these questions and took me hours to install runs just fine.)

2

1 Answer 1

15

Some reasons why an app is incompatible can be seen from AndroidManifest.xml, others only exists in the [Play] Store configuration (such as limitations to a country, a carrier or if the app developer has just white-listed certain devices for whatever reason).

AndroidManifest.xml

Minimum/maximum Android version

Back to AndroidManifest.xml. If you decode it using a tool like apktool or Jadx-GUI you should first check the entry minSdkVersion:

<uses-sdk android:minSdkVersion="30" android:targetSdkVersion="33"/>

In this example the app is restricted to Android 11 and newer. Theoretically there can also be a maxSdkversion entry but apps that have such an entry are very very rare.

Hardware features

The next restrictions can come from uses-feature entries that are marked as android:required="true":

<uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>

There can be multiple entries for different hardware features like Bluetooth, camera and so on. If you encounter an entry that has android:required="false" the this is an optional hardware requirement, thus it should not matter if your device supports it or not. You can get the list of supported features of your phone using the command adb shell pm list features.

Required shared libraries

The next relevant entries are the uses-libraries:

<uses-library android:name="org.apache.http.legacy" android:required="true"/>

Again like for the hardware features these entries define software libraries your phone has to support. You can get the list of supported shared libraries using the command adb shell pm list libraries.

Even if this is a software requirement it is not possible on un-rooted devices to install a missing library. On rooted devices it is theoretically possible to add a missing library but often those libraries require certain hardware features or other (manufacturer specific) libraries, so adding them is usually not possible.

CPU architecture

Another very important restriction is which CPU architectures are supported by an APK. At the moment there are four relevant CPU architectures:

  • armeabi-v7a alias armeabi (ARM 32 bit)
  • arm64-v8a (ARM 64 bit)
  • x86
  • x86_64

x86 and x86_64 are only relevant for emulators, physical devices with one of these architectures were not released in the last 10 years. You can check which architecture is supported by an APK by checking the libs folder. If this folder does not exist or has no subfolder, then there is no architecture restriction. For newer split APK you have a separate APK file with the architecture in it's file-name. In such a case the base APK files (where the classes*.dex are stored in has no libs folder).

You can check the supported CPU architectures of your phone using the command adb shell getprop ro.product.cpu.abilist.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .