"Cihaz x86'yı destekliyor, ancak APK yalnızca armeabi-v7a'yı destekliyor" hatasının nedeni nedir


91

GitHub'dan bazı projeleri test ederek Android Studio ile oynuyorum ve apk'yi taklit etmeye çalıştığımda bir emülatör seçmeme izin vermiyor.

Bana şunu söylüyor:

Cihaz x86'yı destekler, ancak APK yalnızca armeabi-v7a'yı destekler

Bunu neden yapar?


Hangi AVD'yi kullandınız? Hangi Sistem Görüntüsü? Hangi GitHub projesi?
OneCricketeer

Başka bir deyişle, Intel x86 görüntüleri ARM kodunu çalıştırmayacaktır.
OneCricketeer


Android 5.1 çalıştıran bir Nexus 10 kullanmak istedim
Alexander Ibarra

Tamam, ARM eabi v7 sistem görüntüsünü veya Intel Atom x86 görüntüsünü kullandınız mı? SDK yöneticinize ne yüklediğinizi kontrol edin.
OneCricketeer

Yanıtlar:


87

Ben aynı problem vardı, ben ödeme build.gradle gelen modül: Uygulamayı . Böyle bir yapılandırma olduğu ortaya çıktı:

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

her şeyi yorumladığımda, her şey yolunda gitti.

React Native Android projesiyle başa çıkmaya çalışıyordum .


1
Sanırım build.gradle demek istediniz;)
Ryan James

2
Bende de aynı sorun vardı ve benim için "x86" eksikti
thomas

1
Bu benim için işe yaradı - ancak tek yapmam gereken gerçek cihazımda hata ayıklamaya izin vermekti ve bu satırı tekrar açabiliyordum.
Boomer Rogers

Ndk'yi hangi bölüme koymalıyım?
Ömrüm Çetin

Java / kotlin'de benim için işe yaramadı, oluşturuyor ancak uygulama çöküyor.
mozilla_firefox

77

USB hata ayıklamasını kapatın ve donanım aygıtında tekrar açın.


10
Normalde olumsuz oy kullanırdım, ama aslında işe yarıyor!
Ahmed Hegazy

2
Bu işe yarıyor çünkü Allow computer to connect to this devicekomut istemi ilk seferde değil, ikinci seferde görüntüleniyor.
Kyle Clegg

Bu, GitHub'dan yeni bir proje başlattığımda "bu bilgisayar için hatırla" işaretlediğim bir bilgisayarda çalıştı.
Z. Bagley

Yani. ABI filtresine yeni işlemci mimarisi ekledikten sonra - stüdyo cihazı tanımayı durdurdu. Bu ipucu sorunu çözmeme yardımcı oldu. !!
Vetalll

Benim için bu Emulator
Akhil Surapuram'da

42

Android Studio'da Build menüsünü seçin,

görüntü açıklamasını buraya girin

ardından Derleme Varyantını Seç ... öğesini tıklayın ve ' Değişkenleri Oluştur' penceresinde x86Debug (veya sürümü) seçin

görüntü açıklamasını buraya girin

Not: Mac'te Android Studio 2.3 kullanıyorum


Bu mükemmel bir şekilde çalıştı - gradle kurulumum hem ARM hem de x86 yapılarını tanımladı, ancak Android Studio'ya ARM varyantının aksine (muhtemelen iOS için) x86 varyantını oluşturması talimatını vermem gerekiyordu. Teşekkürler!
jevon

Projeyi seçmiş olmanız gerektiğini, aksi takdirde bunu yapma seçeneğinin gri olacağını unutmayın. Sanırım bunu griye çevirebilecek başka koşullar da var - Temiz Yapmanız ve yeniden inşa etmeniz gerekebilir.
Dronz

16

Linux'ta: Dosya> Önbelleği Geçersiz Kıl / Telefonda Yeniden Başlat: Bunun yerine, bu cihazı şarj et, Fotoğrafları aktar (PTP) olarak değiştir


1
Yukarıdaki cevapların hiçbiri işe yaramadı. Bu işe yaradı. Çok teşekkürler.
thedarkpassenger

Ben değiştirildi Camera (PTP)etmek Media Device (MTP)ve çok çalışıyor. Teşekkür ederim!
Konayuki

11

Benzer sorunu yaşadım ve aşağıdaki gibi "abiFilters" listesine "x86" değerini ekleyerek çözdüm -

[Açık build.gradle (Modül: app) dosyası] ve "için arama NDK içinde" deafultSection ve buna "x86" ekleyin!

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

Umarım yardımcı olur!!!


1
armeabiSDK 19 ve üstünü hedefliyorsanız muhtemelen bırakmalısınız . Android 4.4'ten itibaren onu desteklemiyor
mradzinski

9

Benim durumumda Linux makinesi adb devicesgösterdi

List of devices attached 
44b194f5    no permissions

Sonra adb sunucusunu yeniden başlattı

sudo adb kill-server

ve sonra

sudo adb start-server

ardından cihazınızı bağlayın Hata Ayıklamayı açın ve yazın

adb devices
List of devices attached 
44b194f5    device

