背景:项目采用安卓广告机,适配原内容管理控制播放系统,系统运行稳定。换装咱们的APP,设备会出现不定时的批量的设备重启。java
分析:APP在测试环境一切OK,在生产环境依旧会出现小批量的不按期重启git
发现:关闭设备中的“看门狗”选项,设备一切使用正常,无重启现象。联系厂家,厂家反馈---看门狗为设备异常的底层守护程序,关闭可能致使系统或者硬件损坏。不建议关闭。shell
解决办法:生产环境,安装日志收集工具APP,收集系统异常日志,进行分析处理。网络
1.因为设备运行于内网环境,因此没法使用TeamView等远程软件,何况前提是安装TeamView QuickSupport,因为墙的存在,安装估计要花些力气。app
2.采用ADB 网络链接的方式,远程控制广告机,安装异常日志收集APP,等待重启,而后整理logless
3.ADB操做方法ide
Windows环境下,下载ADBTools,一共1M不到,解压相应文件到指定文件夹。工具
cmd环境下:adb connect ip:port测试
1. 显示当前运行的所有模拟器:
adb devicesui
2. 安装应用程序:
adb install -r 123.apk
3. 获取模拟器中的文件:
adb pull <remote> <local>
4. 向模拟器中写文件:
adb push <local> <remote>
5. 进入模拟器的shell模式:
adb shell
6. 缷载apk包:
adb shell
cd data/app
rm 123.apk
exit
adb uninstall 123.apk
adb install -r 123.apk
7. 查看adb命令帮助信息:
adb help
8. 删除系统应用:
adb remount (从新挂载系统分区,使系统分区从新可写)。
adb shell
cd system/app
rm 123.apk
9. 获取管理员权限:
adb root
十、复制文件:
复制一个文件或目录到设备:
adb push <source> <destination></destination></source>
如:adb push update.zip /sdcard/
从设备上复制一个文件或目录:
adb pull <source> <destination></destination></source>
如:adb pull /sdcard/update.zip.
十一、取得当前运行设备的实例的列表及每一个实例的状态:
adb devices
十二、 #cd system/sd/data //进入系统内指定文件夹
cd .. 返回上一级目录
cd ../.. 返回上两级目录
cd 进入我的的主目录
cd ~user1 进入我的的主目录
cd - 返回上次所在的目录
#ls //列表显示当前文件夹内容
#rm -r xxx //删除名字为xxx的文件夹及其里面的全部文件
#rm xxx //删除文件xxx
#rmdir xxx //删除xxx的文件夹
#mkdir -p xxx //递归建立xxx的文件夹
#cp [选项] [来源文件] [目的文件],-d 复制一个快捷方式/-r 复制一个目录/-i 对一个存在的文件,询问是否覆盖
#mv [选项] [来源文件] [目标文件],-u 目标文件存在时才会生效,若是源文件比目标文件新才会移动/-i 对一个存在的文件,询问是否覆盖;
#cat 经常使用命令,即查看一个文件的内容并显示在屏幕上。
more 也是用来查看一个文件的内容。当文件内容太多,一屏幕不能占下,使用more当看完一屏后按空格键继续看下一屏。看完全部内容后就会退出。若是你想提早退出,只需按q键便可。
less 做用跟more同样,但比more好在能够上翻,下翻。空格键一样能够翻页,而按”j”键能够向下移动(按一下就向下移动一行),按”k”键向上移动。在使用more和less查看某个文件时,你能够按一下”/” 键,而后输入一个word回车,这样就能够查找这个word了。若是是多个该word能够按”n”键显示下一个。另外你也能够不按”/”而是按”?”后边一样跟word来搜索这个word,惟一不一样的是,”/”是在当前行向下搜索,而”?”是在当前行向上搜索。
解决方案:使用程序批量运行ADB,以达到批量操做,下面贴出源码
import java.io.IOException; import java.util.Arrays; /** * @Description: * @User: Administrator * @Date: 2018/7/30 0030 */ public class Adb { String adbPath = "adb"; String packageName = "cn.firegod.study.myapplication"; String activityName = "MainActivity"; String app = "/Users/yangyan/git/MyApplication/app/build/outputs/apk/debug/app-debug-ckp.apk.apk"; enum Command { CONNECT, INSTALL_APP, UNINSTALL_APP, REBOOT, START_APP, STOP_APP, CLEAN_APP, WAIT } private void connect(String host) { String cmd = adbPath + " connect " + host; try { Process exec = Runtime.getRuntime().exec(cmd); } catch (IOException e) { e.printStackTrace(); } } private void install(String host, String apkCkpFile) { String cmd = adbPath + " -s " + host + " install " + apkCkpFile; try { Process exec = Runtime.getRuntime().exec(cmd); } catch (IOException e) { e.printStackTrace(); } } private void uninstall(String host, String packageName) { String cmd = adbPath + " -s " + host + " uninstall " + packageName; try { Process exec = Runtime.getRuntime().exec(cmd); } catch (IOException e) { e.printStackTrace(); } } private void start(String host, String packageName, String activity) { String cmd = adbPath + " -s " + host + " shell am start " + packageName + "/." + activity; try { Process exec = Runtime.getRuntime().exec(cmd); } catch (IOException e) { e.printStackTrace(); } } private void stop(String host, String packageName) { String cmd = adbPath + " -s " + host + " shell am force-stop " + packageName; try { Process exec = Runtime.getRuntime().exec(cmd); } catch (IOException e) { e.printStackTrace(); } } private void clearData(String host, String packageName) { String cmd = adbPath + " -s " + host + " shell pm clear " + packageName; try { Process exec = Runtime.getRuntime().exec(cmd); } catch (IOException e) { e.printStackTrace(); } } private void reboot(String host) { String cmd = adbPath + " -s " + host + " reboot"; try { Process exec = Runtime.getRuntime().exec(cmd); } catch (IOException e) { e.printStackTrace(); } } /** * 一个 host 执行多个 cmd * * @param host * @param cmds */ private void batchCmd(String host, Command... cmds) { for (Command cmd : cmds) { executeCmd(cmd, host); } } /** * 多个 host 执行一个 cmd * * @param cmd * @param hosts */ private void batchHost(Command cmd, String... hosts) { for (String host : hosts) { executeCmd(cmd, host); } } private void executeCmd(Command cmd, String host) { switch (cmd) { case CONNECT: //链接 this.connect(host); break; case STOP_APP: this.stop(host, packageName); break; case CLEAN_APP: this.clearData(host, packageName); break; case UNINSTALL_APP: this.uninstall(host, packageName); break; case INSTALL_APP: this.install(host, app); break; case START_APP: this.start(host, packageName, activityName); break; case REBOOT: this.reboot(host); break; case WAIT: this.sleep(2000); break; default: System.out.println("命令不认识"); } } private void sleep(int millis) { try { Thread.sleep(millis); } catch (InterruptedException e) { e.printStackTrace(); } } public static void main(String[] args) { Adb adb = new Adb(); // 一楼柱子屏 6.10 - 6.20 String[] layer_1_zhuzi = new String[]{ "172.16.6.10", "172.16.6.11", "172.16.6.12", "172.16.6.13", "172.16.6.14", "172.16.6.15", "172.16.6.16", "172.16.6.17", "172.16.6.18", "172.16.6.19", "172.16.6.20" }; // 一楼窗口屏 7.10 - 7.42 String[] layer_1_ck = new String[]{ "172.16.7.10", "172.16.7.11", "172.16.7.12", "172.16.7.13", "172.16.7.14", "172.16.7.15", "172.16.7.16", "172.16.7.17", "172.16.7.18", "172.16.7.19", "172.16.7.20", "172.16.7.21", "172.16.7.22", "172.16.7.23", "172.16.7.24", "172.16.7.25", "172.16.7.26", "172.16.7.27", "172.16.7.28", "172.16.7.29", "172.16.7.30", "172.16.7.31", "172.16.7.32", "172.16.7.33", "172.16.7.34", "172.16.7.35", "172.16.7.36", "172.16.7.37", "172.16.7.38", "172.16.7.39", "172.16.7.40", "172.16.7.41", "172.16.7.42" }; // 三楼窗口屏 7.119 - 7.150 String[] layer_3_ck = new String[]{ "172.16.7.119", "172.16.7.120", "172.16.7.121", "172.16.7.122", "172.16.7.123", "172.16.7.124", "172.16.7.125", "172.16.7.126", "172.16.7.127", "172.16.7.128", "172.16.7.129", "172.16.7.130", "172.16.7.131", "172.16.7.132", "172.16.7.133", "172.16.7.134", "172.16.7.135", "172.16.7.136", "172.16.7.137", "172.16.7.138", "172.16.7.139", "172.16.7.140", "172.16.7.141", "172.16.7.142", "172.16.7.143", "172.16.7.144", "172.16.7.145", "172.16.7.146", "172.16.7.147", "172.16.7.148", "172.16.7.149", "172.16.7.150" }; // 三楼柱子屏 6.39 - 6.45 String[] layer_3_zhuzi = new String[]{ "172.16.6.39", "172.16.6.40", "172.16.6.41", "172.16.6.42", "172.16.6.43", "172.16.6.44", "172.16.6.45" }; String port = "55555"; // String ipPrefix = "172.16.7"; // int startIP = 10; // int stopIP = 42; // for (int j = startIP; j < stopIP + 1; j++) { // System.out.println(ipPrefix + "." + j + ":" + port); // } String executeHost[] = layer_1_zhuzi; for (String host : executeHost) { new Thread(new Runnable() { @Override public void run() { adb.batchCmd(host + ":" + port, Command.CONNECT, Command.WAIT, Command.REBOOT); } }).start(); } try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } } }