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/<package-name-code>/base.apk,系统应用放在/system/app/<foldername>/<app>.apk 这就使得我们通过ADB获取android应用的apk包有一定的可能性。

 

2. 获取app的包名

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

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

adb shell dumpsys window | findstr mCurrentFocus

可以获取到<package-name>/<activity-name>

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

adb shell pm list packages

 

3. 通过包名获取apk路径

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

adb shell pm path <package-name>

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

 

4. 通过apk路径获取apk

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

adb pull <apk路径>  <本机路径>

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

adb shell cp <apk路径>   /sdcard/base.apk

adb shell pull /sdcard/base.apk

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值