Jaki jest powód błędu „Urządzenie obsługuje x86, ale APK obsługuje tylko armeabi-v7a”


90

Bawię się Androidem Studio, testując niektóre projekty z GitHub i kiedy próbuję emulować apk, nie pozwala mi to wybrać emulatora.

Mówi mi:

Urządzenie obsługuje x86, ale APK obsługuje tylko armeabi-v7a

Dlaczego to robi?


Z jakiego AVD korzystałeś? Jaki obraz systemu? Jaki projekt na GitHubie?
OneCricketeer

Innymi słowy, obrazy Intel x86 nie będą uruchamiać kodu ARM.
OneCricketeer


Chciałem używać Nexusa 10 z Androidem 5.1
Alexander Ibarra

OK, a czy użyłeś obrazu systemu ARM eabi v7 czy obrazu Intel Atom x86? Sprawdź, co zainstalowałeś w swoim menedżerze SDK.
OneCricketeer

Odpowiedzi:


85

Miałem ten sam problem, pobrałem plik build.gradle z modułu: app . Okazuje się, że jest taka konfiguracja:

    ndk {
        abiFilters "armeabi-v7a", "x86"
    }

kiedy skomentowałem wszystko, wszystko działało dobrze.

Próbowałem poradzić sobie z projektem React Native na Androida .


1
Myślę, że miałeś na myśli build.gradle;)
Ryan James

2
Miałem ten sam problem i dla mnie po prostu brakowało "x86"
thomas

1
To zadziałało dla mnie - jednak wszystko, co musiałem zrobić, to zezwolić na debugowanie na moim rzeczywistym urządzeniu i mogłem ponownie odkomentować tę linię.
Boomer Rogers

Którą sekcję mam umieścić ndk?
Ömrüm Çetin

Nie działa dla mnie w java / kotlin, kompiluje się, ale aplikacja ulega awarii.
mozilla_firefox

77

Wyłącz debugowanie USB i włącz je ponownie na urządzeniu.


10
Te komentarze normalnie bym głosował przeciw, ale w rzeczywistości to działa!
Ahmed Hegazy

2
To działa, ponieważ Allow computer to connect to this devicemonit nie został wyświetlony za pierwszym razem, ale za drugim razem.
Kyle Clegg

To działało na komputerze, na którym miałem zaznaczone „Pamiętam dla tego komputera”, kiedy zaczynałem nowy projekt z GitHub.
Z. Bagley

Więc. Po dodaniu nowej architektury procesorów do filtru ABI - studio przestało rozpoznawać urządzenie. Ta wskazówka pomogła mi rozwiązać problem. !!
Vetalll

Dla mnie dzieje się to w Emulatorze
Akhil Surapuram

41

W Android Studio wybierz menu Build ,

wprowadź opis obrazu tutaj

następnie kliknij Wybierz wariant kompilacji ... iw oknie `` Warianty kompilacji '' wybierz x86Debug (lub wydanie)

wprowadź opis obrazu tutaj

PS: Używam Android Studio 2.3 na Macu


To działało idealnie - moja konfiguracja gradle definiowała zarówno kompilacje ARM, jak i x86, ale musiałem poinstruować Android Studio, aby zbudował wariant x86, w przeciwieństwie do wariantu ARM (prawdopodobnie dla iOS). Dzięki!
jevon

Zwróć uwagę, że musisz wybrać projekt, w przeciwnym razie opcja zrobienia tego będzie wyszarzona. Myślę, że są też inne warunki, które mogą go zaszarzać - może być konieczne wyczyszczenie i odbudowanie.
Dronz

16

W systemie Linux: Plik> Unieważnij pamięć podręczną / Uruchom ponownie W telefonie: Zamiast tego Naładuj to urządzenie zmień na Prześlij zdjęcia (PTP)


1
Żadna z powyższych odpowiedzi nie działała. To zadziałało. Wielkie dzięki.
thedarkpassenger

Zmieniłem z Camera (PTP)na Media Device (MTP)i to też działa. Dziękuję Ci!
Konayuki

11

Miałem podobny problem i rozwiązałem go, dodając wartość „x86” do listy „abiFilters”, jak poniżej -

[Otwórz build.gradle (moduł: app) file] i wyszukać " NdK " w deafultSection i dodać "x86" do niego!

ndk {
            abiFilters "armeabi", "armeabi-v7a", "x86"
        }

Mam nadzieję, że to pomoże!!!


1
Prawdopodobnie powinieneś upuścić, armeabijeśli celujesz w SDK 19 i nowsze. Sam Android go nie obsługuje od 4.4
mradzinski

9

W moim przypadku maszyna Linux adb devicespokazała

List of devices attached 
44b194f5    no permissions

Następnie zrestartowałem serwer adb

sudo adb kill-server

i wtedy

sudo adb start-server

następnie podłącz urządzenie, włącz debugowanie i wpisz

adb devices
List of devices attached 
44b194f5    device

