我想在我的应用中检查设备是否有自定义ROM。有了这个,我启用并禁用了我的应用程序中的一些功能。请帮帮我。
答案 0 :(得分:1)
System.getProperty("os.version"); // OS version
android.os.Build.VERSION.SDK // API Level
android.os.Build.DEVICE // Device
android.os.Build.MODEL // Model
android.os.Build.PRODUCT // Product
使用此功能,然后将其与Google图片进行比较。此外,几乎99%的自定义ROM都已植根,因此您可以检查设备是否已植根。 RootTools库提供了检查root的简单方法:
RootTools.isRootAvailable()
您可以参考以下链接了解更多详情 How to find out who the ROM provider is? 对于RootTools,请使用以下链接
答案 1 :(得分:0)
在代码中检查这些属性,然后将其与Google图片进行比较。
System.getProperty("os.version"); // OS version
android.os.Build.VERSION.SDK // API Level
android.os.Build.DEVICE // Device
android.os.Build.MODEL // Model
android.os.Build.PRODUCT // Product
几乎所有自定义ROM都是root用户,因此您还可以检查设备是否已植根。下面是检查root的代码。
public static boolean isRooted() {
// get from build info
String buildTags = android.os.Build.TAGS;
if (buildTags != null && buildTags.contains("test-keys")) {
return true;
}
// check if /system/app/Superuser.apk is present
try {
File file = new File("/system/app/Superuser.apk");
if (file.exists()) {
return true;
}
} catch (Exception e1) {
// ignore
}
// try executing commands
return canExecuteCommand("/system/xbin/which su")
|| canExecuteCommand("/system/bin/which su") || canExecuteCommand("which su");
}
// executes a command on the system
private static boolean canExecuteCommand(String command) {
boolean executedSuccesfully;
try {
Runtime.getRuntime().exec(command);
executedSuccesfully = true;
} catch (Exception e) {
executedSuccesfully = false;
}
return executedSuccesfully;
}
PS - 模拟器是一个有根的设备。在实际设备上测试
答案 2 :(得分:0)
尝试使用 Google 的 Saftynet 服务(它检测引导加载程序是否已解锁,要安装自定义 Rom 引导加载程序必须解锁)...它可以被欺骗,但没有多少用户知道如何做到这一点。如果您只检测到 root,则当股票被 root 时,该应用也不会在股票 Rom 上运行。