手机连接电脑,开启USB调试,【不懂去百度】
windows下载ADB,设置环境变量,然后打开cmd,【不懂去百度】
//获取手机上当前正在运行的APP的包名+Activity名
ADB命令:
adb shell dumpsys window | findstr mCurrentFocus
执行结果:
mCurrentFocus=Window{d9a816a u0 com.xxx.xxx/com.xxx.xxx.ui.activity.TabActivity}
其中com.xxx.xxx就是包名,
但是因为很多APP启动后显示的页面,并不是入口Activity,
因此,上面的结果中【com.xxx.xxx/com.xxx.xxx.ui.activity.TabActivity】并不一定能用来启动APP,
很多APP有个专门的过渡启动页,用来判断是否已经登录,登录了显示主页,没登录显示登录页。
ADB启动APP命令:
adb shell am start com.xxx.xxx/com.xxx.xxx.starActivity
【这个starActivity就是APP的启动入口Activity】
下面是找到这个APP入口Activity的命令:
adb shell dumpsys package com.xxx.xxx
执行这个命令,会显示一大堆信息,其中前面几行信息就是入口信息,排在最前面,但是信息太多,要翻页很久,
入口信息像这样:
b70c46b com.xxx.xxx/.ui.activity.LoadingActivity filter 9e6bc8
根据结果调整命令,加入搜索条件:findstr \/ | findstr filter
调整后的命令:
adb shell dumpsys package com.xxx.xxx | findstr \/ |findstr filter
这样就找到了4行信息,搜索条件包括两个条件【一:有/字符的,二:有filter字符串的】
如下,其中第一行就是我们需要的入口Activity信息:
b70c46b com.xxx.xxx/.ui.activity.LoadingActivity filter 9e6bc8
cfb0461 com.xxx.xxx/com.hyphenate.chat.EMMonitorReceiver filter 63c9b86【这个APP引用了其它的包,这里是其它包入口信息】
cfb0461 com.xxx.xxx/com.hyphenate.chat.EMMonitorReceiver filter ed53c47【这个APP引用了其它的包,这里是其它包入口信息】
cfb0461 com.xxx.xxx/com.hyphenate.chat.EMMonitorReceiver filter ed53c47【这个APP引用了其它的包,这里是其它包入口信息】
结论:
一、先用
adb shell dumpsys window | findstr mCurrentFocus
命令找到【当前连接电脑的手机正在运行的APP】的包名
二、再用
adb shell dumpsys package 包名 | findstr \/ |findstr filter
命令找到入口Activity。
三、使用
adb shell am start com.xxx.xxx/com.xxx.xxx.starActivity
启动APP
2024-4-16补充:
有些傻逼APP,它会隐藏很多Activity的权限,用它定义的MainActivity去启动app会得到权限不足的回答。
这样的APP,必须找到它的启动Activity
办法是当启动的时候,不停的用命令提示符使用adb命令
adb shell dumpsys activity top | findstr ACTIVITY
去找到启动页面,这里特别点名:番茄免费小说,没错,说的就是你,傻逼APP。
傻逼APP在AndroidManifest.xml清单文件中,首页的清单设置中没有添加 <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> 这个代码,会导致使用Main启动APP报权限错误【就是如下图这个错误】,启动不了它的主Activity。
只能找到启动Activity,才能启动APP。
找到启动Activity以后,使用启动Activity去启动APP