【问题标题】:What is the reason for the error "Device supports x86, but APK only supports armeabi-v7a"报错“Device support x86, but APK only support armeabi-v7a”是什么原因
【发布时间】:2017-06-06 04:05:47
【问题描述】:

我通过测试 GitHub 上的一些项目来使用 Android Studio,当我尝试模拟 apk 时,它不允许我选择模拟器。

它告诉我:

设备支持x86,但APK只支持armeabi-v7a

为什么要这样做?

【问题讨论】:

  • 你用的是什么 AVD?什么系统映像?什么 GitHub 项目?
  • 换句话说,Intel x86 映像不会运行 ARM 代码。
  • 我想使用运行 android 5.1 的 Nexus 10
  • 好的,您使用的是 ARM eabi v7 系统映像还是 Intel Atom x86 映像?检查你的 SDK 管理器你安装了什么。

标签: android android-studio


【解决方案1】:

在真机上测试您的代码。如果您仍然遇到同样的问题,请再次导入您的代码,在此之前您应该更新您的 SDK 并使用 ARM 系统映像创建一个新的模拟器。

【讨论】:

    【解决方案2】:

    设备支持x86,但APK只支持armeabi-v7a)

    听起来您在模拟器中使用了x86 图像。

    创建一个单独的。如果需要,请选择“其他图像”选项卡以查找 arm 设备。

    或者,在实际设备上运行。我认为,您列出的存储库旨在在 Raspberry Pi 3 / ODroid 上运行。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,我从 module:app 签出了 build.gradle。原来有这样一个配置:

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

      当我全部注释掉时,一切正常。

      我正在尝试处理 React Native Android 项目

      【讨论】:

      • 我认为你的意思是 build.gradle ;)
      • 我遇到了同样的问题,对我来说“x86”只是在那里丢失了
      • 这对我有用 - 但是我所要做的就是允许在我的实际设备上进行调试,我可以再次取消注释这一行。
      • ndk应该放在哪个部分?
      • 在 java/kotlin 中对我不起作用,它可以构建但应用程序崩溃。
      【解决方案4】:

      在我的情况下,我的应用程序使用一些本机库。每个平台都需要构建相应的库。

      所以没有生成 x86(或任何其他)平台的本机库。您必须在某处添加 abifilter:

      有几个地方可以指定abi过滤器:

      • 应用程序.mk 像这样添加你需要的平台:

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

        找到 abiFilters,然后像这样添加您需要的平台:

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

      【讨论】:

        【解决方案5】:

        在 Linux 上: 文件 > 使缓存无效/重新启动 在电话上: 而是将此设备充电更改为传输照片 (PTP)

        【讨论】:

        • 以上答案均无效。这行得通。非常感谢。
        • 我从 Camera (PTP) 更改为 Media Device (MTP) 并且它也有效。谢谢!
        【解决方案6】:

        在 Android Studio 中,选择 Build 菜单,

        然后点击Select Build Variant...并在“Build Variants”窗​​口中选择x86Debug(或发布)

        PS:我在 Mac 上使用的是 Android Studio 2.3

        【讨论】:

        • 这非常有效 - 我的 gradle 设置定义了 ARM 和 x86 构建,但我必须指示 Android Studio 构建 x86 变体而不是 ARM 变体(可能适用于 iOS)。谢谢!
        • 请注意,您需要选择项目,否则执行此操作的选项将显示为灰色。我认为还有一些其他条件也可以使其变灰 - 您可能需要 Make Clean 并重建。
        【解决方案7】:

        我遇到了类似的问题,我已经通过将“x86”值添加到“abiFilters”列表中来解决它,如下所示 -

        [打开 build.gradle(Module:app) 文件] 并在 deafultSection 中搜索“ndk”并将“x86”添加到其中!

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

        希望对你有帮助!!!

        【讨论】:

        • 如果您的目标是 SDK 19 及更高版本,您可能应该放弃 armeabi。 Android 本身从 4.4 开始不支持它
        • @mradzinski 你能提供一个关于支持的文档的链接吗?
        【解决方案8】:

        只需转到设备Settings >> Developer Options >> Restore Default Settings,然后启用USB debugging

        【讨论】:

          【解决方案9】:

          关闭 USB 调试并重新打开硬件设备。

          【讨论】:

          • 我通常会投反对票的那些 cmets,但实际上,它有效!
          • 之所以有效,是因为Allow computer to connect to this device 提示第一次没有显示,而是第二次显示。
          • 这在我从 GitHub 开始一个新项目时标记为“记住这台计算机”的计算机上工作。
          • 所以。在向 ABI 过滤器添加新的处理器架构后 - 工作室停止识别设备。这个技巧帮助我解决了这个问题。!!
          • 对我来说这是在模拟器中发生的
          【解决方案10】:

          在我的物理设备上,我开始得到这个。解决方法是进入开发人员设置并关闭和打开 USB 调试。

          【讨论】:

            【解决方案11】:

            可以确认,在开发人员选项中关闭/打开 USB 调试解决了该问题。甚至可以取消 Android Studio 中的“选择部署目标”窗口,并在切换 USB 调试后尝试再次运行应用程序。

            【讨论】:

              【解决方案12】:

              很多时候,这意味着您没有授予您的笔记本电脑/计算机访问您的设备的权限。查看您的设备并单击“允许访问”按钮以及调试权限。

              【讨论】:

                【解决方案13】:

                对我来说,改变电缆选项很有效

                -> Charge Only. 
                

                -> Transfer file.
                

                【讨论】:

                  【解决方案14】:

                  以我的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
                  

                  终于可以在设备上运行了

                  【讨论】:

                    【解决方案15】:

                    使用 x86 处理器运行 AVD 比使用 ARM 模拟器快 10 倍,但大多数时候您只是为 ARM 编译 APK。为了使用 x86 AVD 进行更快的仿真,我必须执行以下操作(对于 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})
                              }
                          }
                      }
                      

                    【讨论】:

                      【解决方案16】:

                      如果你使用 Ubuntu:

                      1. 确保 USB 调试已开启
                      2. 检查您的电缆连接
                      3. 在通知栏上查看安卓系统通知并触摸它以将充电状态更改为文件传输
                      4. 现在进入终端并输入: 亚行设备 运行此命令 adb restart 后,您的设备将显示在列表中

                      【讨论】:

                        【解决方案17】:

                        adb kill-server

                        adb 启动服务器

                        它在 Windows 操作系统上为我工作。

                        【讨论】:

                          【解决方案18】:

                          重启设备为我解决了问题(React-native)

                          【讨论】:

                            【解决方案19】:

                            您需要重新连接您的设备并尝试关闭/打开开发者选项。

                            Enable developer options and debugging

                            【讨论】:

                              【解决方案20】:

                              我在更新 Android Studio 后发生了这种情况。就我而言,这是因为构建设置没有自动配置到 x86Debug-x86 中。 只需打开 Build>>Select Build Variant>> 将 build variant 选项从 armeabi-v7a 更改为 x86Debug-x86 或模拟器中所需的任何内容。

                              【讨论】:

                                【解决方案21】:

                                尝试从安全选项中启用未知来源。 它对我有用。

                                【讨论】:

                                  【解决方案22】:

                                  我看到了

                                  如果您使用 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,如果需要理解答案,请添加更多描述和代码,因为它会尽快解决某人的问题。
                                  【解决方案23】:

                                  下面的代码对我有用:

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

                                  【讨论】:

                                    猜你喜欢
                                    • 2017-09-10
                                    • 1970-01-01
                                    • 2020-12-10
                                    • 2016-11-23
                                    • 2019-11-11
                                    • 1970-01-01
                                    • 2015-06-13
                                    • 1970-01-01
                                    • 2011-10-28
                                    相关资源
                                    最近更新 更多