What you have there is a 64-bit CPU running a 32-bit Android kernel. The kernel maintains /proc/cpuinfo
and reports on what it is using rather than what exists. The boot code of the device will have put the processor into 32-bit mode before starting Android.
The 32-bit OS can recognise 64-bit executables, because there are identifying numbers in the file header. It knows it can't run 64-bit executables, and tells you so. There are several kinds of mixed 32/64-bit Android:
- This one, with 64-bit hardware and a 32-bit Android. Devices like this were presumably produced to take advantage of new hardware before the vendor had finished updating their version of Android.
- 64-bit hardware and operating system, but 32-bit Android RunTime ("ART"). This setup will run 32-bit and 64-bit native code, but Java/Kotlin code runs in a 32-bit environment. I've encountered one device like this, a 2017 model of the Amazon Kindle Fire HD.
- 64-bit hardware and operating system, capable of running 32-bit and 64-bit native code, and with 64-bit ART. This has been common for several years as of 2023. However, it will gradually disappear over the next decade or so, because most new designs of ARM hardware are 64-bit only, and can't run 32-bit native code.