获取手机品牌信息的Build类

一、需求

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;
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

法迪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值