Sonunda cihaz üzerinde çalışabildim


7

Benim durumumda uygulamam bazı yerel kitaplıkları kullanıyor. Her platform, ilgili kitaplıkların oluşturulmasını gerektirir.

Yani x86 (veya başka herhangi bir) platformunun yerel kitaplığı oluşturulmaz. Bir yere bir abifilter eklemeniz gerekir:

Abi filtrelerinin belirtilebileceği birkaç yer vardır:

  • Application.mk, ihtiyacınız olan platformu şu şekilde ekleyin:

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

    abiFilters'ı bulun ve ihtiyacınız olan platformu şu şekilde ekleyin:

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


6

Cihaz x86'yı destekler, ancak APK yalnızca armeabi-v7a'yı destekler)

x86Öykünücüde bir görüntü kullanmışsınız gibi görünüyor .

Ayrı bir tane oluşturun. Gerekirse, kol cihazlarını bulmak için "diğer resimler" sekmesini seçin.

Veya gerçek bir cihazda çalıştırın. Listelediğiniz repo, bir Raspberry Pi 3 / ODroid üzerinde çalışacak sanırım.


6

Onaylayabiliyorum, Geliştirici Seçeneklerinde USB hata ayıklamayı kapatıp açmak sorunu çözdü. Belki Android Studio'daki "Dağıtım Hedefini Seç" penceresini iptal edin ve USB hata ayıklamasını açtıktan sonra uygulamayı tekrar çalıştırmayı deneyin.


5

Benim için kablo seçeneğini değiştirmem işe yaradı.

-> Charge Only. 

İçin

-> Transfer file.

4

Sadece cihaza gidin ve Settings >> Developer Options >> Restore Default SettingsetkinleştirinUSB debugging


3

Aşağıdaki kod benim için çalıştı:

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

2

Fiziksel cihazımda bunu almaya başladım. Düzeltme, Geliştirici Ayarlarına gidip USB hata ayıklamasını kapatıp açmaktı.


2

Ubuntu kullanıyorsanız:

  1. usb hata ayıklamanın AÇIK olduğundan emin olun
  2. kablo bağlantınızı kontrol edin
  3. bildirim çubuğunda android sistem bildirimini kontrol edin ve şarj durumunu dosya aktarımı olarak değiştirmek için dokunun
  4. şimdi terminale gidin ve şunu yazın: adb cihazları bu komutu çalıştırdıktan sonra adb yeniden başlatın ve cihazınız listede gösterilir

1

adb kill sunucusu

adb başlangıç ​​sunucusu

Windows işletim sisteminde benim için çalışıyor.


0

Kodunuzu gerçek telefonda test edin. Hala aynı sorununuz varsa, kodunuzu tekrar içe aktarın ve bundan önce SDK'nızı güncellemeli ve ARM sistem görüntüsü ile yeni bir emülatör oluşturmalısınız.


0

Çoğu zaman bu, dizüstü bilgisayarınıza / bilgisayarınıza cihazınıza erişim izni vermemiş olduğunuz anlamına gelir. Cihazınıza bir göz atın ve "Erişime İzin Ver" düğmesini ve ayrıca hata ayıklama izinlerini tıklayın.


0

X86 işlemciyi kullanarak bir AVD çalıştırmak, ARM emülatörünü kullanmaktan 10 kat daha hızlıdır, ancak çoğu zaman yalnızca ARM için APK'nızı derliyorsunuz. Bir x86 AVD kullanarak daha hızlı öykünme çalışması yapmak için aşağıdakileri yapmam gerekiyordu (bir Cocos2d-x projesi için):

  • 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

Cihazı yeniden başlatmak benim için sorunu çözdü (React-native)


0

Android Studio'yu güncelledikten sonra başıma geldi. Benim durumumda, yapı ayarının otomatik olarak x86Debug-x86'ya yapılandırılmaması nedeniyle oldu. Yapım >> Oluşturma Varyantını Seç >> açarak değiştirin. Yapı varyantı seçeneğini armeabi-v7a'dan x86Debug-x86'ya veya emülatörde ihtiyacınız olan her şeye değiştirin.


0

Güvenlik Seçeneklerinden Bilinmeyen Kaynakları etkinleştirmeyi deneyin . Benim için çalıştı.


0

bunu görüyorum

Derlemeleriniz için CMake kullanıyorsanız, \ proj.android \ gradle.properties dosyasını kontrol edin ve PROP_APP_ABI'yi x86 için derlemeleri içerecek şekilde güncelleyin veya alternatif olarak sadece armeabi-v7a veya arm64-v8a Android'i kullanabilirsiniz. Görüntüler.

Örnek: PROP_APP_ABI = armeabi-v7a: arm64-v8a: x86

Cmake kullanmıyorsanız, oradaki ABI ayarını değiştirmeniz gerekirse diye \ proj.android \ app \ jni \ Application.mk'ye bakın.


StackOverflow'a hoş geldiniz, cevabı anlamak gerekiyorsa biraz daha açıklama ve kod ekleyin çünkü bu birisinin problemini en kısa sürede çözecektir.
Nensi Kasundra
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.