DeviceLibray
获取Android设备详细信息
唯一ID实现方法
设备指纹算法: 第一部分:imei/meid,双卡时优先取meid,取不到meid的情况下取固定的imei(多个imei必须固定取一个,不能随机取其中之一),得到串1。 第二部分:设备串号serial不为空时,拼接android.os.Build.MANUFACTURER,得到串2。注意,如果串1和串2中的serial都为空,则取Mac地址+android.os.Build.MANUFACTURER作为串2(注意取法上需要兼容6.0、7.0、9.0以上)。 第三部分:静态硬件字段组合,依次拼接下面的字段,以"/"为分隔符号,进行32位md5小端法计算得到串3 android.os.Build.BOARD android.os.Build.BRAND android.os.Build.DEVICE android.os.Build.HARDWARE android.os.Build.MODEL android:os.Build.PRODUCT android.os.Build.TAGS android.os.Build.TYPE android.os.Build.USER android.os.Build.SUPPORTED_ABIS 数组依次拼接 android.os.Build.CPU_ABI screenWidth screenHeight screenDensity screenDensityDpi 将串1、2、3依次拼接进行32位md5小端法计算得到device_id。 客户端需要缓存得到的device_id,注意存放的位置,在外部存储中以特定隐藏文件夹+隐藏文件的形式存放,包删除后文件不被删除,别的包安装后先读取指定这个隐藏文件的内容,有device_id则直接用,无则生成;
hardware(硬件)
字段名类型说明modelString设备型号brandString设备品牌productString产品名称releaseString系统版本sdk_version_codeStringSDK版本号physical_sizeString物理尺寸cpu_typeStringcpu名字cpu_minStringcpu最小频率cpu_maxStringcpu最大频率cpu_curStringcpu当前频率manufacturer_nameString制造商boardString主板名称serial_numberString设备序列号displayString显示屏参数idString修订版本列表bootloaderString系统引导加载程序版本号finger_printString设备指纹hostString执行代码编译的Host值hardwareString硬件名deviceString设备参数userString执行代码编译的User值radio_versionString无线电固件版本tagsString描述Build的标签timeString编译时间typeStringbuilder类型base_osStringbuild基本操作系统baseband_verString基带版本resolutionString设备分辨率screen_densityString屏幕密度(像素比例:0.75/1.0/1.5/2.0)screen_density_dpiString屏幕密度(每寸像素:120/160/240/320)cpu_abiString获取设备指令集名称cpu_abi2String获取第二个指令集名称abisString手机cpu架构,支持的指令集is_tabletint是否是平板(1:是;0:不是)
general_data(通用数据)
字段名类型说明and_idString安卓IDgaidStringGAIDnetwork_operator_nameString网络运营商名称network_operatorString当前注册运营商的数字名称(MCC + MNC)network_typeString当前网络类型:NETWORK_2GNETWORK_3GNETWORK_4GNETWORK_5GNETWORK_WIFIphone_typeStringmccStringMcc / IMSI MCC(移动国家代码)bluetooth_macString蓝牙mac地址mncStringMnc / IMSI MNC(移动网络代码)locale_iso_3_languageString语言环境的三字母缩写locale_iso_3_countryString此地区的国家/地区的缩写time_zone_idString时区的IDlocale_display_languageString用户显示的语言环境语言的名称cidString基站编号dnsStringuuidString设备标识符UUIDslot_countint支持卡槽数量(sdk_version>=23才可取值,否则为0)meidString移动设备识别码 , 卡槽移动设备身份码1(android 10及以上无法取)imei2String卡槽移动设备身份码2(android 10及以上无法取)macStringmac地址languageString本地语言ui_mode_typeString当前设备支持的UI类型UI_MODE_TYPE_UNDEFINEDUI_MODE_TYPE_NORMALUI_MODE_TYPE_DESKUI_MODE_TYPE_CARUI_MODE_TYPE_TELEVISIONUI_MODE_TYPE_APPLIANCEUI_MODE_TYPE_WATCHUI_MODE_TYPE_VR_HEADSETsecurity_patchString安全补丁更新日期
sim_card
字段名类型说明sim_countint设备当前sim卡数量imsi1Stringsim卡1移动用户身份sim_country_iso1Stringsim卡1ISO国家代码等同于SIM提供商的国家代码sim_serial_number1Stringsim卡1的序列号number1Stringsim卡1对应手机号imsi2Stringsim卡2移动用户身份sim_country_iso2Stringsim卡2ISO国家代码等同于SIM提供商的国家代码sim_serial_number2Stringsim卡2的序列号number2Stringsim卡2对应手机号
storage(存储)
字段名类型说明device_idString关联设备表下deviceIdram_total_sizelong运行内存总大小(单位byte)ram_usable_sizelong运行内存可用大小(单位byte)internal_storage_totallong内部存储总空间(单位byte)internal_storage_usablelong内部存储可用空间(单位byte)memory_card_sizelongsd卡总空间(单位byte)memory_card_size_uselongsd卡已用空间(单位byte)
other_data(其它数据)
字段名类型说明root_jailbreakInt是否root(0:不是;1:是)simulatorInt是否为模拟器(0:不是;1:是)keyboardString底部是否有物理按键:有:1;无:0dbmString手机的信号强度(>-90,越大信号越强;""表示未取到)last_boot_timeLong最后一次开机时间,以毫秒为单位is_using_vpnInt是否使用vpn(0:不是;1:是)vpn_addressStringvpn代理地址is_using_proxy_portInt是否使用代理(0:不是;1:是)http_proxy_host_portStringhttp代理host:portis_usb_debugInt是否开启debug调试(0:不是;1:是)is_mock_locationInt是否允许位置模拟(0:不是;1:是)ringer_modeInt0:RINGER_MODE_SILENT(静音模式)1:RINGER_MODE_VIBRATE(震动模式)2:RINGER_MODE_NORMAL(铃音模式)is_airplane_modeInt是否开启飞行模式(0:不是;1:是)
applist(app安装)
字段名类型说明app_nameString已安装应用:APP名称package_nameString已安装应用:包名in_timeLong已安装应用:安装时间up_timeLong已安装应用:最后更新时间version_nameString版本名称version_codeInt版本号flagsInt应用标签app_typeInt是否系统应用(1:系统应用;0:非系统应用)special_permisson_listList获取app特殊权限项
contact(联系人)
字段名类型说明contact_display_nameString联系人名称numberString联系人列表:电话号码up_timeLong联系人列表:更新时间last_time_contactedLong与联系人最后联系时间times_contactedint联系次数starredint是否收藏联系人(1:收藏;0:未收藏)emailString电子邮件地址
GPS(定位)-客户端改动
字段名类型说明latitudeString维度longitudeString经度addressDetailsStringGPS详细地址
media_files(媒体文件)
字段名类型说明audio_internalInt音频内部文件个数audio_externalInt音频外部文件个数images_internalInt图片内部文件个数images_externalInt图片外部文件个数video_internalInt视频内部文件个数video_externalInt视频外部文件个数download_filesInt下载的文件个数contact_groupint联系⼈小组个数(基数默认偏大,会算上自带群组名)
network(网络)
字段名类型说明ipString路由器IProuter_nameString路由器名字(Server根据当前wifi的bssid查)current_wifi[].bssidString当前的wifi BSSIDcurrent_wifi[].ssidString当前的wifi SSIDcurrent_wifi[].nameStringwifi名称current_wifi[].macString当前的wifi mac地址configured_wifi[].bssidStringBSSID / 配置wifi BSSIDconfigured_wifi[].ssidStringSSID / 配置wifi SSIDconfigured_wifi[].nameStringwifi名称
battery_status(电池)
字段名类型说明is_chargingint是否正在充电(1:未知状态;2:充电中;3:放电中;4:未充电;5:充满)battery_pctDouble电池百分⽐(0-100)charge_typeint1:BATTERY_PLUGGED_AC(充电器)2:BATTERY_PLUGGED_USB(USB充电)4:BATTERY_PLUGGED_ANY(其它)battery_healthint1:BATTERY_HEALTH_UNKNOWN(未知)2:BATTERY_HEALTH_GOOD(良好)3:BATTERY_HEALTH_OVERHEAT(过热)4:BATTERY_HEALTH_DEAD(没电)5:BATTERY_HEALTH_OVER_VOLTAGE(过电压)6:BATTERY_HEALTH_UNSPECIFIED_FAILURE(未知错误)7:BATTERY_HEALTH_COLD(温度过低)battery_temperatureDouble电池温度(单位0.1,如359表示35.9°C)screen_brightnessDouble屏幕亮度(0-255)
sensor[ ] (传感器)
字段名类型说明sensor_lists[].typeint传感器的类型sensor_lists[].nameString传感器的名字sensor_lists[].versionint传感器的版本号sensor_lists[].vendorStringVendor名sensor_lists[].max_rangefloat传感器的最大值sensor_lists[].min_delayfloat传感器的最小值sensor_lists[].powerfloat传感器的功率sensor_lists[].resolutionfloat传感器的精度
项目地址:https://github.com/z244370114/DeviceLibray
Flutter版DeviceLibray
https://github.com/z244370114/devicesinfo
Step 1. Add the JitPack repository to your build file
allprojects {
repositories { ~~~~
...
maven { url 'https://jitpack.io' }
}
}
Step 2. Add the dependency
dependencies {
implementation 'com.github.z244370114:DeviceLibray:1.0.3'
}
3. 使用说明
(1)需要在Application的onCreate()方法里面调用UtilsApp.init(this)进行初始化上下文
(2)需要注意的是FileUtils.getSDDeviceTxt(),该方法根据算法得到唯一的device_id,判断设备唯一性