อะไรคือสาเหตุของข้อผิดพลาด“ อุปกรณ์รองรับ x86 แต่ APK รองรับเฉพาะ armeabi-v7a”


91

ฉันกำลังเล่นกับ Android Studio โดยการทดสอบบางโปรเจ็กต์จาก GitHub และเมื่อฉันพยายามเลียนแบบ apk มันไม่ให้ฉันเลือกโปรแกรมจำลอง

มันบอกฉัน:

อุปกรณ์รองรับ x86 แต่ APK รองรับเฉพาะ armeabi-v7a

ทำไมมันถึงทำเช่นนี้?


คุณใช้ AVD อะไร อิมเมจระบบอะไร โครงการ GitHub คืออะไร?
OneCricketeer

กล่าวอีกนัยหนึ่งภาพ Intel x86 จะไม่เรียกใช้รหัส ARM
OneCricketeer


ฉันต้องการใช้ Nexus 10 ที่ใช้ Android 5.1
Alexander Ibarra

โอเคคุณใช้อิมเมจระบบ ARM eabi v7 หรืออิมเมจ Intel Atom x86 หรือไม่? ตรวจสอบตัวจัดการ SDK ของคุณว่าคุณได้ติดตั้งอะไรไว้
OneCricketeer

คำตอบ:


87

ฉันมีปัญหาเดียวกันผมชำระเงินbuild.gradleจากโมดูล: app ปรากฎว่ามีการกำหนดค่าดังกล่าว:

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

เมื่อฉันแสดงความคิดเห็นทั้งหมดทุกอย่างทำงานได้ดี

ผมพยายามที่จะจัดการกับโครงการตอบสนอง Android พื้นเมือง


1
ฉันคิดว่าคุณหมายถึง build.gradle;)
Ryan James

2
ฉันมีปัญหาเดียวกันและสำหรับฉัน "x86" ก็หายไปที่นั่น
thomas

1
สิ่งนี้ใช้ได้ผลสำหรับฉัน - อย่างไรก็ตามสิ่งที่ฉันต้องทำคืออนุญาตให้มีการดีบักบนอุปกรณ์จริงของฉันและฉันสามารถยกเลิกการแสดงความคิดเห็นในบรรทัดนี้ได้อีกครั้ง
Boomer Rogers

ฉันควรใส่ ndk ส่วนไหน
ÖmrümÇetin

ไม่ได้ผลสำหรับฉันใน java / kotlin มันสร้างขึ้น แต่แอพขัดข้อง
mozilla_firefox

77

ปิดการดีบัก USB และเปิดอุปกรณ์ฮาร์ดแวร์อีกครั้ง


10
ความคิดเห็นเหล่านั้นปกติฉันจะลงคะแนน แต่จริงๆแล้วมันได้ผล!
Ahmed Hegazy

2
สิ่งนี้ใช้ได้ผลเนื่องจากAllow computer to connect to this deviceพรอมต์ไม่แสดงในครั้งแรก แต่ทำครั้งที่สอง
Kyle Clegg

สิ่งนี้ใช้ได้กับคอมพิวเตอร์ที่ฉันมีเครื่องหมาย "จำสำหรับคอมพิวเตอร์เครื่องนี้" เมื่อฉันเริ่มโครงการใหม่จาก GitHub
Z. Bagley

ดังนั้น. หลังจากเพิ่มสถาปัตยกรรมโปรเซสเซอร์ใหม่ให้กับฟิลเตอร์ ABI สตูดิโอหยุดการจดจำอุปกรณ์ เคล็ดลับนี้ช่วยฉันในการแก้ไขปัญหา !!
Vetalll

สำหรับฉันสิ่งนี้เกิดขึ้นใน Emulator
Akhil Surapuram

42

ใน Android Studio ให้เลือกเมนูสร้าง

ป้อนคำอธิบายภาพที่นี่

จากนั้นคลิกเลือก Build Variant ...และในหน้าต่าง 'Build Variants' ให้เลือกx86Debug (หรือ release)

ป้อนคำอธิบายภาพที่นี่

PS: ฉันใช้ Android Studio 2.3 บน Mac


