อะไรคือสาเหตุของข้อผิดพลาด“ อุปกรณ์รองรับ 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.