安卓手机上app常驻保活方案

前言

搞安卓逆向或者正向开发,可能会有这样的需求,要保持某个或者多个app常驻手机,而不管国内还是国外的手机,我都遇到过会有所谓的节省手机资源或者省电的默认策略,会在后台杀死进程,而这样就会导致,我们的任务没了。就很尴尬

使用场景

  • 用sekiro部署了一个主动调用方案
  • 需要某个app常驻监听某个活动,比如app作为服务端
  • app需要在某个时间段定时启动

shell代码

在给代码之前,你需要知道,你要启动的app的activity名字,用以下终端命令可知

 

 

adb shell dumpsys window | findstr mCurrentFocus  # windows
adb shell dumpsys window | grep mCurrentFocus # linux,macos

 

注意,以下的代码可能都需要root权限,我没在未root手机上试过。

 

代码:这段代码是保证某两个app能一直常驻在手机上,force-stop是杀死进程的意思,am start是启动app并进入指定activity界面的意思

 

#!/bin/bash


while true
do
    am force-stop com.geekbyte.xxxhook
    sleep 2
    am force-stop art.geekbyte.xxx
    sleep 2
    am start -n com.geekbyte.xxx/com.geekbyte.xxx.MainActivity
    sleep 2
    am start -n art.geekbyte.xxx/com.geekbyte.art.app.activity.AppMainActivity
    sleep 1800
done

  

代码2:这段代码是保证指定的两个app能在早上8点、9点的时间里,启动app,保活1800秒,其他时间则不启动, 每300间隔启动一次

 

#!/bin/bash

targetTime="8"
targetTime2="08"
targetTime3="9"
targetTime4="09"

while true
do
  ctime=`date +"%H"`
  echo $targetTime
  echo $targetTime2
  echo $targetTime3
  echo $targetTime4
  echo `date +"%H:%M:%S"`
  if [[ "${ctime}" == "${targetTime}" || "${ctime}" == "${targetTime2}" || "${ctime}" == "${targetTime3}" || "${ctime}" == "${targetTime4}" ]];
    then
      am force-stop com.geekbyte.xxx
      sleep 2
      am force-stop com.tencent.xxx
      sleep 2
      am start -n com.geekbyte.xxx/com.geek.xxx.MainActivity
      sleep 2
      am start -n com.tencent.xxx/com.tencent.xxx.ui.LauncherUI
      sleep 1800
  else
    echo "the time is wrong, it is forbidden to run"
  fi
  sleep 300
done

 

注意

以上的代码,如果你启动的app界面,有可能是带参数的Intent,那么以上的代码则不适用,会报错,你需要去逆向找出参数,如果参数很复杂,比如是一个实例化的安卓对象,那需要用其他模式了

启动

在你手机上,装一个termux终端软件,这个app启动shell命令需要root权限,然后用termux进入到你的shell脚本目录,用 【sh  xx.sh】 启动即可

结语

然后你就可以愉快的专注到你的业务逻辑了

 

posted @ 2023-04-14 10:18  Eeyhan  阅读(375)  评论(0编辑  收藏  举报