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_providerdart: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%准确。

回到顶部