框架介紹
Android 碎片化至始至終是一個(gè)令人非常頭疼的問題,特別為 XXPermissions 上面為不同的廠商做適配的時(shí)候就非常頭疼,因?yàn)槭忻嫔夏苷业降拈_源庫只能判斷機(jī)型的品牌,而不能判斷 Android 廠商定制的系統(tǒng)類型,用機(jī)型的品牌去做適配會(huì)導(dǎo)致出現(xiàn)誤判的情況,例如在小米手機(jī)上面運(yùn)行的廠商系統(tǒng)不一定是 MIUI 或者 HyperOS,也有可能是被人刷成了 Android 原生的系統(tǒng)或者其他,反過來也一樣,我時(shí)常在想,要是有這么一個(gè)工具就好了,可以判斷 Android 廠商系統(tǒng)的類型及獲取廠商系統(tǒng)的版本號(hào),這樣就很方便我們做 Android 適配,于是 DeviceCompat 就誕生了,可以輕松識(shí)別各種國內(nèi)外手機(jī)廠商和系統(tǒng)版本,幫助大家解決 Android 適配最后一公里的問題。
截至到目前,我是行業(yè)內(nèi)第一個(gè)也是唯一一個(gè)開源這套方案的人,在這里先感謝網(wǎng)上的同行分享的各種方法和思路,讓我在開發(fā)的過程中少走了很多彎路,另外我也很能理解為什么行業(yè)內(nèi)一直沒有人愿意站出來開源這種框架,因?yàn)檫^程非常麻煩,這不僅僅是一個(gè)技術(shù)問題,還是一個(gè)苦活,因?yàn)橐槍?duì)成千上萬的機(jī)型進(jìn)行適配。

