2

I tried to install an apk from online on a virtual device, but it wouldn't install due to INSTALL_FAILED_NO_MATCHING_ABIS.

I'm able to install it on an ARM image, but ARM images are super slow on my computer. So is it possible to convert or modify the apk to use x86?

One of the answers on this post said "If you using Genymotion you need Installing ARM Translation and GApps". But comments on that answer said that it doesn't work anymore.

So is there any way to do this?

  • 1
    If the native part is a common open source library, adding the common library for x86 to the APK and then resigning it could be an option. – Robert Apr 13 '18 at 17:38
  • @Robert how would I know which library it's missing? – rasen58 Apr 14 '18 at 19:49
  • 1
    Just open the APK file with a ZIP viewer. Chck the lib folder. Each lib-subfolder is for one platform and in every sub-folder the same libraries have to be present (compiled for the specific platform). I assume the x86 sub-folder is missing which causes the NO_MATCHING_ABIS message. – Robert Apr 14 '18 at 19:54
  • @Robert That worked. And yes the x86 sub-folder is not there. The only sub-folder is the armeabi-v7a folder. In it, I see a bunch of .so files like libavcodec-57.so, libswscale-4.so, and others. Can I just copy those into a new folder that says x86, or do I need to recompile them? – rasen58 Apr 17 '18 at 2:41
  • 1
    You need those files compiled for x86 and of course in the correct version - looks like you are lucky as both are open source libs. I would use an hex editor on the existing lib files and check if there is a string included with the exact library version. – Robert Apr 17 '18 at 7:35
2

No, it's not possible. You need to find a version of the app that was compiled for x86, or without any architecture-specific parts (i.e. Java only).

| improve this answer | |
  • Please correct me if I am wrong but there should be a setting in developer options for compatibility. – mchid Jan 12 '19 at 18:51
3

Genymotion with ARM translation

You can use genymotion (the personal use version is free) with an Oreo ROM + ARM_Translation_Oreo.zip (google the filename to download it). Once you download the zip simply drag-and-drop it into the emulator window, accept the prompt and then reboot the emulator. It's not a lightweight solution since genymotion uses virtualbox as a backend but it works way faster than google's arm images available with android studio.

Standard Android emulator with an ARM image

Another option (does not answer your question directly) is to actually use an ARM image instead of X86. In Android Studio > Tools > AVD Manager > Create Virtual Device when prompted to Select a system image select the Other images tab and pick an arm-based image — those images will run VERY slowly compared to X86. You will get a warning that it's not recommended, but you might get acceptable performance if you select the oldest API version possible (depending on your needs) with a low screen resolution.

| improve this answer | |
0

as for now android R (11) x86_64 supports arm application , just tested it and it works , but there is no way to root it , if you look for testing applications will be for nothing

| improve this answer | |
0

In Android emulator https://developer.android.com/studio/releases/emulator page, highlighted that arm based application now can be install and run on android 9 and 11 emulator.

As @K3rnel31 comment, android 11 emulator can't start as writable-system. Android will be your friends. It requires download the "Android 9.0 Google X86_ARM" system image.

| improve this answer | |

Your Answer

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

Not the answer you're looking for? Browse other questions tagged or ask your own question.