สิ่งนี้ทำงานได้อย่างสมบูรณ์ - การตั้งค่า gradle ของฉันกำหนดทั้ง ARM และ x86 builds แต่ฉันต้องสั่งให้ Android Studio สร้างตัวแปร x86 ซึ่งตรงข้ามกับตัวแปร ARM (น่าจะเป็นสำหรับ iOS) ขอบคุณ!
jevon

โปรดทราบว่าคุณต้องเลือกโปรเจ็กต์มิฉะนั้นตัวเลือกในการดำเนินการนี้จะเป็นสีเทา ฉันคิดว่ามีเงื่อนไขอื่น ๆ ที่อาจทำให้เป็นสีเทาได้เช่นกัน - คุณอาจต้องทำความสะอาดและสร้างใหม่
Dronz

16

บน Linux: ไฟล์> ไม่ถูกต้องแคช / รีสตาร์ทบนโทรศัพท์: ชาร์จอุปกรณ์นี้แทนเปลี่ยนเป็นการถ่ายโอนรูปภาพ (PTP)


1
คำตอบข้างต้นไม่ได้ผล สิ่งนี้ได้ผล ขอบคุณมาก.
thedarkpassenger

ฉันเปลี่ยนจากCamera (PTP)เป็นMedia Device (MTP)และมันก็ใช้ได้เช่นกัน ขอขอบคุณ!
Konayuki

11

ฉันมีปัญหาที่คล้ายกันนี้และฉันได้แก้ไขแล้วโดยเพิ่มค่า "x86" ในรายการ "abiFilters" ดังต่อไปนี้ -

[เปิดไฟล์ build.gradle (Module: app)] แล้วค้นหา " ndk " ในdeafultSectionแล้วเพิ่ม "x86" เข้าไป!

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

หวังว่าจะช่วย !!!


1
คุณควรจะลดลงarmeabiหากคุณกำหนดเป้าหมาย SDK 19 ขึ้นไป Android เองไม่รองรับตั้งแต่ 4.4
mradzinski

9

ในกรณีของเครื่อง Linux adb devicesแสดงให้เห็น

List of devices attached 
44b194f5    no permissions

จากนั้นรีสตาร์ทเซิร์ฟเวอร์ adb

sudo adb kill-server

แล้ว

sudo adb start-server

จากนั้นเชื่อมต่ออุปกรณ์ของคุณเปิดการแก้จุดบกพร่องและพิมพ์

adb devices
List of devices attached 
44b194f5    device

ในที่สุดก็สามารถรันบนเครื่องได้


7

ในกรณีของฉันแอปของฉันใช้ไลบรารีดั้งเดิม แต่ละแพลตฟอร์มต้องการการสร้าง libs ที่สอดคล้องกัน

ดังนั้นจึงไม่สร้างแพลตฟอร์ม lib ดั้งเดิมของ x86 (หรืออื่น ๆ ) คุณต้องเพิ่ม abifilter ที่ใดที่หนึ่ง:

มีหลายที่ที่สามารถระบุตัวกรอง abi:

  • Application.mk เพิ่มแพลตฟอร์มที่คุณต้องการดังนี้:

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

    ค้นหา abiFilters และเพิ่มแพลตฟอร์มที่คุณต้องการดังนี้:

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


6

อุปกรณ์รองรับ x86 แต่ APK รองรับเฉพาะ armeabi-v7a)

ดูเหมือนว่าคุณใช้x86รูปภาพในโปรแกรมจำลอง

สร้างแยกต่างหาก เลือกแท็บ "รูปภาพอื่น ๆ " เพื่อค้นหาอุปกรณ์แขนหากคุณต้องการ

หรือเรียกใช้บนอุปกรณ์จริง repo ที่คุณระบุไว้มีไว้เพื่อทำงานบน Raspberry Pi 3 / ODroid ฉันคิดว่า


6

สามารถยืนยันการเปิด / ปิดการดีบัก USB ในตัวเลือกสำหรับนักพัฒนาเพื่อแก้ไขปัญหา อาจถึงขั้นยกเลิกหน้าต่าง "Select Deployment Target" ใน Android Studio และลองเรียกใช้แอปอีกครั้งหลังจากสลับการดีบัก USB


