Android 判断手机是32位CPU还是64位CPU android.os.Build类字段含义

Posted 早起的年轻人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 判断手机是32位CPU还是64位CPU android.os.Build类字段含义相关的知识,希望对你有一定的参考价值。

手机cpu分32位与64位,下面介绍如何在所有android版本上判断手机cpu位数是32位还是64位。

1 Android 判断手机是32位CPU还是64位CPU

Android从API level 21开始,android.os.Build.java类中提供了3个属性可以查询cpu位数,分别是:

String[] supportedAbis = Build.SUPPORTED_ABIS;

在64位手机上查询示例结果:arm64-v8a,armeabi-v7a,armeabi
在32位手机上查询示例结题 :armeabi-v7a,armeabi

 String[] supported32BitAbis = Build.SUPPORTED_32_BIT_ABIS;

在 在64位手机 或者 32位手机上:查询结果为 armeabi-v7a,armeabi

String[] supported64BitAbis = Build.SUPPORTED_64_BIT_ABIS;

在64位手机上查询示例结果:arm64-v8a
在32位手机上查询结果为空,即64位的so不能在32位的手机上兼容

2 这个我应用在 AndroidQ获取不到imsi解决方案中


    /**
     * 获取设备唯一标识符
     *
     * @return 唯一标识符
     */
    @SuppressLint("HardwareIds")
    public static String getDeviceId(Context context) 
        int abiLength = Build.CPU_ABI.length();
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) 
            String[] supportedAbis = Build.SUPPORTED_ABIS;
            abiLength = supportedAbis.length;
        

        String m_szDevIDShort = "35" + Build.BOARD.length() % 10
                + Build.BRAND.length() % 10 + abiLength % 10
                + Build.DEVICE.length() % 10 + Build.DISPLAY.length() % 10
                + Build.HOST.length() % 10 + Build.ID.length() % 10
                + Build.MANUFACTURER.length() % 10 + Build.MODEL.length() % 10
                + Build.PRODUCT.length() % 10 + Build.TAGS.length() % 10
                + Build.TYPE.length() % 10 + Build.USER.length() % 10;// 13 位

        String serial = "serial";// 默认serial可随便定义
        try 
            if (Build.VERSION.SDK_INT == Build.VERSION_CODES.O) 
                if (ActivityCompat.checkSelfPermission(context,
                        Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) 
                    // 由于 Android Q 唯一标识符权限的更改会导致
                    // android.os.Build.getSerial() 返回 unknown,
                    // 但是 m_szDevIDShort 是由硬件信息拼出来的,所以仍然保证了UUID 的唯一性和持久性。
                    serial = android.os.Build.getSerial();// Android Q 中返回 unknown
                
             else 
                serial = Build.SERIAL;
            
         catch (Exception ignored) 
            return null;
        
        return new UUID(m_szDevIDShort.hashCode(), serial.hashCode()).toString();
    

3 android.os.Build类字段含义

android.os.Build.BOARD:获取设备基板名称
android.os.Build.BOOTLOADER:获取设备引导程序版本号
android.os.Build.BRAND:获取设备品牌
android.os.Build.CPU_ABI:获取设备指令集名称(CPU的类型)
android.os.Build.CPU_ABI2:获取第二个指令集名称
android.os.Build.DEVICE:获取设备驱动名称
android.os.Build.DISPLAY:获取设备显示的版本包(在系统设置中显示为版本号)和ID一样
android.os.Build.FINGERPRINT:设备的唯一标识。由设备的多个信息拼接合成。
android.os.Build.HARDWARE:设备硬件名称,一般和基板名称一样(BOARD)
android.os.Build.HOST:设备主机地址
android.os.Build.ID:设备版本号。
android.os.Build.MODEL :获取手机的型号 设备名称。
android.os.Build.MANUFACTURER:获取设备制造商
android:os.Build.PRODUCT:整个产品的名称
android:os.Build.RADIO:无线电固件版本号,通常是不可用的 显示unknown
android.os.Build.TAGS:设备标签。如release-keys 或测试的 test-keys
android.os.Build.TIME:时间
android.os.Build.TYPE:设备版本类型 主要为”user” 或”eng”.
android.os.Build.USER:设备用户名 基本上都为android-build
android.os.Build.VERSION.RELEASE:获取系统版本字符串。如4.1.2 或2.2 或2.3等
android.os.Build.VERSION.CODENAME:设备当前的系统开发代号,一般使用REL代替
android.os.Build.VERSION.INCREMENTAL:系统源代码控制值,一个数字或者git hash值
android.os.Build.VERSION.SDK:系统的API级别 一般使用下面大的SDK_INT 来查看
android.os.Build.VERSION.SDK_INT:系统的API级别 数字表示
android.os.Build.VERSION_CODES类 中有所有的已公布的Android版本号。全部是Int常量。可用于与SDK_INT进行比较来判断当前的系统版本。

4 测试用例

public static String getDeviceInfo()  
    StringBuffer sb = new StringBuffer(); 
    sb.append("主板: "+ Build.BOARD+"\\n"); 
    sb.append("系统启动程序版本号: " + Build.BOOTLOADER+"\\n"); 
    sb.append("系统定制商:" + Build.BRAND+"\\n"); 
    sb.append("cpu指令集: " + Build.CPU_ABI+"\\n"); 
    sb.append("cpu指令集2 "+ Build.CPU_ABI2+"\\n"); 
    sb.append("设置参数: "+ Build.DEVICE+"\\n"); 
    sb.append("显示屏参数:" + Build.DISPLAY+"\\n"); 
    sb.append("无线电固件版本:" + Build.getRadioVersion()+"\\n"); 
    sb.append("硬件识别码:" + Build.FINGERPRINT+"\\n"); 
    sb.append("硬件名称:" + Build.HARDWARE+"\\n"); 
    sb.append("HOST: " + Build.HOST+"\\n"); 
    sb.append("修订版本列表:" + Build.ID+"\\n"); 
    sb.append("硬件制造商:" + Build.MANUFACTURER+"\\n"); 
    sb.append("版本:" + Build.MODEL+"\\n"); 
    sb.append("硬件序列号:" + Build.SERIAL+"\\n"); 
    sb.append("手机制造商:" + Build.PRODUCT+"\\n"); 
    sb.append("描述Build的标签:" + Build.TAGS+"\\n"); 
    sb.append("TIME: " + Build.TIME+"\\n"); 
    sb.append("builder类型:" + Build.TYPE+"\\n"); 
    sb.append("USER: " + Build.USER+"\\n"); 
    return sb.toString(); 
   

以上是关于Android 判断手机是32位CPU还是64位CPU android.os.Build类字段含义的主要内容,如果未能解决你的问题,请参考以下文章

android是32-bit系统还是64-bit系统

如何判断CPU的位数

怎么看CPU是32位还是64位

32位和64位的区别

c语言int类型占的字节数因不因机子是64位还是32位的而改变啊?

android是32-bit系统还是64-bit系统