ADB获取Android应用的APK包

1. apk安装流程简要介绍

    用户安装apk的方式有多种,主要可以通过应用商店,ADB install或者是直接点击apk包到安装界面进行安装,在安装过程中,设备会复制APK安装包到/data/app目录下,解压缩并扫描安装包,同时向资源管理器注入APK资源,解析AndroidManifest文件,并在/data/data目录下创建对应的应用数据目录,然后针对Dalvik/ART环境优化dex文件,保存到dalvik-cache目录,将AndroidManifest文件解析出的组件、权限注册到PackageManagerService并发送广播。

(详细过程了解可以参照 https://blog.csdn.net/mysimplelove/article/details/93619361)

    而在这个过程中,我们可以知道,用户安装的应用放在/data/app//base.apk,系统应用放在/system/app//.apk 这就使得我们通过ADB获取android应用的apk包有一定的可能性。

 

2. 获取app的包名

  (1). 要获取到要启动的app的Package name, 一般情况下是com.xxx.xxx这样格式,可以下载“包名查看器”来查看。

  (2).可以通过先在手机中启动相应的应用,使该应用位于前台。通过指令:

adb shell dumpsys window | findstr mCurrentFocus

可以获取到/

  (3). 通过PackageManager 获取整个应用列表然后在自己选择:

adb shell pm list packages

 

3. 通过包名获取apk路径

    在经过步骤2的任何一个方法获取到包名后,我们可以使用PackageManager获取到相对应的路径,即步骤1上所写的在安装过程中保存的apk。

adb shell pm path 

这样就能获取到 所对应的apk所在路径,个人应用在/data/app中,而系统应用一般在/system/app中

 

4. 通过apk路径获取apk

    该步骤主要是通过adb的pull指令将apk拉去到当前系统文件夹下。执行相应的语句:

adb pull   <本机路径>

    对于系统应用,我们可以很容易通过该指令获取到apk,但是对于用户自己安装的应用,在某些手机上可以直接拉去apk,而在某些系统中,比如MIUI 11中,将不具备权限可以获取, pull指令无法访问该文件夹,这时候就得采用一些迂回方式。

adb shell cp    /sdcard/base.apk

adb shell pull /sdcard/base.apk

经过尝试可以发现,CP指令能用于/data/app文件夹,我们先将APK复制到访问权限较低的sdcard文件夹下再Pull出来也是一样的。

你可能感兴趣的:(ADB系列)