从安卓 app 提取 apk

 

从安卓 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 的路径]