黑阈包含两部分,黑阈界面和一直运行的黑阈服务。黑阈服务以 shell 身份运行,由事件日志驱动,同时接受黑阈界面管理。2.6.1 之前,只有黑阈界面有权限访问黑阈服务。
2.6.6 起,黑阈提供一个实验性的功能,执行指令。
用户可以通过桌面快捷方式选择执行指令,或者设置中选择执行指令进入。开发者可以通过 API 直接进入并指定相应指令:
final String action = "me.piebridge.brevent.intent.action.COMMAND";
final String extra = "me.piebridge.brevent.intent.extra.COMMAND";
final String command = ""; // 指令内容
Intent intent = new Intent(action);
intent.putExtra(extra, command);
// 不建议指定包名,黑阈编译版包名与发布版不一样
List<ResolveInfo> ris = getPackageManager().queryIntentActivities(intent, 0);
if (ris != null && !ris.isEmpty()) {
startActivity(intent);
}
黑阈服务像 supersu 一样运行这个指令:
sh
${command}
exit
Root 环境下,
sh
将换成su shell
执行指令有以下限制:
不允许包含2.6.8 起支持&
&
将会把指令放入后台,可能没有任何输出。不允许单独的指令
sh
或su
,这明显是一个交互型指令如果黑阈服务以 Root 运行,
指令直接替换成2.8.3 起使用id
,不会实际执行su shell
后再运行如果黑阈界面移到后台,黑阈服务会强行杀掉这个指令