转自百度贴吧

最近折腾黑苹果和那个狗摩的mb886,用了下终端,发现c4droid也可以玩终端(其实我早就知道了),早就想写一个帖子了,打算和大家分享一下这方面的知识,现在我打算介绍以下方面:
1.玩转终端模拟器
2.命令介绍
3.用c4droid生成有终端命令的apk
4.应用实际举例

1.关于终端模拟器
Q1:什么是终端模拟器?
A1:终端模拟器是android上的CMD,有了它,我们可以在Android上进行Linux系统的命令操作,你把这个命令放到c4droid里system(“命令”);,然后输出成apk(下面有教程),就可以使用它了。
Q2:下载地址?
A2:置顶网盘有,自己翻吧,也可以去市场搜索“terminal emulator”

2.命令介绍
首先说下我的环境,我是mb886刷的android4.4,android不同的版本可能文件结构不同。
另外要介绍一下android的文件目录:
/ 根目录
/mnt/sdcard 内置sd卡位置
/mnt/external_sd 外置sd卡位置(据我所知这个位置与4.0的系统不一样,你可以用es浏览器去mnt目录里看看)
/data/app 用户安装app位置
/system/app 系统内置app位置
剩下的东西就不敢动了,我们只学这4个。
现在开始吧,打开终端。
输入命令:echo "hello",看到下面的hello了吗,恭喜,这就是你第一个命令。
我们来试试输入命令: cd /mnt/sdcard (跳到/mnt/sdcard里)
然后输入:ls (list出sdcard 里所有的东西)
这里就是这样,看看熟悉不?这就是内置sdcard的目录,恭喜,这是第二个命令。



命令:echo
功能说明:显示文字,和printf相似
语 法:echo [-ne][字符串]
例子:
1.echo hello :输出hello
2.echo -e “\033[42;37m 绿底白字 \033[0m” 输出“绿底白字”,颜色有些变化
具体的大家去:http://hi.baidu.com/andimeo/item/ed9163561be1ac13db16352d 这里看吧


命令:cd “你想要进的目录” //当目录名称中含有空格、中文或其它特殊字符时请用双引号包括
命令:ls list的缩写,可以列出目录
常用写法 :cd / 代表根目录,cd . 表示当前目录,cd .. 表示上级目录
例子:cd /mnt/sdcard,然后再ls,就可以输出目录


命令:mkdir
作用:新建文件夹
例子:mkdir /mnt/sdcard/backup
在sd卡的sdcard上建立一个backup的文件夹
还有一种方法是:
1.cd /mnt/sdcard
2.mkdir backup


命令:cp cp指令是用于复制文件或目录,是copy的缩写
语法:cp [-参数] a b //把a复制到b
例子:在sd卡建立back文件夹,把用户安装的pk备份到sd卡的back里(要先root才可以)
su //点同意root权限,没有这步他会说没有找到data文件夹
mkdir /mnt/sdcard/back //建立文件夹
cp /data/app/* /mnt/sdcard/back //复制文件过去,这时手机会比较卡
这样就完成了一个备份,是不是比某些管家助手快多了?
我们可以更加优化一下,加入参数 -f ,作用是当目录有重复的文件,直接替换,这样当你升级软件后向再次备份时,就可以替换旧文件了命令:cp cp指令是用于复制文件或目录,是copy的缩写语法:cp [-参数] a b //把a复制到b
例子:在sd卡建立back文件夹,把用户安装的pk备份到sd卡的back里(要先root才可以)
su //点同意root权限,没有这步他会说没有找到data文件夹
mkdir /mnt/sdcard/back //建立文件夹
cp /data/app/* /mnt/sdcard/back //复制文件过去,这时手机会比较卡
这样就完成了一个备份,是不是比某些管家助手快多了?
我们可以更加优化一下,加入参数 -f ,作用是当目录有重复的文件,直接替换,这样当你升级软件后向再次备份时,就可以替换旧文件了


命令:rm
作用:删除(慎用,请百度“rm 血的教训”)
语法:rm [-参数] 路径
例子:清空sd卡,不作死就不会死
rm -rf /mnt/sdcard/* 理论上是这样,我可没有试过
大家还可以试下rm -rf /system ,我也没有试过!!死机不管我事!


mv
1.作用

mv命令用来为文件或目录改名,或者将文件由一个目录移入另一个目录中,它的使用权限是所有用户。该命令如同DOS命令中的ren和move的组合。
2.格式
mv[options] 源文件或目录 目标文件或目录
3.[options]主要参数
-i:交互方式操作。如果mv操作将导致对已存在的目标文件的覆盖,此时系统询问是否重写,要求用户回答“y”或“n”,这样可以避免误覆盖文件。
-f:禁止交互操作。mv操作要覆盖某个已有的目标文件时不给任何指示,指定此参数后i参数将不再起作用。
4.应用实例
(1)将/usr/cbu中的所有文件移到当前目录(用“.”表示)中: $ mv /usr/cbu/ * .
(2)将文件cjh.txt重命名为wjz.txt: $ mv cjh.txt wjz.tx


文件的基本介绍完了,现在开始玩关机命令:
su
halt
要root才可以,不然permission denied

接下来是重启:
su
reboot
同样要root

接下来是进入recovery模式(就是刷update.zip的模式)
su
reboot recovery
手机已经被我关了3次了.....

接下来是打开另一个程序的命令,直接把 @傻傻_痴痴 的给转了,我估计也写不了这么好.....

利用终端命令启动另一个程序——am start命令
我们先来看看am statr的基本使用格式
am start -n {打开程序的包名}/{包名.Activity}

activity就是一个活动,比如跳转到另一个窗口就相当于跳转到另一个activity。
这里如果对安卓的Activity了解的话那就更好。
那我们如何去获取包名和程序Activity呢?
那就需要我们查看安装包里的AndroidManifest.xml文件
我们以QQ4.5版本为例子
用RE管理器找到qq的安装包
点击查看,可以马上看到这个文件,我们直接点击打开,然后看到里面
我们看到很多密密麻麻的代码,其实很容易理解
找到以下格式的代码
<activity name="XXX.XXX" >
</activity>
XXX.XXX就是活动的名称,就是我们要启动的
而有的程序的activity是很多个的,我们需要通过名字来理解找到我们想要的activity(最好英语好点)
这里启动QQ的代码
am start -n com.tencent.mobileqq/com.tencent.mobileqq.activity.SplashActivity
splash就是qq启动的第一张图片,我们可以用来启动QQ。
再来试试其他
打开QQ的关于版本信息:
am start -n com.tencent.mobileqq/com.tencent.mobileqq.activity.AboutActivity
打开QQ聊天背景设置:
am start -n com.tencent.mobileqq/com.tencent.mobileqq.activity.ChatBackgroundSettingActivity
自己再去试试其他activity看看,会有意外惊喜哦。(当然乱启动一个程序的activity也有可能会导致崩溃)
另外程序参考例子:
打开系统设置:
am start -n com.android.settings/com.android.settings.SubSettings
打开系统音乐
am start -n com.android.music/com.android.music.AlbumBrowserActivity
这里不举例第三方应用是因为有的童鞋可能没有安装
关于am start的用法还可以延伸到intent,action等等,让某个应用执行某些操作,比如发送邮件分享等等,这里涉及到安卓的开发知识,我就不多讲了