flutter如何检测安卓root
在Flutter开发中,如何检测当前运行的Android设备是否已root?希望能提供一个可靠的实现方法,最好能兼容不同Android版本,并避免误判。
2 回复
在Flutter中检测Android设备是否root,可以通过flutter_root_check插件实现。安装插件后,调用FlutterRootCheck.isRooted()方法即可返回布尔值,判断设备是否已root。
更多关于flutter如何检测安卓root的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中检测Android设备是否已root,可以通过以下方法实现:
1. 检查Root相关文件
使用path_provider和dart:io检查常见root文件:
import 'dart:io';
import 'package:path_provider/path_provider.dart';
Future<bool> isRooted() async {
List<String> rootPaths = [
'/system/app/Superuser.apk',
'/sbin/su',
'/system/bin/su',
'/system/xbin/su',
'/data/local/xbin/su',
'/data/local/bin/su',
'/system/sd/xbin/su',
'/system/bin/failsafe/su',
'/data/local/su'
];
for (String path in rootPaths) {
if (await File(path).exists()) return true;
}
return false;
}
2. 检查Build Tags
通过build.prop中的标签检测:
Future<bool> checkBuildTags() async {
try {
File buildProp = File('/system/build.prop');
String contents = await buildProp.readAsString();
return contents.contains('ro.debuggable=1') ||
contents.contains('ro.build.tags=test-keys');
} catch (e) {
return false;
}
}
3. 执行su命令测试
import 'dart:io';
Future<bool> testSuCommand() async {
try {
ProcessResult result = await Process.run('su', ['-c', 'echo test']);
return result.exitCode == 0;
} catch (e) {
return false;
}
}
4. 使用flutter_native_device插件
在pubspec.yaml中添加:
dependencies:
flutter_native_device: ^1.0.0
调用原生代码检测(需要分别实现Android/iOS原生代码)。
注意事项:
- 这些方法可能被高级root工具绕过
- 部分方法需要文件读取权限
- 建议组合多种检测方式提高准确性
- 在非root设备上执行su命令可能抛出异常
最终检测函数示例:
Future<bool> checkRootStatus() async {
return await isRooted() ||
await checkBuildTags() ||
await testSuCommand();
}
这些方法可以较准确地检测常见root情况,但无法保证100%准确。

