现在我正在做类似下面的事情来以root身份执行命令。但整个事情似乎有点手动,所以我搜索了一下,找到了roottools。这是推荐的方式还是有更好的方式?
我希望能够等待命令完成、读取输出和 ret val。
public static void deleteSystemApp(Context context, String app)
{
final String MOUNT_RW = "mount -o remount,rw -t rfs /dev/stl5 /system; \n";
final String MOUNT_RO = "mount -o remount,ro -t rfs /dev/stl5 /system; \n";
final String RM_APP = "rm -rf " + app + "; \n";
Process process;
try
{
process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.writeBytes(MOUNT_RW);
Toast.makeText(context, RM_APP, Toast.LENGTH_SHORT).show();
//os.writeBytes(RM_APP);
os.writeBytes(MOUNT_RO);
}
catch(IOException e)
{
e.printStackTrace();
}
}
关于 Chris Stratton 指出的问题的更新:我已经对我的 app 参数进行了 urlencoding,以确保没有人可以通过诸如“something; rm -rf /”或“something && rm -rf /”之类的东西并擦除设备。但经过进一步考虑,我完全放弃了清理争论的想法。并删除了我的那部分代码。为什么?
- 为什么有人要对自己的设备执行此操作?
- 如果其他人能够传递恶意参数,则该设备已经受到威胁。