在http://developer.android.com/guide/publishing/licensing.html上,在“替换复制保护”部分下面说:
Android电子市场上的旧版复制保护机制的限制 是使用它的应用程序只能安装在兼容的 提供安全内部存储环境的设备。对于 例如,无法从Market下载受版权保护的应用程序 到提供root访问权限的设备,而应用程序不能 安装到设备的SD卡上。
Android如何 - 同时弃用 - 复制保护检查设备是否已植根?根据Dianne Hackborn(见How can you detect if the device is rooted in the app?)的说法,这是不可能的。所以这只能意味着,检查是由一些(未知的公共)混淆标准检查完成的,显然不仅仅是简单检查'su'命令是否存在,我想。 有没有人更了解这种检查逻辑 - 或者它有多安全?
答案 0 :(得分:2)
这就是我使用的:
public static boolean isDeviceRooted () {
boolean ret = false;
String path = null;
Map<String,String> env = System.getenv();
if (env != null && (path = env.get("PATH")) != null) {
setDevicePath(path);
String [] dirs = path.split(":");
for (String dir : dirs){
String suPath = dir + "/" + "su";
File suFile = new File(suPath);
if (suFile != null && suFile.exists()) {
setSuLocation(suPath);
ret = true;
}
}
}
return ret;
}
理论上,它并不适用于所有情况,因为用户可以将'su'放在非标准位置,这不在PATH中,但实际上如果他这样做,其他应用程序需要知道在哪里'su'也不会找到它,因此生根的目的将被打败。
答案 1 :(得分:0)
虽然超级用户应用程序的存在并不是一个完美的方式来判断手机是否已根据它可能是一个漂亮的指示。为什么不检查包com.noshufou.android.su
是否已安装?
我从未尝试过,但我不明白为什么它不起作用。
答案 2 :(得分:0)
我们会在销售信息中明确说明该应用不会在有根设备上运行。
这肯定会影响您的安装率。虽然你打算以1000美元的价格出售你的应用程序,但这比其他任何东西都要糟糕得多。