博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
获取手机品牌信息的Build类
阅读量:4146 次
发布时间:2019-05-25

本文共 12790 字,大约阅读时间需要 42 分钟。

一、需求

Build类获取手机制造商,系统定制商,型号,Android 系统版本,CPU 指令集,可以查看是否支持64位等

二、源码

//// Source code recreated from a .class file by IntelliJ IDEA// (powered by Fernflower decompiler)//package android.os;import android.os.SystemProperties;import android.text.TextUtils;import android.util.Slog;import com.mediatek.cta.CtaUtils;import dalvik.system.VMRuntime;import java.util.Objects;public class Build {
private static final String TAG = "Build"; // 当一个版本属性不知道时所设定的值。其字符串值为 "unknown" . public static final String UNKNOWN = "unknown"; // 修订版本列表:Either a changelist number, or a label like "M4-rc20". public static final String ID = getString("ro.build.id"); // DISPLAY 显示屏参数 public static final String DISPLAY = getString("ro.build.display.id"); // PRODUCT 整个产品的名称:The name of the overall product. public static final String PRODUCT = getString("ro.product.name"); // 设备参数:The name of the industrial design. public static final String DEVICE = getString("ro.product.device"); // 主板:The name of the underlying board, like "goldfish". public static final String BOARD = getString("ro.product.board"); // cpu指令集:The name of the instruction set (CPU type + ABI convention) of native code. /** @deprecated */ @Deprecated public static final String CPU_ABI; // cpu指令集2:The name of the second instruction set (CPU type + ABI convention) of native code. /** @deprecated */ @Deprecated public static final String CPU_ABI2; // MANUFACTURER 硬件制造商:The manufacturer of the product/hardware. public static final String MANUFACTURER = getString("ro.product.manufacturer"); // 系统定制商:The consumer-visible brand with which the product/hardware will be associated, if any. // 版本即最终用户可见的名称:The end-user-visible name for the end product. public static final String BRAND = getString("ro.product.brand"); public static final String MODEL = getString("ro.product.model"); // BOOTLOADER 系统启动程序版本号:The system bootloader version number. public static final String BOOTLOADER = getString("ro.bootloader"); // 无线电固件版本:The radio firmware version number. 在API14后已过时。使用 getRadioVersion()代替 /** @deprecated */ @Deprecated public static final String RADIO = getString("gsm.version.baseband"); public static final String HARDWARE = getString("ro.hardware"); public static final boolean IS_EMULATOR = getString("ro.kernel.qemu").equals("1"); // 硬件序列号:A hardware serial number, if available. Alphanumeric only, case-insensitive. public static final String SERIAL = getString("ro.serialno"); public static final String[] SUPPORTED_ABIS = getStringList("ro.product.cpu.abilist", ","); public static final String[] SUPPORTED_32_BIT_ABIS = getStringList("ro.product.cpu.abilist32", ","); public static final String[] SUPPORTED_64_BIT_ABIS = getStringList("ro.product.cpu.abilist64", ","); public static final String TYPE; // 描述build的标签,如未签名,debug等等。:Comma-separated tags describing the build, like "unsigned,debug". public static final String TAGS; // 唯一识别码:A string that uniquely identifies this build. Do not attempt to parse this value. public static final String FINGERPRINT; public static final long TIME; public static final String USER; public static final String HOST; public static final boolean IS_DEBUGGABLE; public static final boolean PERMISSIONS_REVIEW_REQUIRED; public Build() { } private static String deriveFingerprint() { String finger = SystemProperties.get("ro.build.fingerprint"); if(TextUtils.isEmpty(finger)) { finger = getString("ro.product.brand") + '/' + getString("ro.product.name") + '/' + getString("ro.product.device") + ':' + getString("ro.build.version.release") + '/' + getString("ro.build.id") + '/' + getString("ro.build.version.incremental") + ':' + getString("ro.build.type") + '/' + getString("ro.build.tags"); } return finger; } public static void ensureFingerprintProperty() { if(TextUtils.isEmpty(SystemProperties.get("ro.build.fingerprint"))) { try { SystemProperties.set("ro.build.fingerprint", FINGERPRINT); } catch (IllegalArgumentException var1) { Slog.e("Build", "Failed to set fingerprint property", var1); } } } public static boolean isBuildConsistent() { if("eng".equals(TYPE)) { return true; } else { String system = SystemProperties.get("ro.build.fingerprint"); String vendor = SystemProperties.get("ro.vendor.build.fingerprint"); String bootimage = SystemProperties.get("ro.bootimage.build.fingerprint"); String requiredBootloader = SystemProperties.get("ro.build.expect.bootloader"); String currentBootloader = SystemProperties.get("ro.bootloader"); String requiredRadio = SystemProperties.get("ro.build.expect.baseband"); String currentRadio = SystemProperties.get("gsm.version.baseband"); if(TextUtils.isEmpty(system)) { Slog.e("Build", "Required ro.build.fingerprint is empty!"); return false; } else if(!TextUtils.isEmpty(vendor) && !Objects.equals(system, vendor)) { Slog.e("Build", "Mismatched fingerprints; system reported " + system + " but vendor reported " + vendor); return false; } else { return true; } } } public static String getRadioVersion() { return SystemProperties.get("gsm.version.baseband", (String)null); } private static String getString(String property) { return SystemProperties.get(property, "unknown"); } private static String[] getStringList(String property, String separator) { String value = SystemProperties.get(property); return value.isEmpty()?new String[0]:value.split(separator); } private static long getLong(String property) { try { return Long.parseLong(SystemProperties.get(property)); } catch (NumberFormatException var2) { return -1L; } } public static boolean isPermissionReviewRequired() { return PERMISSIONS_REVIEW_REQUIRED || CtaUtils.isCtaSupported(); } static { String[] abiList; if(VMRuntime.getRuntime().is64Bit()) { abiList = SUPPORTED_64_BIT_ABIS; } else { abiList = SUPPORTED_32_BIT_ABIS; } CPU_ABI = abiList[0]; if(abiList.length > 1) { CPU_ABI2 = abiList[1]; } else { CPU_ABI2 = ""; } TYPE = getString("ro.build.type"); TAGS = getString("ro.build.tags"); FINGERPRINT = deriveFingerprint(); TIME = getLong("ro.build.date.utc") * 1000L; USER = getString("ro.build.user"); HOST = getString("ro.build.host"); IS_DEBUGGABLE = SystemProperties.getInt("ro.debuggable", 0) == 1; PERMISSIONS_REVIEW_REQUIRED = SystemProperties.getInt("ro.permission_review_required", 0) == 1; } public static class VERSION_CODES {
public static final int CUR_DEVELOPMENT = 10000; public static final int BASE = 1; public static final int BASE_1_1 = 2; public static final int CUPCAKE = 3; public static final int DONUT = 4; public static final int ECLAIR = 5; public static final int ECLAIR_0_1 = 6; public static final int ECLAIR_MR1 = 7; public static final int FROYO = 8; public static final int GINGERBREAD = 9; public static final int GINGERBREAD_MR1 = 10; public static final int HONEYCOMB = 11; public static final int HONEYCOMB_MR1 = 12; public static final int HONEYCOMB_MR2 = 13; public static final int ICE_CREAM_SANDWICH = 14; public static final int ICE_CREAM_SANDWICH_MR1 = 15; public static final int JELLY_BEAN = 16; public static final int JELLY_BEAN_MR1 = 17; public static final int JELLY_BEAN_MR2 = 18; public static final int KITKAT = 19; public static final int KITKAT_WATCH = 20; public static final int L = 21; public static final int LOLLIPOP = 21; public static final int LOLLIPOP_MR1 = 22; public static final int M = 23; public static final int N = 24; public VERSION_CODES() { } } public static class VERSION {
public static final String INCREMENTAL = Build.getString("ro.build.version.incremental"); public static final String RELEASE = Build.getString("ro.build.version.release"); public static final String BASE_OS = SystemProperties.get("ro.build.version.base_os", ""); public static final String SECURITY_PATCH = SystemProperties.get("ro.build.version.security_patch", ""); /** @deprecated */ @Deprecated public static final String SDK = Build.getString("ro.build.version.sdk"); public static final int SDK_INT = SystemProperties.getInt("ro.build.version.sdk", 0); public static final int PREVIEW_SDK_INT = SystemProperties.getInt("ro.build.version.preview_sdk", 0); public static final String CODENAME = Build.getString("ro.build.version.codename"); private static final String[] ALL_CODENAMES = Build.getStringList("ro.build.version.all_codenames", ","); public static final String[] ACTIVE_CODENAMES; public static final int RESOURCES_SDK_INT; public VERSION() { } static { ACTIVE_CODENAMES = "REL".equals(ALL_CODENAMES[0])?new String[0]:ALL_CODENAMES; RESOURCES_SDK_INT = SDK_INT + ACTIVE_CODENAMES.length; } }}

