Android广告机自动重启处理实录

背景:项目采用安卓广告机,适配原内容管理控制播放系统,系统运行稳定。换装咱们的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 devices
ui

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();
        }
    }
}
相关文章
相关标签/搜索