Chitkaran Singh
Chitkaran Singh

Reputation: 1736

What is the difference between armeabi-v7a, arm64-v8a, x86?

I am working on an Android App on Kivy. I am using Buildozer to compile an APK file. In the Buildozer spec file, there's a setting android.arch = armeabi-v7a, I didn't understand this.

Also, when I generated the APK file using the command buildozer -v android debug and installed it using the command adb install bin/<appname>.apk - it didn't Open on my Android Phone.

Upvotes: 130

Views: 401717

Answers (1)

Ben Butterworth
Ben Butterworth

Reputation: 28532

To be clear, these are not instruction sets. They are ABIs, which compile into instruction sets. Most devices today are arm64-v8a, the really cheap devices are armeabi-v7a to save cost, and almost none are x86 or x86_64.

e.g. The armeabi-v7a ABI compiles to armeabi, thumb-2 and VFPv3-D16 instruction set, but arm64-v8a ABI compiles to AArch64 instruction set.

Supported ABIs table 1 from https://developer.android.com/ndk/guides/abis

Each combination of CPU and instruction set has its own Application Binary Interface (ABI). An ABI includes the following information:

The CPU instruction set (and extensions) that can be used. The endianness of memory stores and loads at runtime. Android is always little-endian. Conventions for passing data between applications and the system, including alignment constraints, and how the system uses the stack and registers when it calls functions. The format of executable binaries, such as programs and shared libraries, and the types of content they support. Android always uses ELF. For more information, see ELF System V Application Binary Interface. How C++ names are mangled. For more information, see Generic/Itanium C++ ABI. source

Upvotes: 92

Related Questions