arm64-v8a, armeabi-v7a, or x86_64? How to Choose the Right APK

Not sure which APK to download? Learn how Android ABIs, CPU architecture, screen density, and minimum Android versions affect compatibility.

arm64-v8a, armeabi-v7a, or x86_64? How to Choose the Right APK

When downloading an APK, you may see arm64-v8a, armeabi-v7a, x86, x86_64, and universal under the same release. These are not different feature editions; they are packages built for different processor architectures.

The short answer: most recent Android phones should choose arm64-v8a; older 32-bit ARM devices should choose armeabi-v7a; x86 and x86_64 are mainly for Intel-based devices and some emulators. If you are unsure, check your device's supported ABIs or choose a universal package from a trusted source.

What do arm64-v8a, armeabi-v7a, and x86_64 mean?

These names identify Android ABIs (Application Binary Interfaces). An ABI defines the instruction set, registers, and calling conventions used by native machine code. If an app includes native C/C++ libraries, it needs .so files that match the device's ABI.

APK labelBitnessProcessor typeCommon use
arm64-v8a64-bitARMv8 AArch64Most modern phones and tablets
armeabi-v7a32-bitARMv7Older Android phones and TV boxes
x8632-bitIntel/AMD x86Some older devices and emulators
x86_6464-bitIntel/AMD x86-64Some emulators, Chromebooks, and a few devices
universalDepends on the packageUsually includes several ABIsLarger file, broader compatibility

The main ABIs currently listed in the Android NDK documentation are armeabi-v7a, arm64-v8a, x86, and x86_64. Older ABIs such as armeabi and MIPS have been retired; do not confuse armeabi with armeabi-v7a.

Why can one app have several APKs?

Pure Kotlin or Java bytecode is handled by Android Runtime and is usually not tied to a CPU architecture. Games, video tools, browsers, and encryption apps, however, often include native libraries compiled for particular processors.

A developer can bundle every architecture into one "fat APK," which is convenient to install but larger. Alternatively, they can create separate APKs by ABI so users download only the machine code they need. With an App Bundle, Google Play also delivers the appropriate configuration APKs to each device.

Checking an Android device's processor architecture to choose a matching APK
Check an Android device's processor architecture to choose a matching APK.

The simplest selection rules

Typical Android phones

Recent mobile chips such as Qualcomm Snapdragon, MediaTek Dimensity, Samsung Exynos, and Google Tensor usually use 64-bit ARM. Choose arm64-v8a first.

Older or 32-bit-only phones

If the device reports armeabi-v7a as its ABI, choose that variant. Do not force an arm64-v8a package just because it looks "newer": a 32-bit operating system cannot run 64-bit ARM native libraries.

Android emulators

Check the system image selected when the virtual device was created. An emulator on an Apple Silicon Mac may use an ARM64 image; a virtual device on a traditional Intel/AMD computer may use x86_64. Trust the ABI reported by the emulator rather than guessing from the computer brand.

Chromebooks, Android subsystems, and special devices

These devices may use ARM or x86-64, and some provide binary translation. Even if translation runs certain ARM apps, a native ABI match is usually the first choice.

How can you check whether a phone uses arm64-v8a or armeabi-v7a?

Method 1: Use a device-information tool

Install a device-information tool from a trusted app store and look for "Supported ABIs" on its CPU or System page. The first item is usually the system's preferred ABI, for example:

arm64-v8a, armeabi-v7a, armeabi

This means the system prefers arm64-v8a and may also run some 32-bit ARM apps. If the list contains only armeabi-v7a, do not download an arm64 package.

Method 2: Use ADB

After enabling USB debugging and connecting the device to a computer, run:

adb shell getprop ro.product.cpu.abilist

You can also check the 64-bit and 32-bit ABI lists separately:

adb shell getprop ro.product.cpu.abilist64
adb shell getprop ro.product.cpu.abilist32

Do not rely only on a processor's marketing page. Hardware may support 64-bit computing even when the manufacturer installed a 32-bit Android system. What matters for app compatibility is the ABIs supported by the current system.

Can every 64-bit ARM phone install armeabi-v7a?

No. Many earlier 64-bit Android systems included both 64-bit and 32-bit runtime support, so they can install armeabi-v7a apps. Some newer devices use 64-bit-only systems without a 32-bit compatibility environment; a 32-bit APK will fail there.

Rather than assuming all 64-bit phones are backward compatible, check whether ro.product.cpu.abilist includes armeabi-v7a.

What else should you check besides CPU architecture?

A matching ABI is only the first step. A download page may also distinguish variants by Android version, screen density, and package type.

Minimum Android version (minAPI)

minAPI 26 means Android 8.0 or later is required. Even with a perfect ABI match, an older Android version cannot install the package.

Screen density (DPI)

  • nodpi: resources are not restricted to a particular screen density and are often broadly compatible;
  • hdpi, xhdpi, xxhdpi, xxxhdpi: resources for particular pixel densities;
  • 120-640 dpi: a numeric range describing compatible devices.

Split APKs versus a single APK

A download marked Bundle, APKM, APKS, or XAPK may contain several split APKs and require a compatible installer. base.apk alone is often insufficient.

Choose an APK with this decision table

Device informationRecommended choice
First ABI is arm64-v8aPrefer arm64-v8a
Only ABI is armeabi-v7aChoose armeabi-v7a
First ABI is x86_64Prefer x86_64
ABI is unknown, but universal is availableConsider a trusted universal package
ABI matches, but installation still failsCheck minAPI, DPI, signature, and split APKs
The system is 64-bit-onlyAvoid packages containing only 32-bit libraries

What happens if you choose the wrong variant?

  • Android may show "App not installed" or "There was a problem parsing the package";
  • the app may install but crash on launch because a native library is missing;
  • features that depend on native code may not work;
  • a translated environment may run the app, but performance or stability may suffer.

If something goes wrong, first confirm that the download is complete. Then check the ABI, minimum Android version, whether the signature matches an existing installation, and whether any split APKs are missing.

Frequently asked questions

Is arm64-v8a better than armeabi-v7a?

They are not simply quality grades. Choose an ABI your device's system supports. Modern 64-bit ARM devices usually prefer arm64-v8a; they can run armeabi-v7a only if they include a 32-bit runtime.

Is arm64-v8a only for Qualcomm chips?

No. It is the 64-bit ARM ABI and can be used by ARM64 chips from Qualcomm, MediaTek, Samsung, Google, and others.

Can an x86_64 APK run on an arm64-v8a phone?

Usually not directly. The instruction sets differ. Unless a particular system provides reliable binary translation, choose the ARM64 version.

Is a universal APK always best?

Not necessarily. It covers more devices but may contain several sets of native libraries, making it larger. If you know your ABI, a matching single-architecture package is usually smaller.

Do nodpi and arm64-v8a conflict?

No. nodpi describes screen resources, while arm64-v8a describes CPU architecture. They are separate compatibility dimensions.

Summary

Start with the ABIs supported by the device's current Android system: most modern phones use arm64-v8a, older 32-bit ARM devices use armeabi-v7a, and x86 variants are mainly for matching emulators or special devices. Then check the minimum Android version, DPI, signature, and package type. Do not guess solely from the advertised chipset; the ABI list reported by the device is the more reliable guide.

References