从安卓 app 提取 apk
拢共分三步
第一步 获取你想要的 app id
0 如果你知道 app id,直接进下一话题
1 简单方法,运行对应的 app,保持它在前台,在控制台输入(Linux 把 find 换成 grep):
adb shell dumpsys window windows | find “mCurrentFocus”
会输出类似于
mCurrentFocus=Window{6a5c9b5 u0 com.google.xxxx/com.google.xxxx.MainActivity}
的一串,其中_com.google.xxxx_就是所要的包名,斜线后面是 当前的 Activity 名字(这里没什么卵用)
2 看一下 app 的名字是啥,输入(不要带那个方括号):
adb shell “dumpsys package|grep -B 1 [app 名字]”
输出应该是类似于
mode=1 installFlags=0x4012 installLocation=1 sizeBytes=24408162 appPackageName=com.google.xxxx appIcon=false
appLabel=高的地图 originatingUri=null originatingUid=-1 referrerUri=null abiOverride=null volumeUuid=null grantedRuntimeP
的两行,粗体字部分分别是输入 app 名字和我们要找的 app id
grep -B 1 是个啥?
- grep -C n 显示匹配行及的前后 n 行
- grep -B n 显示匹配行及前 n 行
- grep -A n 显示匹配行及后 n 行
如果输出万一不是这里写的格式,可以用adb shell "dumpsys package\|grep -C 10 [app 名字]"
这种扩大搜索范围
3 输入 adb shell pm list packages
可以列出手机上全部 app id,凭感觉慢慢找
第二步 获取 apk 位置
命令(不要带那个方括号):
adb shell pm path [上一步获取的 app id]
会输出类似于
package:/data/app/com.google.xxxx-2.apk
或者
package:/data/app/com.google.xxxx-c2ekAI-F8HI_Vt/base.apk
这种名字,去掉 package: 这个前缀之后就是 apk 位置
第三步 把大象拉出来
命令(还是不要带那个方括号):
adb pull /data/app/com.google.xxxx-2.apk [你电脑上要存放 apk 的路径]