5

สำหรับฉันมันใช้งานได้กับการเปลี่ยนตัวเลือกสายเคเบิลจาก

-> Charge Only. 

ถึง

-> Transfer file.



2

ฉันเริ่มรับสิ่งนี้บนอุปกรณ์จริง การแก้ไขคือไปที่การตั้งค่านักพัฒนาแล้วปิดและเปิดการดีบัก USB


2

หากคุณใช้ Ubuntu:

  1. ตรวจสอบให้แน่ใจว่าการดีบัก usb เปิดอยู่
  2. ตรวจสอบการเชื่อมต่อสายเคเบิลของคุณ
  3. บนแถบการแจ้งเตือนตรวจสอบการแจ้งเตือนระบบ Android และแตะเพื่อเปลี่ยนสถานะการชาร์จเป็นการถ่ายโอนไฟล์
  4. ตอนนี้ไปที่เทอร์มินัลและพิมพ์: อุปกรณ์ adb หลังจากรันคำสั่งนี้ adb รีสตาร์ทและอุปกรณ์ของคุณจะแสดงในรายการ


0

ทดสอบรหัสของคุณบนโทรศัพท์จริง หากคุณยังคงมีปัญหาเดิมให้นำเข้ารหัสของคุณอีกครั้งและก่อนหน้านี้คุณควรอัปเดต SDK ของคุณและสร้างโปรแกรมจำลองใหม่ด้วยอิมเมจระบบ ARM


0

หลายครั้งหมายความว่าคุณไม่ได้อนุญาตให้แล็ปท็อป / คอมพิวเตอร์เข้าถึงอุปกรณ์ของคุณ ดูอุปกรณ์ของคุณแล้วคลิกปุ่ม "อนุญาตการเข้าถึง" รวมถึงสิทธิ์ในการแก้ไขข้อบกพร่อง


0

การเรียกใช้ AVD โดยใช้โปรเซสเซอร์ x86 นั้นเร็วกว่าการใช้โปรแกรมจำลอง ARM ถึง 10 เท่า แต่ส่วนใหญ่แล้วคุณจะรวบรวมเฉพาะ APK สำหรับ ARM เท่านั้น เพื่อให้การจำลองทำงานเร็วขึ้นโดยใช้ x86 AVD ฉันต้องทำสิ่งต่อไปนี้ (สำหรับโครงการ Cocos2d-x):

  • แอป / 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

มันเกิดขึ้นกับฉันหลังจากอัปเดต Android Studio ในกรณีของฉันมันเกิดขึ้นเนื่องจากการตั้งค่าการสร้างไม่ได้กำหนดค่าโดยอัตโนมัติใน x86Debug-x86 เพียงแค่เปลี่ยนโดยเปิด Build >> เลือก Build Variant >> เปลี่ยนตัวเลือก build variant จาก armeabi-v7a เป็น x86Debug-x86 หรืออะไรก็ได้ที่คุณต้องการในอีมูเลเตอร์



0

ฉันเห็นสิ่งนี้

หากคุณใช้ CMake สำหรับงานสร้างของคุณให้ตรวจสอบไฟล์ \ proj.android \ gradle.properties และอัปเดต PROP_APP_ABI เพื่อรวมการสร้างสำหรับ x86 หรือคุณสามารถใช้ armeabi-v7a หรือ arm64-v8a Android ภาพ

ตัวอย่าง: PROP_APP_ABI = armeabi-v7a: arm64-v8a: x86

หากคุณไม่ได้ใช้ cmake ให้ดูใน \ proj.android \ app \ jni \ Application.mk ในกรณีที่คุณต้องการเปลี่ยนการตั้งค่า ABI ที่นั่น


ยินดีต้อนรับสู่ StackOverflow เพิ่มคำอธิบายและรหัสเพิ่มเติมหากจำเป็นต้องเข้าใจคำตอบเพราะจะช่วยแก้ปัญหาของใครบางคนได้โดยเร็ว
Nensi Kasundra
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.