在android中通过java层程序调用命令行的一些备注

来源:互联网 发布:最好的桌面主题软件 编辑:程序博客网 时间:2024/05/16 13:47

能调用哪些命令?


一般性的, 最常用的命令都能调用, 比如cat, cp, top, ls, ps命令, 但用法和linux上的有较大区别, 可通过–help/-h查询具体的命令用法;
我熟知linux terminal命令行, 但如何知道android都有哪些常用命令呢?
首先, 需要知道默认android使用toolbox提供扩展命令, 里面内置的命令少的可怜, 不同api版本也不同, 具体有哪些, 可以针对对应版本通过adb shell命令连接真机或模拟器测试, 也可以查看https://android.googlesource.com/platform/system/core/+/对应版本/toolbox/目录下的罗列;
其次, 有些定制机型采用了busybox代替toolbox, busybox提供了非常丰富的unix命令集, 可谓麻雀虽小但五脏俱全, 那么也可针对这种机型使用更确实的命令, 但我目前的观点是, toolbox支持的命令, busybox都支持, 也就是如果想要兼容, toolbox是最小的子集;
再次, 回到toolbox上, 我们还需要知道, 从android源码的变迁来看, 4.2及其以后提供了grep命令, 5.0开始使用netbsd的一个bin子集代替自己的实现, 包括grep, 6.0则换成了toybox(在源码的external/toybox/)来提供grep/cp等命令的实现, 后面可能还会发生变化;
最后, shell内置的命令, 如pwd, echo等在4.0-4.4上还在/system/core/sh/builtins.c里, 但到5.x上不知道在哪里实现了, 很囧啊, 有知道的还望告诉我啊. 6.0则一并挪到了external/toybox/toys/posix/下;

java层程序怎么调用?


确认能调用某个命令后, 怎么在程序中调用呢? 这里我只想提及两点:
1. 测试是否有此权限;
2. 使用

Runtime.getRuntime().exec(new String[]{"sh", "-c", "top -t -n 1 -d 0"});

代替

Runtime.getRuntime().exec("top -t -n 1 -d 0");
0 0
原创粉丝点击