框架介绍
- Android 碎片化至始至终是一个令人非常头疼的问题,特别为 XXPermissions 上面为不同的厂商做适配的时候就非常头疼,因为市面上能找到的开源库只能判断机型的品牌,而不能判断 Android 厂商定制的系统类型,用机型的品牌去做适配会导致出现误判的情况,例如在小米手机上面运行的厂商系统不一定是 MIUI 或者 HyperOS,也有可能是被人刷成了 Android 原生的系统或者其他,反过来也一样,我时常在想,要是有这么一个工具就好了,可以判断 Android 厂商系统的类型及获取厂商系统的版本号,这样就很方便我们做 Android 适配,于是 DeviceCompat 就诞生了,可以轻松识别各种国内外手机厂商和系统版本,帮助大家解决 Android 适配最后一公里的问题。
- 截至到目前,我是行业内第一个也是唯一一个开源这套方案的人,在这里先感谢网上的同行分享的各种方法和思路,让我在开发的过程中少走了很多弯路,另外我也很能理解为什么行业内一直没有人愿意站出来开源这种框架,因为过程非常麻烦,这不仅仅是一个技术问题,还是一个苦活,因为要针对成千上万的机型进行适配。
框架亮点
-
支持识别各种定制 Android 系统(HarmonyOS、MagicOS、MIUI、HyperOS、ColorOS、OriginOS 等)
-
支持判断多种手机厂商品牌(华为、小米、OPPO、vivo、三星等)
-
使用简单,一行代码即可判断设备品牌、厂商系统类型、厂商系统版本
-
兼容性好,支持 Android 4.0 及以上系统
-
体积小巧,仅 12 KB,不会增加应用体积负担
集成步骤
- 如果你的项目 Gradle 配置是在
7.0以下,需要在build.gradle文件中加入
allprojects {
repositories {
// JitPack 远程仓库:https://jitpack.io
maven { url 'https://jitpack.io' }
}
}
- 如果你的 Gradle 配置是
7.0及以上,则需要在settings.gradle文件中加入
dependencyResolutionManagement {
repositories {
// JitPack 远程仓库:https://jitpack.io
maven { url 'https://jitpack.io' }
}
}
- 配置完远程仓库后,在项目 app 模块下的
build.gradle文件中加入远程依赖
dependencies {
// 设备兼容框架:https://github.com/getActivity/DeviceCompat
implementation 'com.github.getActivity:DeviceCompat:2.3'
}
框架 API 介绍
- 判断系统类型
// 判断当前设备的厂商系统是否为 HyperOS(小米手机、红米手机的系统)
DeviceOs.isHyperOs();
// 判断当前设备的厂商系统是否为国内版本的 HyperOS
DeviceOs.isHyperOsByChina();
// 判断当前设备的厂商系统是否为国际版本的 HyperOS
DeviceOs.isHyperOsByGlobal();
// 判断当前设备的厂商系统开启了 HyperOS 的系统优化选项
DeviceOs.isHyperOsOptimization();
// 判断当前设备的厂商系统是否为 MIUI(小米手机、红米手机的老系统)
DeviceOs.isMiui();
// 判断当前设备的厂商系统是否为国内版本的 MIUI
DeviceOs.isMiuiByChina();
// 判断当前设备的厂商系统是否为国际版本的 MIUI
DeviceOs.isMiuiByGlobal();
// 判断当前设备的厂商系统是否开启了 MIUI 优化选项
DeviceOs.isMiuiOptimization();
// 判断当前设备的厂商系统是否为 realmeUI(真我手机的系统)
DeviceOs.isRealmeUi();
// 判断当前设备的厂商系统是否为 ColorOS(OPPO 手机、一加手机的系统)
DeviceOs.isColorOs();
// 判断当前设备的厂商系统是否为 OriginOS(vivo 手机的系统)
DeviceOs.isOriginOs();
// 判断当前设备的厂商系统是否为 FuntouchOS(vivo 手机的老系统)
DeviceOs.isFuntouchOs();
// 判断当前设备的厂商系统是否为 MagicOS 或者 MagicUI(荣耀手机的系统)
DeviceOs.isMagicOs();
// 判断当前设备的厂商系统是否为 HarmonyOS(华为手机、荣耀手机的系统)
DeviceOs.isHarmonyOs();
// 判断是否在 HarmonyOS NEXT(纯血鸿蒙)的卓易通或者出境易环境上运行
DeviceOs.isHarmonyOsNextAndroidCompatible();
// 判断当前设备的厂商系统是否为 EMUI 或者 EmotionUI(华为手机、荣耀手机的老系统)
DeviceOs.isEmui();
// 判断当前设备的厂商系统是否为 OneUI(三星手机的系统)
DeviceOs.isOneUi();
// 判断当前设备的厂商系统是否为 OxygenOS(一加手机的老系统,相当于 H2OS 的海外版)
DeviceOs.isOxygenOs();
// 判断当前设备的厂商系统是否为 H2OS(一加手机的老系统,相当于 OxygenOS 的国内版)
DeviceOs.isH2Os();
// 判断当前设备的厂商系统是否为 Flyme(魅族手机的系统)
DeviceOs.isFlyme();
// 判断当前设备的厂商系统是否为 RedMagicOS(努比亚红魔手机的系统,努比亚红魔是中兴旗下的子品牌)
DeviceOs.isRedMagicOs();
// 判断当前设备的厂商系统是否为 NebulaAIOS(努比亚手机的系统)
DeviceOs.isNebulaAiOs();
// 判断当前设备的厂商系统是否为 MyOS(中兴手机、努比亚手机的系统)
DeviceOs.isMyOs();
// 判断当前设备的厂商系统是否为 MifavorUI(中兴手机的老系统)
DeviceOs.isMifavorUi();
// 判断当前设备的厂商系统是否为 SmartisanOS(锤子手机的系统)
DeviceOs.isSmartisanOs();
// 判断当前设备的厂商系统是否为 EUI(乐视手机的系统)
DeviceOs.isEui();
// 判断当前设备的厂商系统是否为 ZUXOS(联想手机、摩托罗拉手机的系统)
DeviceOs.isZuxOs();
// 判断当前设备的厂商系统是否为 ZUI(联想手机、摩托罗拉手机的老系统)
DeviceOs.isZui();
// 判断当前设备的厂商系统是否为 nubiaUI(努比亚手机的老系统)
DeviceOs.isNubiaUi();
// 判断当前设备的厂商系统是否为 ROGUI(华硕手机的系统)
DeviceOs.isRogUi();
// 判断当前设备的厂商系统是否为 360UI(360 手机的系统)
DeviceOs.is360Ui();
// 获取当前设备的厂商系统名称
DeviceOs.getOsName();
// 获取经过美化的厂商系统版本名称
DeviceOs.getOsVersionName();
// 获取厂商系统版本的大版本号(如果获取不到则返回 -1)
DeviceOs.getOsBigVersionCode();
- 判断设备品牌
// 判断当前设备的品牌是否为红米
DeviceBrand.isRedMi();
// 判断当前设备的品牌是否为小米
DeviceBrand.isXiaoMi();
// 判断当前设备的品牌是否为真我
DeviceBrand.isRealMe();
// 判断当前设备的品牌是否为一加
DeviceBrand.isOnePlus();
// 判断当前设备的品牌是否为 OPPO
DeviceBrand.isOppo();
// 判断当前设备的品牌是否为 vivo
DeviceBrand.isVivo();
// 判断当前设备的品牌是否为荣耀
DeviceBrand.isHonor();
// 判断当前设备的品牌是否为华为
DeviceBrand.isHuaWei();
// 判断当前设备的品牌是否为魅族
DeviceBrand.isMeiZu();
// 判断当前设备的品牌是否为三星
DeviceBrand.isSamsung();
// 判断当前设备的品牌是否为努比亚
DeviceBrand.isNubia();
// 判断当前设备的品牌是否为中兴
DeviceBrand.isZte();
// 判断当前设备的品牌是否为摩托罗拉
DeviceBrand.isMotorola();
// 判断当前设备的品牌是否为联想
DeviceBrand.isLenovo();
// 判断当前设备的品牌是否为华硕
DeviceBrand.isAsus();
// 判断当前设备的品牌是否为索尼
DeviceBrand.isSony();
// 判断当前设备的品牌是否为锤子
DeviceBrand.isSmartisan();
// 判断当前设备的品牌是否为乐视
DeviceBrand.isLeEco();
// 判断当前设备的品牌是否为 360
DeviceBrand.is360();
// 判断当前设备的品牌是否为酷派
DeviceBrand.isCoolPad();
// 判断当前设备的品牌是否为 LG
DeviceBrand.isLg();
// 判断当前设备的品牌是否为 HTC
DeviceBrand.isHtc();
// 判断当前设备的品牌是否为金立
DeviceBrand.isGionee();
// 判断当前设备的品牌是否为传音
DeviceBrand.isTranssion();
// 判断当前设备的品牌是否为朵唯
DeviceBrand.isDoov();
// 判断当前设备的品牌是否为飞利浦
DeviceBrand.isPhilips();
// 判断当前设备的品牌是否为黑鲨
DeviceBrand.isBlackShark();
// 判断当前设备的品牌是否为海信
DeviceBrand.isHisense();
// 判断当前设备的品牌是否为天语
DeviceBrand.isKTouch();
// 判断当前设备的品牌是否为美图
DeviceBrand.isMeiTu();
// 判断当前设备的品牌是否为诺基亚
DeviceBrand.isNokia();
// 判断当前设备的品牌是否为 Google
DeviceBrand.isGoogle();
// 获取当前设备的品牌名称
DeviceBrand.getBrandName();
- 获取设备的市场名称
// 例如:Xiaomi Pad 5
DeviceMarketName.getMarketName(@NonNull Context context);
- 获取和判断系统属性相关的方法
// 获取单个系统属性值
SystemPropertyCompat.getSystemPropertyValue((@Nullable String key);
// 获取多个系统属性值
SystemPropertyCompat.getSystemPropertyValues(@Nullable String[] keys);
// 获取多个系统属性中的任一一个值
SystemPropertyCompat.getSystemPropertyAnyOneValue(@Nullable String[] keys);
// 判断某个系统属性是否存在
SystemPropertyCompat.isSystemPropertyExist(@Nullable String key);
// 判断多个系统属性是否有任一一个存在
SystemPropertyCompat.isSystemPropertyAnyOneExist(@Nullable String[] keys);