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?

Alexander Ibarra
źródło
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
github.com/jreyes/mirror
Alexander Ibarra
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 .

Bruce Lee
źródło
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.

user3157940
źródło
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

rafahoro
źródło
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)

rudicjovan
źródło
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!!!

Roopesh Reddy
źródło
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

Sachin K.
źródło
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"
    
yao
źródło
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.

OneCricketeer
źródło
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.

Val Geyvandov
źródło
5

U mnie zadziałało przy zmianie opcji kabla z

-> Charge Only. 

Do

-> Transfer file.
Sushil Chaudhary
źródło
4

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

Iman Marashi
źródło
3

Poniższy kod zadziałał dla mnie:

ndk {
     abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86'
}
C-lio Garcia
źródło
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.

svguerin3
źródło
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
mohsen khalili
źródło
1

adb kill-server

Serwer startowy adb

Działa dla mnie w systemie operacyjnym Windows.

siddhartha shankar
źródło
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.

Adi
źródło
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.

NVA
źródło
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})
            }
        }
    }
    
nikc
źródło
0

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

O. Borcuhin
źródło
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.

Rico Valentino
źródło
0

Spróbuj włączyć nieznane źródła w opcjach bezpieczeństwa. U mnie to zadziałało.

Sathish Subramani
źródło
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.

David Arribas
źródło
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