2026/8/27 16:00:35

Android为何不再让App读取MAC地址?CatShare用Shizuku+AIDL绕过限制的完整方案

Android为何不再让App读取MAC地址?CatShare用Shizuku+AIDL绕过限制的完整方案 Android为何不再让App读取MAC地址CatShare用ShizukuAIDL绕过限制的完整方案【免费下载链接】CatShare类原生 海外设备现已加入互传联盟。项目地址: https://gitcode.com/gh_mirrors/ca/CatShareCatShare是一款面向 Android 的类原生跨品牌互传文件分享工具现已加入互传联盟协议生态。由于 Android 10 起系统禁止普通 App 读取 MAC 地址而互传联盟恰恰需要 MAC 地址做设备认证CatShare 巧妙地借助Shizuku AIDL组合绕过了这一限制。本文将讲清楚系统为什么要封 MAC、CatShare 是怎么绕的、以及你如何三步开启这个功能。一、为什么 Android 不再让 App 读 MAC 地址从 Android 6.0 开始系统就逐步收紧了硬件标识符的访问到Android 10API 29彻底封死普通第三方应用调用WifiInfo.getMacAddress()只会拿到02:00:00:00:00:00这样的假值。背后的原因很简单隐私保护MAC 地址出厂即固定、无法重置厂商和 App 可以借此在用户不知情时做跨应用、跨时间的追踪防指纹定位MAC 是天然的设备指纹与 IMEI、序列号一起构成了设备追踪的基础设施。系统只对自身进程和系统级应用各品牌的系统互传 App保留真实的 MAC 读取能力。这也正是第三方互传类应用最大的拦路虎。二、互传联盟为什么离不开 MAC 地址CatShare 支持小米、OPPO/一加、vivo 等品牌的系统互传协议让非系统应用也能与这些设备互传文件。问题在于互传联盟协议把设备 MAC 地址当作认证信息的一部分接收方要用它校验对面是不是同一台设备。普通 App 拿不到真实 MAC认证就过不去——这不是 App 能装一装糊弄过去的因为协议要求的是物理网卡的真实地址。CatShare 的答案是换一条有权限的路把 MAC 读出来。项目截图三、CatShare 的破解思路Shizuku 提供权限AIDL 跨进程读取整个方案可以拆成两层非常经典1️⃣ Shizuku让应用借用系统级权限Shizuku 是一个开源工具它把一部分系统权限租借给已授权的应用使用通过 ADB 授权或免 root 方式启动。CatShare 在 MainActivity.kt 中监听了 Shizuku 的 Binder 状态当 Shizuku 可用且用户授权后CatShare 会创建一个运行在 Shizuku 进程内的用户服务该服务拥有LOCAL_MAC_ADDRESS这个系统级权限的访问路径可以读取真实网卡地址。2️⃣ AIDL定义跨进程接口按需取 MAC跨进程怎么调答案是AIDLAndroid Interface Definition Language。CatShare 在app/src/main/aidl/moe/reimu/catshare/IMacAddressService.aidl中定义了一个极简接口getP2pMacAddress()—— 直接取 Wi-Fi Direct互传通道所用网卡的 MACgetMacAddressByName(String name)—— 按网卡名取任意 MAC互传场景固定读p2p0网卡。服务端实现在 MacAddressService.kt遍历NetworkInterface列表找到p2p0后把hardwareAddress转成xx:xx:xx:xx:xx:xx格式返回。就这么几行代码却是整个方案的钥匙。四、调度中枢ShizukuUtils 如何无缝降级真正聪明的设计在 ShizukuUtils.kt场景行为系统已授予LOCAL_MAC_ADDRESS直接本地读取完全不依赖 Shizuku未授权绑定 Shizuku 用户服务通过 AIDL 远程取 MAC服务尚未绑好等待最长 20 秒期间自动完成绑定调用方只需一行ShizukuUtils.getMacAddress(context, p2p0) { ... }底层是直读还是跨进程对它完全透明。发送文件时 P2pSenderService.kt 会用取到的 MAC 做设备标识拿不到就兜底用02:00:00:00:00:00。五、三步开启Shizuku 授权配置指南安装 Shizuku从应用商店安装 Shizuku 并保持运行需通过 ADB 或无线调试方式启动一次在 CatShare 主页授权打开 CatShare主页会显示 Shizuku 状态卡片点击它弹出授权请求选择允许验证状态卡片出现 ✅ic_done即表示可用此时发起文件互传CatShare 会自动读取p2p0网卡 MAC 完成互传联盟认证。 提示如果你的系统已直接授予LOCAL_MAC_ADDRESS权限CatShare 会自动走本地直读路径Shizuku 卡片可直接忽略。六、常见问题 FAQQ1不用 Shizuku 能收能发吗接收没问题发送文件需要 Shizuku发送端要提供真实 MAC 认证。Q2Shizuku 授权后重启还有效吗Shizuku 本身需要保持运行建议在其设置中开启自启动/后台白名单授权结果会被记住无需重复点允许。Q3这个方案会被 Android 未来版本废掉吗LOCAL_MAC_ADDRESS是系统签名权限Shizuku 走的是系统服务通道与厂商系统互传 App 获取 MAC 的机制同源稳定性取决于 Shizuku 生态的维护。结语CatShare 展示了一个教科书式的组合拳Shizuku 解决权限从哪来AIDL 解决怎么跨进程拿让第三方应用第一次能完整接入互传联盟协议。如果你想深入了解各品牌兼容情况与日志抓取方法可以看看项目里的 README.md本地克隆源码阅读git clone https://gitcode.com/gh_mirrors/ca/CatShare希望这篇指南帮你理解了 Android MAC 地址限制的来龙去脉也祝你互传顺利【免费下载链接】CatShare类原生 海外设备现已加入互传联盟。项目地址: https://gitcode.com/gh_mirrors/ca/CatShare创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考