框架亮點(diǎn)
支持識(shí)別各種定制 Android 系統(tǒng)(HarmonyOS、MagicOS、MIUI、HyperOS、ColorOS、OriginOS 等)
支持判斷多種手機(jī)廠商品牌(華為、小米、OPPO、vivo、三星等)
使用簡單,一行代碼即可判斷設(shè)備品牌、廠商系統(tǒng)類型、廠商系統(tǒng)版本
兼容性好,支持 Android 4.0 及以上系統(tǒng)
體積小巧,僅 12 KB,不會(huì)增加應(yīng)用體積負(fù)擔(dān)
集成步驟
- 如果你的項(xiàng)目 Gradle 配置是在
7.0以下,需要在build.gradle文件中加入
allprojects {
repositories {
// JitPack 遠(yuǎn)程倉庫:https://jitpack.io
maven { url 'https://jitpack.io' }
}
}
- 如果你的 Gradle 配置是
7.0及以上,則需要在settings.gradle文件中加入
dependencyResolutionManagement {
repositories {
// JitPack 遠(yuǎn)程倉庫:https://jitpack.io
maven { url 'https://jitpack.io' }
}
}
- 配置完遠(yuǎn)程倉庫后,在項(xiàng)目 app 模塊下的
build.gradle文件中加入遠(yuǎn)程依賴
dependencies {
// 設(shè)備兼容框架:https://github.com/getActivity/DeviceCompat
implementation 'com.github.getActivity:DeviceCompat:1.0'
}
框架 API 介紹
- 判斷系統(tǒng)類型
// 判斷當(dāng)前設(shè)備的廠商系統(tǒng)是否為 HyperOS(小米新系統(tǒng))
DeviceOs.isHyperOs();
// 判斷當(dāng)前設(shè)備的廠商系統(tǒng)是否為國內(nèi)版本的 HyperOS
DeviceOs.isHyperOsByChina();
// 判斷當(dāng)前設(shè)備的廠商系統(tǒng)是否為國際版本的 HyperOS
DeviceOs.isHyperOsByGlobal();
// 判斷當(dāng)前設(shè)備的廠商系統(tǒng)開啟了 HyperOS 的系統(tǒng)優(yōu)化選項(xiàng)
DeviceOs.isHyperOsOptimization();
// 判斷當(dāng)前設(shè)備的廠商系統(tǒng)是否為 MIUI(小米老系統(tǒng))
DeviceOs.isMiui();
// 判斷當(dāng)前設(shè)備的廠商系統(tǒng)是否為國內(nèi)版本的 MIUI
DeviceOs.isMiuiByChina();
// 判斷當(dāng)前設(shè)備的廠商系統(tǒng)是否為國際版本的 MIUI
DeviceOs.isMiuiByGlobal();
// 判斷當(dāng)前設(shè)備的廠商系統(tǒng)是否開啟了 MIUI 優(yōu)化選項(xiàng)
DeviceOs.isMiuiOptimization();
// 判斷當(dāng)前設(shè)備的廠商系統(tǒng)是否為 RealmeUI(真我系統(tǒng))
DeviceOs.isRealmeUi();
// 判斷當(dāng)前設(shè)備的廠商系統(tǒng)是否為 ColorOS(OPPO 系統(tǒng))
DeviceOs.isColorOs();
// 判斷當(dāng)前設(shè)備的廠商系統(tǒng)是否為 OriginOS(VIVO 系統(tǒng))
DeviceOs.isOriginOs();
// 判斷當(dāng)前設(shè)備的廠商系統(tǒng)是否為 FuntouchOS(VIVO 的老系統(tǒng))
DeviceOs.isFuntouchOs();
// 判斷當(dāng)前設(shè)備的廠商系統(tǒng)是否為 MagicOS(榮耀系統(tǒng))
DeviceOs.isMagicOs();
// 判斷當(dāng)前設(shè)備的廠商系統(tǒng)是否為 HarmonyOS(華為鴻蒙的系統(tǒng))
DeviceOs.isHarmonyOs();
// 判斷當(dāng)前設(shè)備的廠商系統(tǒng)是否為 EMUI(華為和榮耀的老系統(tǒng))
DeviceOs.isEmui();
// 判斷當(dāng)前設(shè)備的廠商系統(tǒng)是否為 OneUI(三星系統(tǒng))
DeviceOs.isOneUi();
// 判斷當(dāng)前設(shè)備的廠商系統(tǒng)是否為 OxygenOS(一加的老系統(tǒng))
DeviceOs.isOxygenOs();
// 判斷當(dāng)前設(shè)備的廠商系統(tǒng)是否為 H2OS(一加的老系統(tǒng))
DeviceOs.isH2Os();
// 判斷當(dāng)前設(shè)備的廠商系統(tǒng)是否為 Flyme(魅族系統(tǒng))
DeviceOs.isFlyme();
// 判斷當(dāng)前設(shè)備的廠商系統(tǒng)是否為 MyOS(中興或者努比亞的系統(tǒng))
DeviceOs.isMyOs();
// 判斷當(dāng)前設(shè)備的廠商系統(tǒng)是否為 MifavorUI(中興老系統(tǒng))
DeviceOs.isMifavorUi();
// 判斷當(dāng)前設(shè)備的廠商系統(tǒng)是否為 SmartisanOS(錘子系統(tǒng))
DeviceOs.isSmartisanOs();
// 判斷當(dāng)前設(shè)備的廠商系統(tǒng)是否為 EUI(樂視的系統(tǒng))
DeviceOs.isEui();
// 判斷當(dāng)前設(shè)備的廠商系統(tǒng)是否為 ZUI(摩托羅拉的系統(tǒng))
DeviceOs.isZui();
// 判斷當(dāng)前設(shè)備的廠商系統(tǒng)是否為 360UI(360 系統(tǒng))
DeviceOs.is360Ui();
// 獲取當(dāng)前設(shè)備的廠商系統(tǒng)名稱
DeviceOs.getOsName();
// 獲取當(dāng)前設(shè)備的廠商系統(tǒng)名稱
DeviceOs.getOsName();
// 獲取經(jīng)過美化的廠商系統(tǒng)版本號(hào)
DeviceOs.getOsVersionName();
// 獲取廠商系統(tǒng)版本的大版本號(hào)
DeviceOs.getOsBigVersionCode();
// 獲取原始的廠商系統(tǒng)版本號(hào)
DeviceOs.getOriginalOsVersionName();
- 判斷設(shè)備品牌
// 判斷當(dāng)前設(shè)備的品牌是否為華為
DeviceBrand.isHuaWei();
// 判斷當(dāng)前設(shè)備的品牌是否為榮耀
DeviceBrand.isHonor();
// 判斷當(dāng)前設(shè)備的品牌是否為 vivo
DeviceBrand.isVivo();
// 判斷當(dāng)前設(shè)備的品牌是否為小米
DeviceBrand.isXiaoMi();
// 判斷當(dāng)前設(shè)備的品牌是否為 OPPO
DeviceBrand.isOppo();
// 判斷當(dāng)前設(shè)備的品牌是否為真我
DeviceBrand.isRealMe();
// 判斷當(dāng)前設(shè)備的品牌是否為樂視
DeviceBrand.isLeEco();
// 判斷當(dāng)前設(shè)備的品牌是否為 360
DeviceBrand.is360();
// 判斷當(dāng)前設(shè)備的品牌是否為中興
DeviceBrand.isZte();
// 判斷當(dāng)前設(shè)備的品牌是否為一加
DeviceBrand.isOnePlus();
// 判斷當(dāng)前設(shè)備的品牌是否為努比亞
DeviceBrand.isNubia();
// 判斷當(dāng)前設(shè)備的品牌是否為酷派
DeviceBrand.isCoolPad();
// 判斷當(dāng)前設(shè)備的品牌是否為 LG
DeviceBrand.isLg();
// 判斷當(dāng)前設(shè)備的品牌是否為 Google
DeviceBrand.isGoogle();
// 判斷當(dāng)前設(shè)備的品牌是否為三星
DeviceBrand.isSamsung();
// 判斷當(dāng)前設(shè)備的品牌是否為魅族
DeviceBrand.isMeiZu();
// 判斷當(dāng)前設(shè)備的品牌是否為聯(lián)想
DeviceBrand.isLenovo();
// 判斷當(dāng)前設(shè)備的品牌是否為錘子
DeviceBrand.isSmartisan();
// 判斷當(dāng)前設(shè)備的品牌是否為 HTC
DeviceBrand.isHtc();
// 判斷當(dāng)前設(shè)備的品牌是否為索尼
DeviceBrand.isSony();
// 判斷當(dāng)前設(shè)備的品牌是否為金立
DeviceBrand.isGionee();
// 判斷當(dāng)前設(shè)備的品牌是否為摩托羅拉
DeviceBrand.isMotorola();
// 判斷當(dāng)前設(shè)備的品牌是否為傳音
DeviceBrand.isTranssion();
// 獲取當(dāng)前設(shè)備的品牌名稱
DeviceBrand.getBrandName();
- 系統(tǒng)屬性相關(guān)的方法
// 獲取單個(gè)系統(tǒng)屬性值
SystemPropertyCompat.getSystemPropertyValue((@Nullable String key);
// 獲取多個(gè)系統(tǒng)屬性值
SystemPropertyCompat.getSystemPropertyValues(@Nullable String[] keys);
// 獲取多個(gè)系統(tǒng)屬性中的任一一個(gè)值
SystemPropertyCompat.getSystemPropertyAnyOneValue(@Nullable String[] keys);
// 判斷某個(gè)系統(tǒng)屬性是否存在
SystemPropertyCompat.isSystemPropertyExist(@Nullable String key);
// 判斷多個(gè)系統(tǒng)屬性是否有任一一個(gè)存在
SystemPropertyCompat.isSystemPropertyAnyOneExist(@Nullable String[] keys);