有个大前提就是设备已经root了。
adb是什么?
adb的全称为Android Debug Bridge,就是起到调试桥的作用。通过adb我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具。adb的工作方式比较特殊,采用监听Socket TCP 5554等端口的方式让IDE和Qemu通讯,默认情况下adb会daemon相关的网络端口,所以当我们运行Eclipse时adb进程就会自动运行。
adb有什么用?
借助adb工具,我们可以管理设备或手机模拟器的状态。还可以进行很多手机操作,如安装软件、系统升级、运行shell命令等等。其实简而言说,adb就是连接Android手机与PC端的桥梁,可以让用户在电脑上对手机进行全面的操作
1.连接设备
adb connect 192.168.22.232
2.断开连接的设备
adb disconnect
这里说一个小技巧:
我们不用一个一个字母输入路径,直接把你的apk文件,拖到到cmd界面光标处即可!
3.安装apk
adb install C:\Users\lg\Desktop\adb_install\app-debug.apk
4 覆盖安装apk
adb install -r C:\Users\lg\Desktop\adb_install\app-debug.apk
5 卸载apk
adb uninstall so.laodao.xxx (apk的包名)
6.查看系统应用
adb shell ls system/app
7.查看设备上第三方应用
adb shell ls data/app
8.获取系统权限
adb remount
9.获取系统权限
adb shell chmod 777 system/app
10.重启设备
adb reboot
11.把应用push到系统中
adb push xxx.apk system/app
12.删除系统应用
adb shell rm system/app/xxx.apk
13.查看电脑中有几个adb程序
where adb
14.发布端口: 你可以设置任意的端口号,做为主机向模拟器或设备的请求端口。如:
adb forward tcp:5555 tcp:8000
15.修改adb的端口号:
在系统变量中,新建一个变量:ANDROID_ADB_SERVER_PORT,然后设置端口号即可,最后要重新开启一个dos窗口。不要与系统其它端口冲突。
如图:
16:查看所有程序包名
adb shell pm list packages
17:查询手机cpu命令行:
adb shell getprop ro.product.cpu.abi
18:查看真实系统版本:
adb shell getprop ro.build.verison.release
19:查看真实分辨率:
adb shell wm size
20:查看真实内存:
adb shell df -h
21:查看cpu相关信息
adb shell cat /proc/cpuinfo
22:查看厂商都对系统都进行了那些修改(可能会被拒绝):
adb shell cat /system/build.prop
终端中输入一下命令:
su
setprop service.adb.tcp.port 5555
stop adbd
start adbd
1、计算机-属性-高级-环境变量,新建系统环境变量
变量名:ANDROID_ADB_SERVER_PORT
变量值:5555
2、重启一下电脑,最好重启一下电脑!
3、运行CMD
输入 adb connect Android设备的IP地址
参考文章:
全程不用usb数据线,adb通过网络连接Android设备.rar
当手机安装完成apk之后,可以通过如下方法启动apk:(pkg:包名)
1.通过命令 adb shell am start -n pkg/.MainActivity
2.通过 adb shell monkey -p pkg -v 1(优先)
3.通过 adb shell am start -a android.intent.action.MAIN -c android.intent.category.LAUNCHER -n pkg/.MainActivity
adb 对数据库的操作:
清空本地数据库:adb shell rm -r data/data/pkg/databases
查看本地数据库:adb shell ls data/data/pkg/databases
拉取数据库:adb pull data/data/pkg/databases/表名
强制关闭一个应用程序:
adb shell am force-stop pkg
端口被占用,查看是谁在占用端口,并且kill掉该进程的方法:
方式一
5037为adb默认端口,若5037端口被占用,
查看占用端口的进程PID
C:\Users\wwx229495>netstat -aon|findstr 5037
TCP 127.0.0.1:5037 0.0.0.0:0 LISTENING 3676
通过PID查看所有进程
C:\Users\wwx229495>tasklist /fi “PID eq 3676”
映像名称 PID 会话名 会话# 内存使用
========================= ======== ================ =========== ============
svchost.exe 3676 Services 0 13,800 K
杀死占用端口的进程
C:\Users\wwx229495>taskkill /pid 3676 /f
成功: 已终止 PID 为 3676 的进程。
手机终端连接命令:(是在手机端输入的)
su
setprop service.adb.tcp.port -1
stop adbd
start adbd
####如果没有root怎么办呢?不过还是有办法的!
C:\Users\zhyantai>adb shell
shell@X3:/ $ run-as com.example.daemon(你的包名)
shell@X3:/data/data/com.example.daemon $ ls
cache
code_cache
program_cache
shared_prefs
shell@X3:/data/data/com.example.daemon $ cd shared_prefs
//将special_config(你的文件名)文件拷贝到/mnt/sdcard/目录下
shell@X3:/data/data/com.example.daemon/shared_prefs $ cat special_config.xml > /mnt/sdcard/special_config.xml
shell@X3:/data/data/com.example.daemon/shared_prefs $
//最后,从sdcard目录下,pull文件。注意,去该目录下,并不能看到special_config该文件。但是它是存在的。
C:\Users\zhyantai>adb pull /mnt/sdcard/special_config.xml
[100%] /mnt/sdcard/special_config.xml
常用DOS命令:
cd
cd 目录名:进入特定的目录。如果看到有个目录显示为:abcdef ghi 就
输入:cd abcdef.ghi进入该目录。
cd\ 退回到根目录。
cd…退回到上一级目录。
notepad--------打开记事本
前提你的设备是要获取 root 权限的哦!
方法一:
public class MainActivity extends AppCompatActivity {
private static Timer timer1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
timer(3000);
}
});
}
//used to alert UI of install done and then reboot., not perform it until timeout.
//in order to have enough time for the transfer.
public static void timer(int delaytime) {
timer1 = new Timer();
timer1.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("now, reboot");
execShell("reboot");
}
}, delaytime);
}
//关键方法
public static void execShell(String cmd) {
try {
//权限设置
Process p = Runtime.getRuntime().exec("su");
//获取输出流
OutputStream outputStream = p.getOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
//将命令写入
dataOutputStream.writeBytes(cmd);
//提交命令
dataOutputStream.flush();
//关闭流操作
dataOutputStream.close();
outputStream.close();
} catch (Throwable t) {
t.printStackTrace();
}
}
方法二:
关键代码如下:
public static void reBootByRuntime() {
try {
Log.v("reBootByRuntime", "root Runtime->reboot");
Process proc = Runtime.getRuntime().exec(new String[]{"su", "-c", "reboot "}); //重启
proc.waitFor();
} catch (Exception ex) {
ex.printStackTrace();
}
}
以上两种方法,都是能让你的设备重启的!如果觉得对你有点用的话,就给点个赞吧,,
adb devices
adb shell monkey -p site.conit.app.blackboard --throttle 1000 100
adb shell monkey -p site.conit.app.blackboard -s 100 --throttle 1000 100
adb shell monkey -p site.conit.app.blackboard --pct-touch 100 -s 100 --throttle 1000 100
命令说明:
--throttle 1000 事件执行间隔为1秒
-s 100 seed 参数,指定随机生成数seed值,意思是:可以让执行的事件每次都一样
--pct-touch 100 触摸事件占比100%。 --pct-touch ,设定触摸事件的百分比
--pct-appswitch 40 切换activity事件占比40%。
--pct-motion 30 点击事件占比30%。
--ignore-crashes 忽略崩溃和异常
--ignore-timeouts 忽略超时事件ANR