【问题标题】:How to detect android device is 64 bit or 32 bit processor?如何检测 android 设备是 64 位还是 32 位处理器?
【发布时间】:2015-12-03 20:25:20
【问题描述】:

我正在尝试为这个问题找到最佳解决方案。原因是我们应用程序中的 lib 无法在 64 位处理器上运行,所以在这种情况下我需要将其关闭。 我发现在 Android 版本 21 (lolipop) 及更高版本中,我们可以通过使用 Build.SUPPORTED_64_BIT_ABIS 轻松检测设备是 32 位还是 64 位处理器,如果它返回包含 0 个元素的字符串数组,那么......哈哈!该设备是 32 位处理器。 安卓版本低怎么办? Build.SUPPORTED_64_BIT_ABIS 仅支持 android Lolipop 版本及更高版本。 谢谢和最好的问候, 祝你们一切顺利!

【问题讨论】:

  • 据我所知,64 位处理器仅用于 Android L 及更高版本。所以所有之前的 Android 版本都运行在 32 位上。
  • 是否有很多(或任何)64 位设备运行 KitKat 或更早版本?也许他们可以被明确识别?

标签: android processor


【解决方案1】:

简单的答案:无需在 Lollipop 以下的 Android 版本上进行检查。这是因为 Lollipop 引入了对 64 位架构的平台支持,低于 Lollipop 的 Android 版本将无法在 64 位处理器上运行。

Android 5.0 引入了对 64 位架构的平台支持——使用 通过 Nexus 9 的 NVIDIA Tegra K1。优化提供更大的地址 某些计算工作负载的空间和改进的性能。应用 用 Java 语言编写的会自动作为 64 位应用程序运行——不 需要修改。如果您的应用使用本机代码,我们已扩展 NDK 支持 ARM v8、x86-64 和 MIPS-64 的新 ABI。 (Source)

【讨论】:

  • no modifications are needed 并不总是正确的。尚不支持渲染脚本:code.google.com/p/android/issues/detail?id=165545
  • 我强烈反对。现在,在编写 Android 11 和 12 的过程中,我(以及许多其他人)很难保持与 32 位设备的兼容,包括用于其特定目的的本机库。很快就需要完全符合 64 位合规性,因此删除 64 位 ABI 的旧技巧不再是一个可靠的选择。
【解决方案2】:
 try {
            boolean  isArm64 = false;

            BufferedReader localBufferedReader = new BufferedReader(new FileReader("/proc/cpuinfo"));
            if (localBufferedReader.readLine().contains("aarch64")) {
                isArm64 = true;
            }
            localBufferedReader.close();
        } catch (IOException e) {
        }

或者

final boolean is64bit = Build.SUPPORTED_64_BIT_ABIS.length > 0;

【讨论】:

    【解决方案3】:

    Firdt 将设备连接到系统, 在 Windows 上,在命令提示符下输入此命令

    adb shell cat  /proc/cpuinfo | findstr arc
    

    在 linux 或 mac 基础系统上打开终端并输入此命令

      adb shell cat  /proc/cpuinfo | grep arc
    

    如果第一行输出contain 32,则表示系统类型为32bit

    如果contain 64表示系统类型为64bit,则输出第一行

    【讨论】:

      【解决方案4】:

      32Bit 如果低于 5.0,因为 android 支持 64Bit 直到 5.0。
      5.0以上判断Build.SUPPORTED_ABIS是否支持64。

      String bits;
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
          bits = TextUtils.join(", ", Build.SUPPORTED_ABIS).contains("64") ? "64-Bit" : "32-Bit";
      } else {
          bits = "32-Bit";
      }
      

      您可以使用Dev Tools查看设备是64位还是32位。

      【讨论】:

        【解决方案5】:

        我找到了API,按应用进程区分。

        Process.is64Bit()
        

        当然可以是arm 64或者x86-64。

        但是如果你只打包 arm 共享库,x86 设备无法安装你的应用程序。

        所以方法是可行的。

        如果你打包 x86 共享库,那么上面的答案 SUPPORTED_ABIS 是可行的。

        【讨论】:

          【解决方案6】:

          如果您使用的是 ADB

          adb shell cat /proc/cpuinfo | grep rch
          

          大多数输出​​:

          架构 7 -> 32 位

          架构 8 -> 64 位

          • 这是来自 @Naval Kishor Jha

            的扩展答案
          • 在这里测试了 6 个模型

          • 不需要root

          如果您使用的是 JAVA

          if(Build.SUPPORTED_64_BIT_ABIS.length>0)
            {
            //it's a 64bit
            }
            else
            {
            //it's a 32bit
            }
          

          【讨论】:

            猜你喜欢
            • 2011-04-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-11-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多