日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

通过ddmlib杀死某个android进程的方法

發布時間:2025/4/5 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 通过ddmlib杀死某个android进程的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?首先獲取ps指令的打印信息:

  • private?static?String?getPsPrint(IDevice?device)?{?
  • ????????OutputStream?os?=?new?ByteArrayOutputStream();?
  • ?
  • ????????try?{?
  • ????????????device.executeShellCommand("ps",?
  • ????????????????????new?OutputStreamShellOutputReceiver(os));?
  • ????????????os.flush();?
  • ????????????return?os.toString();?
  • ????????}?catch?(TimeoutException?e)?{?
  • ????????????e.printStackTrace();?
  • ????????}?catch?(AdbCommandRejectedException?e)?{?
  • ????????????e.printStackTrace();?
  • ????????}?catch?(IOException?e)?{?
  • ????????????e.printStackTrace();?
  • ????????}?catch?(ShellCommandUnresponsiveException?e)?{?
  • ????????????e.printStackTrace();?
  • ????????}?
  • ?
  • ????????return?"";?
  • ????}?
  • 其中OutputStreamShellOutputReceiver類:

  • public?class?OutputStreamShellOutputReceiver?implements?IShellOutputReceiver?{?
  • ?
  • ????OutputStream?os;?
  • ?????
  • ????public?OutputStreamShellOutputReceiver(OutputStream?os)?{?
  • ????????this.os?=?os;?
  • ????}?
  • ?????
  • ????public?boolean?isCancelled()?{?
  • ????????return?false;?
  • ????}?
  • ?????
  • ????public?void?flush()?{?
  • ????}?
  • ?????
  • ????public?void?addOutput(byte[]?buf,?int?off,?int?len)?{?
  • ????????try?{?
  • ????????????os.write(buf,off,len);?
  • ????????}?catch(IOException?ex)?{?
  • ????????????throw?new?RuntimeException(ex);?
  • ????????}?
  • ????}?
  • ?
  • }?
  • 獲得ps的打印信息之后,需要根據進程名分析出pid:

  • public?static?String?parsePid(IDevice?device,?String?exeName)?{?
  • ?
  • ????????String?content?=?getPsPrint(device);?
  • ????????String[]?pidInfos?=?content.split("\n");?
  • ????????for?(String?info?:?pidInfos)?{?
  • ????????????if?(info?!=?null)?{?
  • ????????????????//?shell?18867?18856?852?300?c022c0bc?afe0cdec?S?./gsnap?
  • ????????????????if?(info.contains(exeName))?{?
  • ????????????????????String[]?fragments?=?info.split("?");?
  • ????????????????????int?idx?=?0;?
  • ????????????????????for?(String?str?:?fragments)?{?
  • ????????????????????????if?((str?!=?null)?&&?(!str.trim().equals("")))?{?
  • ????????????????????????????idx++;?
  • ????????????????????????}?
  • ?
  • ????????????????????????if?(idx?==?2)?{?
  • ????????????????????????????return?str;?
  • ????????????????????????}?
  • ????????????????????}?
  • ????????????????}?
  • ????????????}?
  • ????????}?
  • ?
  • ????????return?"";?
  • ????}?
  • 最后,根據得到的pid,殺掉此android進程:

  • public?static?void?killProcess(IDevice?device,?String?pid)?{?
  • ????????//?舊的手機,缺乏grep和awk程序!?
  • ????????//String?killCmd?=?"kill?-9?`ps?|?grep?\"gsnap\"?|?grep?-v?\"grep\"?|?awk?'{print?$2}'`";?
  • ????????String?killCmd?=?"kill?-9?"?+?pid;?
  • ?????????????????
  • ????????try?{?
  • ????????????device.executeShellCommand(killCmd,?
  • ????????????????????new?OutputStreamShellOutputReceiver(System.out));?
  • ????????}?catch?(TimeoutException?e)?{?
  • ????????????e.printStackTrace();?
  • ????????}?catch?(AdbCommandRejectedException?e)?{?
  • ????????????e.printStackTrace();?
  • ????????}?catch?(IOException?e)?{?
  • ????????????e.printStackTrace();?
  • ????????}?catch?(ShellCommandUnresponsiveException?e)?{?
  • ????????????e.printStackTrace();?
  • ????????}?
  • ????}?
  • 之所以會這么復雜,是因為這個:

  • //?舊的手機,缺乏grep和awk程序!?
  • ????????//String?killCmd?=?"kill?-9?`ps?|?grep?\"gsnap\"?|?grep?-v?\"grep\"?|?awk?'{print?$2}'`";?
  • ?

    ?

    轉載于:https://blog.51cto.com/memory/1037994

    總結

    以上是生活随笔為你收集整理的通过ddmlib杀死某个android进程的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。