2

This is more of a hardware question than anything, but it has to do with Android.

I saw on this question, somebody saying that Android apps were architecture independent, and should run on ARM/ARM64/x86 platforms. Another reply was saying that the APK files can have architecture-dependent libraries, but not code themselves.

Now, here's where my question comes in.

I was looking inside the contents of an APK file, and I noticed that the only "lib" folder was for armeabi (32-bit ARM). But, my phone has a 64-bit ARM processor (aarch64, with the arm64-v8a instruction set), and the app runs fine. Hmm... how does that work?

So I thought I would try a few other things.

I installed Android-x86 in a virtual machine, logged into a Google account, and downloaded a few games. The one in question, which only has the "armeabi" folder, showed up as being compatible (as in, the install button was there) - but it immediately crashed after opening. I know there are some games that fake-crash on rooted devices (and Android-x86 comes pre-rooted), but the one in question is not one of them. I've used it on CyanogenMod on a real phone and it doesn't care.

But something else I noticed: at least one other game I was looking for did not show up - the game Super Mario Run from Nintendo. See my screenshot here: enter image description here

Notice under "Library" there's no option to install it, and if you look at apps published by Nintendo, it's just not in that list (which means the Play Store is deciding my hardware is incompatible, and basically hiding it). But, it DID seem to think my Android-x86 VM was compatible with the OTHER games, which just crash immediately.

So I decided to try something else. I picked up a cheap Intel Atom-based processor (one of the Insignia brand ones at Best Buy, as it's all you can get these days that's carried in stores). Run CPU-Z on there, you can confirm it's x86 and not ARM. Super Mario Run shows up, however, and works fine - so do the other games with only "armeabi" libraries!

What piqued my curiosity is that, according to the specifications of the Intel Atom x3 processors, they actually have "ARM" GPUs. (Specifically the PowerVR 6500 series) CPU-Z shows this too, where it says the CPU is x86 but the GPU is ARM. I found some other press releases from 2015, when they introduced the Atom x3 line, about the two being combined.

So in this case, is the tablet only able to run these games because its GPU is ARM? If so, what's the actual significance of the CPU portion being x86? I'm completely confused at that.

I was considering tracking down a used older tablet with an Intel Atom, that still used the "Intel HD Graphics", and was not a hybrid ARM chipset. Something like a Toshiba Excite Go. But this is really just to find out if it would act the same as Android-x86, or if those apps would work. I'm curious what the incompatibilities/crashes are - is it just because Android-x86 is a hackjob and not official? Or do the apps with only "armeabi" libraries truly only work on ARM processors and somehow the Insignia can run them because of its hybrid chip?

(As far as my phone having ARM64, it might have some sort of compatibility layer much like x86-64 for running 64-bit PCs? I don't know much about ARM but I know in the case of AMD64, it's an extension on top of the traditional x86 architecture so you can natively run both x86 and x64 programs - also why they won over Itanium, which was not like this.)

Lastly, as far as the Play store recognizing whether an app is compatible or not - I would assume the developer doesn't have an actual whitelist of all devices the app can run on, that would be incredibly stupid and any time a new Android device came out, it would cause issues. So how exactly does that work? Do they provide minimum required RAM/CPU/resolution, things like that? Based on architecture as well? I know I've seen some apps that show as being incompatible with a larger-resolution tablet (like the Samsung View) that do work on phones, and always thought that was strange.

Edit: One of the suggested threads from this one was actually about how the Play Store knows an app is incompatible, based on the app's manifest. And as much as it might make sense that it would be incompatible if it requires GPS and your device doesn't have GPS, or Bluetooth, etc., that doesn't really explain why an app would install fine on a 7" tablet but not a Samsung View. That isn't the fastest processor in the world, but it's better than some of the older 7 or 10" ones...

  • Regarding Nintendo games on Android, it does seem that N likes to restrict its software, allowing it to run on SafetyNet-compliant devices only. – Death Mask Salesman Aug 22 '17 at 17:06
  • Possible - as I know Pokémon Go uses SafetyNet (though that isn't Nintendo themselves), but Pokémon Go is installable from Google Play on Android-x86 - you just obviously won't be able to use it. Miitomo is the same way as Mario Run, it will just crash right away on a rooted device - but Miitomo does show as installable on Android-x86 while Mario Run does not. That's why I'm curious. – Danny Forche Aug 22 '17 at 20:14
  • Maybe Mario Run does enforce mandatory use of the touchscreen? No clue, otherwise. – Death Mask Salesman Aug 22 '17 at 20:44
  • Ah, good point. I mean, you do need the touchscreen for the game to work since it's controlled by tapping ... but with Android-x86 emulating a tablet, your mouse and keyboard work anyway, and left-clicking the mouse is (I thought) equivalent to tapping. – Danny Forche Aug 23 '17 at 15:08
  • If my guess holds, I would say that the Play Store can discern between a real touchscreen and an emulated one. It may be that the game specifies a certain property inside its AndroidManifest.xml (a XML file describing an app, found in any APK), and that the Play Store doesn't allow the installation because of this (again, it could be, but mine is speculation). – Death Mask Salesman Aug 23 '17 at 16:31

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Browse other questions tagged or ask your own question.