3

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?

5
  • 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, 2018 at 17:38
  • @Robert how would I know which library it's missing?
    – rasen58
    Apr 14, 2018 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, 2018 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, 2018 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, 2018 at 7:35

4 Answers 4

3

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).

1
  • Please correct me if I am wrong but there should be a setting in developer options for compatibility.
    – mchid
    Jan 12, 2019 at 18:51
4

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.

1
  • It works like a charme. Thank you! Jun 12, 2020 at 11:19
1

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.

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

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .