RootBeer Root 检测:给 App 加设备 root 校验的 5 分钟实操笔记
【免费下载链接】rootbeerSimple to use root checking Android library and sample app项目地址: https://gitcode.com/gh_mirrors/ro/rootbeer
你的 App 有风控要求:不能在已 root 的设备上跑(root 通俗讲就是拿到了系统的最高管理员权限)。可你自己找检测代码,只能搜到一堆东拼西凑的博客。下面这个 RootBeer root 检测库就干一件事:用十几种检测手段组合,告诉你这台设备有没有 root 迹象。读完本文,你能 5 分钟给 App 加上 root 检测,并知道怎么处理误报。
🧐 它到底帮你解决什么
没有它,你得自己写检测代码:su 文件查哪些路径、root 管理应用查哪些包名、系统属性怎么验证,每一项都有边界情况。有它,这些细节被封装成一次isRooted()调用,示例应用还能把 12 项检测逐条列出,每项结果一目了然。这张图展示的是示例 App 检测前的检测项列表。
🚀 三步跑起来
RootBeer 集成步骤一共三步:
引入依赖
库发布在 Maven Central 上,无需本地编译。在 Gradle 的dependencies块里加一行implementation 'com.scottyab:rootbeer-lib:0.1.2'即可。不想走 Maven Central 的话 Jitpack 也能拉到,但官方推荐用 release 版本。
初始化
传入一个 Context 就行:RootBeer rootBeer = new RootBeer(context);。对象无状态,随用随建。
取结果
调用isRooted(),返回一个布尔值,true 表示发现了 root 迹象。
RootBeer rootBeer = new RootBeer(context); boolean rooted = rootBeer.isRooted();这段代码在做的事:new 一个 RootBeer 对象,跑完全部检查后拿到一个结论。
🔍 一次真实 RootBeer root 检测调用长什么样
用户第一次打开 App,你在后台线程做了一次静默检测。isRooted()内部会依次做一串检查:是否装了 Magisk 这类常见 root 管理应用、常见路径下有没有su二进制、系统是不是工程版测试签名(test-keys)、系统分区是否被挂成可读写。任何一项命中就短路返回 true。它还会走 C++ 原生层再查一次 su,这一项比纯 Java 更难被隐藏。示例应用会把 12 项逐条跑完,这张图展示的是一台已 root 设备的真实结果:界面变红、大字 ROOTED,每项检测的命中状态单独列出。
注意返回值的含义:它是"指示",不是"判决"。false 不代表绝对没 root,可能被隐藏类工具藏住了;true 则基本可以认定设备有 root 迹象。
⚠️ 新手最容易踩的 3 个坑
主线程里直接调用
现象:检测时页面卡顿。原因:isRooted()有大量磁盘 I/O,要逐个路径找 su 文件,README 明确建议放后台线程。
launch { val rooted = withContext(Dispatchers.IO) { rootBeer.isRooted() } }把调用挪到 IO 线程,主线程专心刷 UI。
被 busybox 误报
现象:没 root 的一加、Moto E、OPPO R9m 用户被误判。原因:这些出厂固件自带 busybox 二进制(root 工具常用的瑞士军刀),旧版本默认查它导致误报,新版本已把 busybox 从默认isRooted()中移除。你确实需要这个信号时,单独调用isRootedWithBusyBoxCheck()。这是 RootBeer 误报处理最典型的场景。
把检测结果当判决
现象:用户明明 root 了,App 却放行了。原因:root 等于系统最高权限,隐藏类工具能藏住所有痕迹,库自己也声明结果只是指示。别把全部安全策略押在一个布尔值上,高风险场景搭配 Google Play Integrity API 一起用。
📁 仓库里哪几个目录值得先看
- Java 层检测逻辑主体,十项检查全在这
- root 应用包名常量表,扩展自己的名单就在这
- 原生层 su 检查的 C++ 实现
- 示例 App,后台调用和结果界面的参考
🧭 怎么选 / 怎么搭配
如果你的需求是本地、轻量、要个 root 指标——风控、设备合规、游戏反作弊——RootBeer 就够,几行代码接入。如果是支付级的高置信场景,首选 Google Play Integrity API,RootBeer 当本地第一道快速过滤。一快一慢搭配着上,比单押一个稳。
回到开头的问题:你还需要自己写 su 检测代码吗?不用,引依赖、后台线程调isRooted()就够了。下一步建议git clone https://gitcode.com/gh_mirrors/ro/rootbeer,跑一下示例 App 看真机上 12 项检测的命中情况;遇到误报先去 CHANGE_LOG.md 找线索。
【免费下载链接】rootbeerSimple to use root checking Android library and sample app项目地址: https://gitcode.com/gh_mirrors/ro/rootbeer
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考