diff --git a/.kotlin/sessions/kotlin-compiler-6457922404924158511.salive b/.kotlin/sessions/kotlin-compiler-6457922404924158511.salive new file mode 100644 index 0000000..e69de29 diff --git a/BuildInfo数据库字段对应关系.md b/BuildInfo数据库字段对应关系.md new file mode 100644 index 0000000..2720185 --- /dev/null +++ b/BuildInfo数据库字段对应关系.md @@ -0,0 +1,307 @@ +# BuildInfo 与数据库字段对应关系 + +## 数据库表 `phone.build` 字段映射 + +### ✅ 已完全实现的字段 + +| 数据库字段 | BuildInfo 属性 | Android API | 说明 | +|-----------|---------------|-------------|------| +| brand | `brand` | `Build.BRAND` | 品牌 | +| model | `model` | `Build.MODEL` | 机型 | +| product | `product` | `Build.PRODUCT` | 产品名称 (如 x1seea) | +| sdkInt | `versionSdkInt` | `Build.VERSION.SDK_INT` | SDK 版本 | +| androidVersion | `versionRelease` | `Build.VERSION.RELEASE` | Android 版本 | +| buildId | `id` | `Build.ID` | 构建 ID (如 AP3A.240905.015.A2) | +| bootloader | `bootloaderVersion` | `Build.BOOTLOADER` | Bootloader 版本 | +| display | `display` | `Build.DISPLAY` | 显示 ID | +| buildUser | `user` | `Build.USER` | 构建用户 | +| incremental | `incremental` | `Build.VERSION.INCREMENTAL` | 增量版本 | +| buildHost | `host` | `Build.HOST` | 构建主机 | +| buildFingerprint | `fingerprint` | `Build.FINGERPRINT` | 构建指纹 | +| kernelVersion | `kernelVersion` | `System.getProperty("os.version")` | 内核版本 | +| securityPatch | `securityPatch` | `Build.VERSION.SECURITY_PATCH` | 安全补丁日期 | +| releaseDate | `buildDate` | `Build.TIME` | 构建时间 | + +### ✅ 新增的字段(三星设备特定) + +| 数据库字段 | BuildInfo 属性 | 系统属性 | 说明 | +|-----------|---------------|---------|------| +| rilProductCode | `rilProductCode` | `ro.ril.product_code` | RIL 产品代码 | +| rilOfficialCscver | `rilOfficialCscver` | `ro.ril.official_cscver` | RIL 官方 CSC 版本 | +| cscSalesCode | `cscSalesCode` | `ro.csc.sales_code` | CSC 销售代码 | +| countryISO | `countryISO` | `ro.product.locale.region` | 国家/地区 ISO 代码 | + +### 📝 需要在应用层处理的字段 + +| 数据库字段 | 说明 | 建议获取方式 | +|-----------|------|-------------| +| buildIdGD | 人工生成的构建 ID | 应用层生成 | +| incrementalGD | 人工生成的增量版本 | 应用层生成 | +| isManual | 是否人工录入 | 应用层标记 | +| sourceId | 数据源 ID | 应用层管理 | +| sourceTable | 数据源表 | 应用层管理 | +| updatedOn | 更新时间 | 数据库自动生成 | +| dataStatus | 数据状态 (1为准确可用) | 应用层管理 | + +--- + +## 数据库表 `phone.hardware_new` 字段映射 + +### ✅ 已完全实现的字段 + +| 数据库字段 | BuildInfo/其他模块 属性 | Android API | 说明 | +|-----------|----------------------|-------------|------| +| brand | `brand` | `Build.BRAND` | 品牌 | +| model | `model` | `Build.MODEL` | 设备型号 | +| device | `device` | `Build.DEVICE` | 设备代号 | +| board | `board` | `Build.BOARD` | 主板名称 | +| manufacturer | `manufacturer` | `Build.MANUFACTURER` | 制造商 | +| hardware | `hardware` | `Build.HARDWARE` | 硬件标识 | +| formFactor | `formFactor` | 复合判断 | 设备类型 (Phone/Tablet) | +| linuxArchitecture | `kernelArchitecture` | `System.getProperty("os.arch")` | Linux 架构 | + +### ⚠️ 部分实现或需要其他模块的字段 + +| 数据库字段 | 对应模块 | 说明 | +|-----------|---------|------| +| marketingName | ❌ 未实现 | 需要从设备数据库或 API 获取 | +| shortName | ❌ 未实现 | 需要从 marketingName 处理生成 | +| systemonChip | ⚠️ CpuInfo | 需要从 CPU 信息推导 SoC 名称 | +| screenSize | ⚠️ DisplayInfo | 屏幕尺寸(英寸) | +| screenSizecm | ⚠️ DisplayInfo | 屏幕尺寸(平方厘米) | +| maxWidthPixels | ⚠️ DisplayInfo | 最大宽度像素 | +| maxHeightPixels | ⚠️ DisplayInfo | 最大高度像素 | +| dpi | ⚠️ DisplayInfo | 物理 DPI | +| maxRefreshRate | ⚠️ DisplayInfo | 最大刷新率 | +| ramType | ⚠️ MemInfo | RAM 类型 (LPDDR5 等) | +| totalMemoryGB | ⚠️ DeviceInfo/MemInfo | 总内存 | +| totalStorageGB | ⚠️ StorageInfo | 总存储空间 | +| supportEsim | ⚠️ NetworkInfo | 是否支持 eSIM | +| simSlotCount | ⚠️ NetworkInfo | SIM 卡槽数量 | +| batteryDesignCapacity | ⚠️ BatteryInfo | 电池设计容量 | +| batteryWirelessSupported | ⚠️ BatteryInfo | 是否支持无线充电 | +| cellularGen | ⚠️ NetworkInfo | 最大网络类型 (3G/4G/5G) | +| maxWifiVersion | ⚠️ NetworkInfo | 最大 Wi-Fi 版本 | +| bluetoothVersion | ⚠️ BluetoothInfo | 蓝牙版本 | +| hasNFC | ⚠️ 未实现 | 是否支持 NFC | + +### 📝 需要外部数据或人工处理的字段 + +| 数据库字段 | 说明 | 建议获取方式 | +|-----------|------|-------------| +| boardGD | 人工生成的主板名称 | 应用层生成 | +| hardwareGD | 人工生成的硬件标识 | 应用层生成 | +| isFold | 是否折叠机 | 需要外部数据库或规则判断 | +| releasedDate | 产品发布时间 | 需要外部数据库 | +| weight | 设备重量 | 需要外部数据库 | +| releasedAndroidVersion | 发布时 Android 版本 | 需要外部数据库 | +| supportAndroidMaxVersion | 最大支持 Android 版本 | 需要外部数据库 | +| price | 价格(美元) | 需要外部数据库 | +| sourceId | 数据源 ID | 应用层管理 | +| updatedOn | 更新时间 | 数据库自动生成 | + +--- + +## 📋 BuildInfo.kt 已实现的完整字段列表 + +### 基本构建信息 +- ✅ `fingerprint` - 构建指纹 +- ✅ `brand` - 品牌 +- ✅ `model` - 机型 +- ✅ `product` - 产品名称 +- ✅ `device` - 设备代号 +- ✅ `board` - 主板名称 +- ✅ `manufacturer` - 制造商 +- ✅ `hardware` - 硬件标识 +- ✅ `tags` - 构建标签 +- ✅ `type` - 构建类型 +- ✅ `buildDate` - 构建日期 +- ✅ `host` - 构建主机 +- ✅ `user` - 构建用户 +- ✅ `id` - 构建 ID +- ✅ `display` - 显示 ID + +### Android 版本信息 +- ✅ `versionRelease` - Android 版本号 +- ✅ `versionCodename` - 版本代号 +- ✅ `versionSdkInt` - SDK 版本 +- ✅ `versionPreviewSdkInt` - 预览版 SDK +- ✅ `securityPatch` - 安全补丁级别 +- ✅ `baseOs` - 基础操作系统 +- ✅ `incremental` - 增量版本 +- ✅ `releaseOrCodename` - 版本号或代号 +- ✅ `mediaPerformanceClass` - 媒体性能等级 +- ✅ `releaseOrPreviewDisplay` - 版本显示字符串 + +### RIL 和 CSC 信息(三星设备) +- ✅ `rilProductCode` - RIL 产品代码 +- ✅ `rilOfficialCscver` - RIL 官方 CSC 版本 +- ✅ `cscSalesCode` - CSC 销售代码 +- ✅ `countryISO` - 国家/地区 ISO 代码 + +### 设备类型 +- ✅ `formFactor` - 设备类型 (Phone/Tablet) +- ✅ `isTablet` - 是否为平板 +- ✅ `isPhone` - 是否为手机 + +### JVM 信息 +- ✅ `jvmName` - JVM 名称 +- ✅ `jvmVendor` - JVM 供应商 +- ✅ `jvmVersion` - JVM 版本 +- ✅ `jvmClassVersion` - Java 类版本 +- ✅ `jvmSpecificationName` - Java 规范名称 +- ✅ `jvmSpecificationVendor` - Java 规范供应商 +- ✅ `jvmSpecificationVersion` - Java 规范版本 + +### 安全与内核信息 +- ✅ `vendorSecurityPatchLevel` - 厂商安全补丁 +- ✅ `kernelVersion` - 内核版本号 +- ✅ `kernelCompleteVersion` - 完整内核版本 +- ✅ `kernelArchitecture` - 内核架构 +- ✅ `kernelName` - 内核名称 +- ✅ `kernelCommandLine` - 内核命令行 +- ✅ `bootloaderVersion` - Bootloader 版本 +- ✅ `radioVersion` - 基带版本 +- ✅ `procCpuInfo` - CPU 信息 +- ✅ `procMemInfo` - 内存信息 + +### 分区信息 +- ✅ `fingerprintedPartitions` - 指纹分区列表 + +### Treble 和系统更新 +- ✅ `isTrebleEnabled` - Treble 支持 +- ✅ `trebleVersion` - Treble 版本 +- ✅ `isSeamlessUpdateSupported` - 无缝更新支持 +- ✅ `currentSlot` - 当前活动插槽 +- ✅ `isVirtualABEnabled` - 虚拟 A/B 支持 + +### Root 和安全 +- ✅ `isRooted` - Root 状态 +- ✅ `seLinuxStatus` - SELinux 状态 +- ✅ `isDmVerityEnabled` - dm-verity 状态 + +### Google Play 服务 +- ✅ `googlePlayServicesVersion` - Play 服务版本 +- ✅ `googlePlayServicesVersionCode` - Play 服务版本代码 +- ✅ `googlePlayStoreVersion` - Play 商店版本 +- ✅ `googleServicesFrameworkVersion` - GSF 版本 + +### 系统工具 +- ✅ `toyboxVersion` - Toybox 版本 +- ✅ `toolboxVersion` - Toolbox 版本 +- ✅ `busyboxVersion` - BusyBox 版本 + +### SSL/TLS +- ✅ `openSslVersion` - OpenSSL 版本 +- ✅ `boringSslVersion` - BoringSSL 版本 +- ✅ `tlsVersion` - TLS 版本 + +### 语言和时区 +- ✅ `systemLanguage` - 系统语言 +- ✅ `languageCode` - 语言代码 +- ✅ `country` - 国家/地区 +- ✅ `countryCode` - 国家/地区代码 +- ✅ `timeZone` - 系统时区 +- ✅ `timeZoneDisplayName` - 时区显示名称 +- ✅ `timeZoneOffset` - UTC 偏移 + +### 开发者选项 +- ✅ `isUsbDebuggingEnabled` - USB 调试 +- ✅ `isDevelopmentSettingsEnabled` - 开发者选项 +- ✅ `isUnknownSourcesEnabled` - 未知来源安装 + +### 设备标识符 +- ✅ `androidId` - Android ID +- ✅ `serialNumber` - 序列号 +- ✅ `deviceUniqueId` - 设备唯一 ID + +--- + +## 🔍 缺失字段总结 + +### phone.build 表 +**完全实现**: ✅ 15/15 个核心字段 +**新增三星专用字段**: ✅ 4/4 个 +**需应用层处理**: 7 个(buildIdGD, incrementalGD, isManual 等) + +### phone.hardware_new 表 +**完全实现**: ✅ 8/8 个基本字段 +**需其他模块**: ⚠️ 16 个(DisplayInfo, NetworkInfo, BatteryInfo 等) +**需外部数据**: ❌ 10 个(marketingName, releasedDate, price 等) + +--- + +## 📊 使用示例 + +### 获取 build 表所需数据 +```kotlin +val buildInfo = AndInfo.instance.build + +val buildData = mapOf( + "brand" to buildInfo.brand, + "model" to buildInfo.model, + "product" to buildInfo.product, + "sdkInt" to buildInfo.versionSdkInt, + "androidVersion" to buildInfo.versionRelease, + "buildId" to buildInfo.id, + "bootloader" to buildInfo.bootloaderVersion, + "display" to buildInfo.display, + "buildUser" to buildInfo.user, + "incremental" to buildInfo.incremental, + "buildHost" to buildInfo.host, + "buildFingerprint" to buildInfo.fingerprint, + "rilProductCode" to buildInfo.rilProductCode, + "rilOfficialCscver" to buildInfo.rilOfficialCscver, + "cscSalesCode" to buildInfo.cscSalesCode, + "countryISO" to buildInfo.countryISO, + "kernelVersion" to buildInfo.kernelVersion, + "securityPatch" to buildInfo.securityPatch, + "releaseDate" to buildInfo.buildDate +) +``` + +### 获取 hardware_new 表基本字段 +```kotlin +val buildInfo = AndInfo.instance.build + +val hardwareData = mapOf( + "brand" to buildInfo.brand, + "model" to buildInfo.model, + "formFactor" to buildInfo.formFactor, + "device" to buildInfo.device, + "board" to buildInfo.board, + "manufacturer" to buildInfo.manufacturer, + "hardware" to buildInfo.hardware, + "linuxArchitecture" to buildInfo.kernelArchitecture +) +``` + +--- + +## ✅ 总结 + +### BuildInfo.kt 已实现 +- ✅ **phone.build 表**: 15/15 核心字段 + 4 个三星专用字段 +- ✅ **phone.hardware_new 表**: 8/8 基本字段 +- ✅ **额外功能**: 60+ 个系统信息属性 + +### 需要其他模块支持 +- DisplayInfo: 屏幕相关字段 +- NetworkInfo: 网络和 SIM 卡相关字段 +- BatteryInfo: 电池相关字段 +- StorageInfo: 存储相关字段 +- BluetoothInfo: 蓝牙相关字段 +- MemInfo: 内存类型相关字段 + +### 需要外部数据源 +- marketingName(市场名称) +- releasedDate(发布日期) +- price(价格) +- weight(重量) +- 等规格参数需要从产品数据库获取 + +--- + +**最后更新**: 2025年12月24日 +**BuildInfo.kt 版本**: 完整版 + diff --git a/myphoneinfo/andinfo/src/main/java/com/xyzshell/andinfo/libs/BuildInfo.kt b/myphoneinfo/andinfo/src/main/java/com/xyzshell/andinfo/libs/BuildInfo.kt index 89abd9b..eda40c4 100644 --- a/myphoneinfo/andinfo/src/main/java/com/xyzshell/andinfo/libs/BuildInfo.kt +++ b/myphoneinfo/andinfo/src/main/java/com/xyzshell/andinfo/libs/BuildInfo.kt @@ -31,6 +31,55 @@ class BuildInfo(private val context: Context) { val fingerprint: String get() = Build.FINGERPRINT + /** + * 品牌 + * 示例: "samsung", "google", "xiaomi" + */ + val brand: String + get() = Build.BRAND + + /** + * 机型 + * 示例: "SM-G998B", "Pixel 6 Pro" + */ + val model: String + get() = Build.MODEL + + /** + * 产品名称 + * 示例: "x1seea", "redfin" + */ + val product: String + get() = Build.PRODUCT + + /** + * 设备代号 + * 示例: "p3s", "redfin" + */ + val device: String + get() = Build.DEVICE + + /** + * 主板名称 + * 示例: "s5e9925" + */ + val board: String + get() = Build.BOARD + + /** + * 制造商 + * 示例: "samsung", "Google" + */ + val manufacturer: String + get() = Build.MANUFACTURER + + /** + * 硬件标识 + * 示例: "qcom", "exynos2200" + */ + val hardware: String + get() = Build.HARDWARE + /** * 构建标签 * 通常为 "release-keys" (正式版) 或 "test-keys" (测试版) @@ -158,6 +207,110 @@ class BuildInfo(private val context: Context) { val releaseOrPreviewDisplay: String? get() = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) Build.VERSION.RELEASE_OR_PREVIEW_DISPLAY else null + // ==================== RIL 和 CSC 信息 ==================== + + /** + * RIL 产品代码 + * Radio Interface Layer 产品代码(三星设备) + * 示例: "SM-G998BZKDEUB" + */ + val rilProductCode: String? + get() = getSystemProperty("ro.ril.product_code") + ?: getSystemProperty("ril.product_code") + + /** + * RIL 官方 CSC 版本 + * CSC (Customer Service Code) 官方版本(三星设备) + * 示例: "G998BXXU4CWE1" + */ + val rilOfficialCscver: String? + get() = getSystemProperty("ro.ril.official_cscver") + ?: getSystemProperty("ril.official_cscver") + + /** + * CSC 销售代码 + * 表示设备的销售地区/运营商代码(三星设备) + * 示例: "XEU" (欧洲未锁定), "ATT" (AT&T), "TMB" (T-Mobile) + */ + val cscSalesCode: String? + get() = getSystemProperty("ro.csc.sales_code") + ?: getSystemProperty("ril.sales_code") + ?: getSystemProperty("persist.sys.omc_etcpath")?.substringAfterLast("/") + + /** + * 国家/地区 ISO 代码 + * 小写 ISO 标准代码,世界版本为 "zz" + * 示例: "us", "cn", "kr", "zz" + */ + val countryISO: String? + get() { + // 尝试多个来源获取国家代码 + val country = getSystemProperty("ro.product.locale.region") + ?: getSystemProperty("persist.sys.country") + ?: getSystemProperty("ro.product.country") + ?: Locale.getDefault().country + + return country?.lowercase()?.takeIf { it.isNotEmpty() } + } + + // ==================== 设备类型 ==================== + + /** + * 设备外形因素/类型 + * 判断设备是手机(Phone)还是平板(Tablet) + * @return "Phone", "Tablet" 或 "Unknown" + */ + val formFactor: String + get() { + // 检查系统属性 + val deviceType = getSystemProperty("ro.build.characteristics") + if (deviceType != null) { + return when { + deviceType.contains("tablet", ignoreCase = true) -> "Tablet" + deviceType.contains("phone", ignoreCase = true) -> "Phone" + else -> deviceType + } + } + + // 通过 PackageManager 特性判断 + val packageManager = context.packageManager + return when { + // 检查是否有电话功能(手机的标志) + packageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY) -> { + // 有电话功能,但还要检查屏幕尺寸 + val config = context.resources.configuration + val screenLayout = config.screenLayout and android.content.res.Configuration.SCREENLAYOUT_SIZE_MASK + // 大屏幕且有电话功能可能是平板带电话(如某些三星平板) + if (screenLayout >= android.content.res.Configuration.SCREENLAYOUT_SIZE_XLARGE) { + "Tablet" + } else { + "Phone" + } + } + // 没有电话功能,通过屏幕尺寸判断 + else -> { + val config = context.resources.configuration + val screenLayout = config.screenLayout and android.content.res.Configuration.SCREENLAYOUT_SIZE_MASK + when { + screenLayout >= android.content.res.Configuration.SCREENLAYOUT_SIZE_LARGE -> "Tablet" + else -> "Unknown" + } + } + } + } + + /** + * 是否为平板设备 + */ + val isTablet: Boolean + get() = formFactor == "Tablet" + + /** + * 是否为手机设备 + */ + val isPhone: Boolean + get() = formFactor == "Phone" + // ==================== JVM 信息 ==================== /** @@ -684,6 +837,14 @@ class BuildInfo(private val context: Context) { // 基本构建信息 sb.append("=== 系统构建信息 ===\n") sb.append("指纹: $fingerprint\n") + sb.append("品牌: $brand\n") + sb.append("机型: $model\n") + sb.append("产品: $product\n") + sb.append("设备代号: $device\n") + sb.append("主板: $board\n") + sb.append("制造商: $manufacturer\n") + sb.append("硬件: $hardware\n") + sb.append("设备类型: $formFactor\n") sb.append("显示ID: $display\n") sb.append("构建ID: $id\n") sb.append("类型: $type\n") @@ -692,6 +853,15 @@ class BuildInfo(private val context: Context) { sb.append("构建用户: $user\n") sb.append("构建主机: $host\n") + // RIL 和 CSC 信息(主要用于三星设备) + if (rilProductCode != null || rilOfficialCscver != null || cscSalesCode != null) { + sb.append("\n=== RIL/CSC 信息 ===\n") + rilProductCode?.let { sb.append("RIL产品代码: $it\n") } + rilOfficialCscver?.let { sb.append("RIL官方CSC版本: $it\n") } + cscSalesCode?.let { sb.append("CSC销售代码: $it\n") } + countryISO?.let { sb.append("国家/地区ISO: $it\n") } + } + // Android 版本信息 sb.append("\n=== Android 版本 ===\n") sb.append("版本号: $versionRelease\n")