Wreszcie udało się uruchomić na urządzeniu


7

W moim przypadku moja aplikacja korzysta z niektórych bibliotek natywnych. Każda platforma wymaga zbudowania odpowiednich bibliotek.

Więc natywna biblioteka platformy x86 (lub jakiejkolwiek innej) nie jest generowana, musisz gdzieś dodać abifilter:

Istnieje kilka miejsc, w których można określić filtry abi:

  • Application.mk dodaj platformę, której potrzebujesz:

    APP_ABI := armeabi armeabi-v7a x86
    
  • build.gradle

    znajdź abiFilters i dodaj platformę, której potrzebujesz:

    abiFilters   "armeabi","armeabi-v7a","x86"
    


6

Urządzenie obsługuje x86, ale APK obsługuje tylko armeabi-v7a)

Wygląda na to, że użyłeś x86obrazu w emulatorze.

Utwórz osobny. Wybierz zakładkę „inne obrazy”, aby znaleźć uzbrojenie, jeśli musisz.

Lub uruchom na rzeczywistym urządzeniu. Wydaje mi się, że wymienione repozytorium ma działać na Raspberry Pi 3 / ODroid.


6

Potwierdzenie, wyłączenie / włączenie debugowania USB w Opcjach programisty rozwiązało problem. Może nawet anuluj okno „Select Deployment Target” w Android Studio i spróbuj ponownie uruchomić aplikację po przełączeniu debugowania USB.



4

Po prostu przejdź do urządzenia, Settings >> Developer Options >> Restore Default Settingsa następnie włączUSB debugging


3

Poniższy kod zadziałał dla mnie:

ndk {
     abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86'
}

2

Na moim fizycznym urządzeniu zacząłem to rozumieć. Poprawka polegała na wejściu do ustawień programisty i wyłączeniu i włączeniu debugowania USB.


2

Jeśli używasz Ubuntu:

  1. upewnij się, że debugowanie USB jest WŁĄCZONE
  2. sprawdź połączenie kablowe
  3. na pasku powiadomień sprawdź powiadomienie systemu Android i dotknij go, aby zmienić stan ładowania na transfer plików
  4. teraz przejdź do terminalu i wpisz: urządzenia adb po uruchomieniu tego polecenia adb restart, a twoje urządzenie pojawi się na liście


0

Przetestuj swój kod na prawdziwym telefonie. Jeśli nadal masz ten sam problem, zaimportuj kod ponownie, a przedtem zaktualizuj zestaw SDK i utwórz nowy emulator z obrazem systemu ARM.


0

Często oznacza to, że nie przyznałeś swojemu laptopowi / komputerowi dostępu do swojego urządzenia. Spójrz na swoje urządzenie i kliknij przycisk „Zezwól na dostęp” oraz uprawnienia do debugowania.


0

Uruchamianie AVD przy użyciu procesora x86 jest 10 razy szybsze niż przy użyciu emulatora ARM, ale przez większość czasu kompilujesz tylko pakiet APK dla ARM. Aby uzyskać szybsze przebiegi emulacji przy użyciu AVD x86, musiałem wykonać następujące czynności (dla projektu Cocos2d-x):

  • app / jni / Android.mk

    APP_ABI := armeabi-v7a:x86
    
  • gradle.properties

    PROP_APP_ABI=armeabi-v7a:x86
    
  • app / build.gradle

    android {
        ...
        defaultConfig {
            ...
            ndk {
                abiFilters = []
                abiFilters.addAll(PROP_APP_ABI.split(':').collect{it as String})
            }
        }
    }
    

0

Ponowne uruchomienie urządzenia rozwiązało problem dla mnie (natywne reagowanie)


0

Zdarzyło mi się to po aktualizacji Android Studio. W moim przypadku stało się tak, ponieważ ustawienie kompilacji nie jest automatycznie konfigurowane w x86Debug-x86. Po prostu zmień to, otwierając Build >> Select Build Variant >> Zmień opcję wariantu kompilacji z armeabi-v7a na x86Debug-x86 lub cokolwiek potrzebujesz w emulatorze.



0

widzę to

Jeśli używasz CMake do swoich kompilacji, sprawdź plik \ proj.android \ gradle.properties i zaktualizuj PROP_APP_ABI, aby uwzględnić kompilacje dla x86, lub alternatywnie możesz po prostu użyć armeabi-v7a lub arm64-v8a Android zdjęcia.

Przykład: PROP_APP_ABI = armeabi-v7a: arm64-v8a: x86

Jeśli nie używasz cmake, zajrzyj do \ proj.android \ app \ jni \ Application.mk na wypadek, gdybyś musiał zmienić tam ustawienie ABI.


Witamy w StackOverflow, dodaj więcej opisu i kodu, jeśli jest to wymagane do zrozumienia odpowiedzi, ponieważ jak najszybciej rozwiąże to czyjś problem.
Nensi Kasundra
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.