确定Android设备是否以编程方式生根?

可能重复:
确定是否在根设备上运行

你如何确定(编程)如果Android设备是:rooted运行一个破解的软件或ROM副本。

我在我的数据库中有一些敏感信息,我想encryption它,当电话根源也就是用户有权访问数据库。 我如何检测?

Solutions Collecting From Web of "确定Android设备是否以编程方式生根?"

这是你需要的:

/** * Checks if the device is rooted. * * @return <code>true</code> if the device is rooted, <code>false</code> otherwise. */ 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; } 

可能不总是正确的。 testing〜10台设备。

如果信息是敏感的,你应该只为所有用户encryption。 否则,用户可以安装你的应用程序,然后根据数据写入后读取你的数据库。

官方许可指南说:

Android电子市场中的传统拷贝保护机制的限制是,使用它的应用程序只能安装在提供安全内部存储环境的兼容设备上。 例如,受拷贝保护的应用程序无法从市场下载到提供根访问的设备,并且应用程序不能安装到设备的SD卡。

看来,您将从使用传统的cop-protection来防止您的应用程序安装在根目录的设备上受益。

您可能会发布一个单独的版本,该版本可以使用encryption的数据库安装在根设备上。