三、运用

package com.fadisu.cpurun.util;import java.lang.reflect.Field;import android.os.Build;import android.util.Log;public class BuildHelper {
private static final String TAG = BuildHelper.class.getSimpleName(); /** * Build class所有的字段属性 * Build.BOARD : Z91 * Build.BOOTLOADER : unknown * Build.BRAND : FaDi * Build.CPU_ABI : arm64-v8a * Build.CPU_ABI2 : * Build.DEVICE : Z91 * Build.DISPLAY : TEST_FaDi_Z91_S100_20180108 * Build.FINGERPRINT : FaDi/Z91/Z91:7.1.1/N6F26Q/1515397384:user/release-keys * Build.HARDWARE : mt6739 * Build.HOST : 69959bbb90c6 * Build.ID : N6F26Q * Build.IS_DEBUGGABLE : true * Build.IS_EMULATOR : false * Build.MANUFACTURER : FaDi * Build.MODEL : Z91 * Build.PERMISSIONS_REVIEW_REQUIRED : false * Build.PRODUCT : Z91 * Build.RADIO : unknown * Build.SERIAL : 0123456789ABCDEF * Build.SUPPORTED_32_BIT_ABIS : [Ljava.lang.String;@305cf5e * Build.SUPPORTED_64_BIT_ABIS : [Ljava.lang.String;@f5c1f3f * Build.SUPPORTED_ABIS : [Ljava.lang.String;@578b00c * Build.TAG : Build * Build.TAGS : release-keys * Build.TIME : 1515397382000 * Build.TYPE : user * Build.UNKNOWN : unknown * Build.USER : FaDi * Build.VERSION.ACTIVE_CODENAMES : [Ljava.lang.String;@f4ecd55 * Build.VERSION.ALL_CODENAMES : [Ljava.lang.String;@bdb836a * Build.VERSION.BASE_OS : * Build.VERSION.CODENAME : REL * Build.VERSION.INCREMENTAL : 1515397384 * Build.VERSION.PREVIEW_SDK_INT : 0 * Build.VERSION.RELEASE : 7.1.1 * Build.VERSION.RESOURCES_SDK_INT : 25 * Build.VERSION.SDK : 25 * Build.VERSION.SDK_INT : 25 * Build.VERSION.SECURITY_PATCH : 2017-11-05 */ public static void getAllBuildInformation() { Field[] fields = Build.class.getDeclaredFields(); for (Field field : fields) { try { field.setAccessible(true); Log.w(TAG, "Build." + field.getName() + " : " + field.get(null)); } catch (Exception e) { Log.e(TAG, "an error occured when collect crash info", e); } } Field[] fieldsVersion = Build.VERSION.class.getDeclaredFields(); for (Field field : fieldsVersion) { try { field.setAccessible(true); Log.w(TAG, "Build.VERSION." + field.getName() + " : " + field.get(null)); } catch (Exception e) { Log.e(TAG, "an error occured when collect crash info", e); } } } // 手机制造商 public static String getProduct() { return Build.PRODUCT; } // 系统定制商 public static String getBrand() { return Build.BRAND; } // 硬件制造商 public static String getManufacturer() { return Build.MANUFACTURER; } // 硬件名称 public static String getHardWare() { return Build.HARDWARE; } // 型号 public static String getMode() { return Build.MODEL; } // Android 系统版本 public static String getAndroidVersion() { return Build.VERSION.RELEASE; } // CPU 指令集,可以查看是否支持64位 public static String getCpuAbi() { return Build.CPU_ABI; }}

转载地址:http://wlcti.baihongyu.com/

你可能感兴趣的文章
常用Java8代码汇编(二)
查看>>
Java8 stream流之分组 groupingBy 的使用
查看>>
Java8常用的时间 工具类 DateUtils
查看>>
源码分析-kube-proxy(proxyMode: iptables)
查看>>
网络协议——最大传输单元 MTU
查看>>
golang 学习笔记——channel
查看>>
网络协议——VXLAN 报文格式
查看>>
IPC——管道和 FIFO
查看>>
Linux——进程、线程
查看>>
Pause(Infra)容器
查看>>
ibatis与hibernate的优缺点以及实用性功能比较
查看>>
weblogic中解析xml文件的问题
查看>>
java长连接调用的方式
查看>>
oracle两张表的数据比较
查看>>
java发送email
查看>>
bea weblogic平台下j2ee调优攻略
查看>>
oracle导入导出数据
查看>>
java利用poi读取excel
查看>>
java常看程序员网站
查看>>
必须要理解掌握的贝塞尔曲线
查看>>