RootTools文档翻译:用法,Usage
本文说明的是,RootTools 库都提供了哪些方法,以及,该如何使用它们。下面所说的所有东西,都可能在任何时候发生变化,事实上,它们一定会变化。这个库,经常发生变化,每次都变得更好。当我们引入变更时,我们会尽量减轻妳的痛苦。
欲知RootTools 库中所有方法的详细信息,请参考此文档:
http://roottools.googlecode.com/svn/trunk/Developmental/doc/index.html
在妳的项目中包含RootTools 库,这样,妳才能使用它。这个过程其实狠简单!
1. 在Eclipse中,右键单击妳的项目,切换到“构建路径”("Build Path"),然后切换到“配置构建路径”("configure build path")
2.现在选择“添加外部Jar”("add External Jar")
3.找到妳所下载的RootTools .jar 文件,然后选中它。
4.切换到“排序及导出”("Order and Export"),确保这个库旁边的复选框处于选中状态,然后,将它移动到列表的顶部。
5.点击“确定”("ok")以使配置生效
这就好了!现在 ,在妳的安卓项目中,就可以使用这个库了。现在 ,妳的安卓项目中已经有了这个库, 妳所需要做的,就是在需要用到它的java 文件中导入(import)它。具体做法 就是, 在java 文件的顶部,应用程序 包 名的下面,加上 import com.stericson.RootTools.* 或 import com.stericson.RootTools.RootTools 。
要开启/关闭调试模式,则,在妳的应用程序代码中加入以下代码:
RootTools.debugMode = true; // 开启
或
RootTools.debugMode = false; // 关闭
这个方法,允许妳在开启调试模式的情况下输出调试信息。这样,妳就可以在妳的应用程序中加入一个调试选项,默认情况下出于性能考虑而关闭它。然而,当妳需要调试信息时,简单地切换一个开关就可以启用它,并且得到详细的日志信息。
这个方法,会根据RootTools.debugMode 的值来判断,是否要将妳传递给它的消息输出到日志中。妳可以直接使用它,而无需亲自处理那些琐事。
可以按照以下方式来使用日志功能:
RootTools.log("this is a log message"); // 这条日志消息的标记值( TAG )将会是 "RootTools"
或
RootTools.log("OurTag", "this is a log message");
这个方法,默认会调用log.d,因为,它的用意本来就是调试。
如果妳想改变日志的类型,那么,可以这样:
log(TAG, msg, 3, null);
此处,妳可以传入:对该条日志消息使用的标记值(TAG);消息本身;日志类型;以及,附带传递的异常。
以下是可用的类型:
1 = log.v
2 = log.e
3 = log.d
Busybox,可能是root 开发者的工具库里唯一最有用的工具了。问题是,并非每个系统镜像(ROM)中都默认安装了busybox。RootTools库中提供了一个用于检测busybox 的方法。用起来狠简单:
if (RootTools.isBusyboxAvailable()) {
// busybox存在, 做点什么吧
} else {
// 做点别的
}
建议 的做法是,如果 busybox 不存在,那么, 妳应当提醒用户 ,并且 向它们提供一种安装手段 ,例如让它们利用市场中的 http://market.android.com/details?id=stericson.busybox 应用来安装。 RootTools 也为此提供了一个便利。 妳有两种选择:
RootTools.offerBusyBox(activity);
或
Intent intent = RootTools.offerBusyBox(activity, requestCode);
第一种方法,只是简单地启动一个意图,该意图会打开BusyBox 应用的市场页面。第二种方法,做的是同一件事,只不过,它使用的是startActivityForResult(),这样,妳可以得知用户在市场应用中究竟做了什么。当使用第二种方法时,requestCode参数就跟直接调用startActivityForResult()时使用的参数一样,所返回的意图(Intent),也跟直接调用该方法时返回的意图一样。两个方法,其参数中都要求有一个活动(Activity),妳应当传入调用此方法的活动本身。
su就是用来赋予root 权限的二进制程序。通常,手机上发现了这个文件,就表明该手机已被root。妳可以使用以下方法来检测su 二进制文件是否存在:
if (RootTools.isRootAvailable()) {
// su存在, 做点什么
} else {
// 做点别的
}
注意,这个方法只检测su是否存在。还可以采用以下方法来做一个更完整的检查:
if (RootTools.isAccessGiven()) {
// 妳的应用程序已经被赋予 root权限
}
RootTools.isAccessGiven() 不仅仅检测某个设备是否已被 root , 还会为妳的应用程序调用 su ,请求获取权限 , 并在妳的应用程序被赋予root 权限 时返回真(true)。 当妳需要root权限时,可以首先 使用这个方法来进行检测,以确保 妳确实获得了权限。
如果妳需要向SD 卡上写入东西,那么,最好是先做个检测,看看是否还有可用空间。RootTools也提供了一个简单的方法,用于做这种检测:
if (RootTools.hasEnoughSpaceOnSdCard(updateSize)) {
// 有足够的存储空间,该干嘛干嘛吧
} else {
// 存储空间 不够,使用备用方案?
}
这个方法,要求一个长整型(long)参数,表示的是,妳需要多少个存储块(blocks)的空间,如果存在足够的空间并且SD 卡可写入则返回真(true)。如果SD 卡已被用户挂载,则此方法会返回假(false)。
以root 身份运行命令,狠简单!以下是一个示例:
Command command = new Command(0, "echo this is a command", "echo this is another command");
try {
RootTools . getShell( true ) . add(command);
}catch (IOException | RootDeniedException | TimeoutException ex) {
ex . printStackTrace();
}
妳应该已经发现了,利用这些代码,妳可以运行任意数量的命令。
如果妳想记录妳所运行的命令的输出内容,那么,可以使用以下代码:
Command command = new Command(0, "echo this is a command", "echo this is another command")
{
@Override
public void commandOutput( int id, String line) {
super . commandOutput(id, line);
}
@Override
public void commandTerminated( int id, String reason) {
super . commandTerminated(id, reason);
}
@Override
public void commandCompleted( int id, int exitcode) {
super . commandCompleted(id, exitcode);
}
};
RootTools.getShell(true).add(command);
未知美人
Your opinionsHxLauncher: Launch Android applications by voice commands