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

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();

}

相关推荐

移动接线员的工作体验如何?
365bet提款多久到账

移动接线员的工作体验如何?

📅 08-17 👁️ 7651
我终于知道ps5港版光盘为什么比日版,韩版贵不少的原因了
为什么CF游戏总是掉线?网络问题怎么解决
48365大写

为什么CF游戏总是掉线?网络问题怎么解决

📅 08-23 👁️ 3654
王者荣耀s14兰陵王和刘备哪个厉害?
48365大写

王者荣耀s14兰陵王和刘备哪个厉害?

📅 07-13 👁️ 3927
口袋妖怪XY中文版,新手入坑指南,御三家选择与Mega进化解析
描写世界杯唯美句子
365篮球直播吧App

描写世界杯唯美句子

📅 06-29 👁️ 1571
炉石传说通行证持续多长时间 炉石传说每期通行证持续时间介绍
医采面膜有什么功效 多少钱一盒
365篮球直播吧App

医采面膜有什么功效 多少钱一盒

📅 07-26 👁️ 7227
从小众到大众,醉象的全新上市暗藏资生堂中国新“野心”_手机网易网