命令行从Android手机中导出已安装APK的方法调研
2015-10-23 17:45
330 查看
一、背景
二、步骤
APK安装到手机后,Android系统会保存一份和原始APK一模一样的拷贝,位于data/app目录,文件名为“APK的包名-1.apk”或者“APK的包名-2.apk”。这里的包名即 package name,形如 com.xxx.xxx。
data/app这个目录在非root的情况下,是无法直接查看的。但幸运的是,这个目录下所有的APK文件,是有other组可读权限的。
这就是本文方法的原理了。
下面以微信这个APK为例来说明下具体的操作步骤。
Step 1:将PC通过adb连接上手机。这步显然是必要条件,对adb不清楚的请自行查阅相关资料
Step 2:获取APK的包名(package name) - 最重要的一步 - 有两种方法
第一种方法 -- 如果你大概知道这个APK的包名可能会包含什么字符串。
比如,我们知道微信是腾讯出品的,那么按惯例,它包名里面肯定包含了“tencent ”这个字符串。
方法:打开PC的命令行,输入adb shell ps。它会列出当前手机中所有正在运行的程序,肯定包含了你要的APK的包名。
在这个输出里面查找包含 tencent的行,你很快就可以找到,它的包名是 com.tencent.mm。
第二种方法 -- 如果你对这个APK的包名可能包含什么内容一无所知。
这时可以使用一个比较复杂的命令:dumpsys activity activities
方法:打开PC的命令行,输入adb shell dumpsys activity activities ,它会列出当前手机中所有正在运行的应用的详细信息,按打开顺序排列,最后打开的APK信息会放在输出的最前面。
(输出非常长,可以重定向到文件中查看到 adb shell dumpsys activity activities > temp.txt)
最前面几行看起来是这样的:
?
发现了吗,第三行就已经有我们需要的信息了:com.tencent.mm
不要被里面的技术细节信息吓倒了,我们不需要关心那些~
Step 3:利用adb pull命令导出APK
知道了APK的包名,导出APK就简单了。因为data/app下的APK文件名只有两种情况,一个一个试就行了
adb pull data/app/com.tencent.mm-1.apk com.tencent.mm.apk
adb pull data/app/com.tencent.mm-2.apk com.tencent.mm.apk
第三种方法好是好,但是得首先知道APK叫什么名字,可以使用adb shell pm list package -f -3获得
备注:Android4.4以后,dumpsys的输出有点变化,这里,在获取到dumpsys的输出后,搜索关键字:Stack #1 ,就可以在下面几行找到类似的包名了
二、步骤
一、背景
很多时候,APK文件只存在于应用市场,在PC上无法直接下载。用手机下载下来后就直接安装了,也不能保存原始的APK文件。APK安装到手机后,Android系统会保存一份和原始APK一模一样的拷贝,位于data/app目录,文件名为“APK的包名-1.apk”或者“APK的包名-2.apk”。这里的包名即 package name,形如 com.xxx.xxx。
data/app这个目录在非root的情况下,是无法直接查看的。但幸运的是,这个目录下所有的APK文件,是有other组可读权限的。
这就是本文方法的原理了。
下面以微信这个APK为例来说明下具体的操作步骤。
二、步骤
Step 0:在手机上安装APK,打开(在下面的步骤中保持APK处于打开状态)。Step 1:将PC通过adb连接上手机。这步显然是必要条件,对adb不清楚的请自行查阅相关资料
Step 2:获取APK的包名(package name) - 最重要的一步 - 有两种方法
第一种方法 -- 如果你大概知道这个APK的包名可能会包含什么字符串。
比如,我们知道微信是腾讯出品的,那么按惯例,它包名里面肯定包含了“tencent ”这个字符串。
方法:打开PC的命令行,输入adb shell ps。它会列出当前手机中所有正在运行的程序,肯定包含了你要的APK的包名。
在这个输出里面查找包含 tencent的行,你很快就可以找到,它的包名是 com.tencent.mm。
第二种方法 -- 如果你对这个APK的包名可能包含什么内容一无所知。
这时可以使用一个比较复杂的命令:dumpsys activity activities
方法:打开PC的命令行,输入adb shell dumpsys activity activities ,它会列出当前手机中所有正在运行的应用的详细信息,按打开顺序排列,最后打开的APK信息会放在输出的最前面。
(输出非常长,可以重定向到文件中查看到 adb shell dumpsys activity activities > temp.txt)
最前面几行看起来是这样的:
?
不要被里面的技术细节信息吓倒了,我们不需要关心那些~
Step 3:利用adb pull命令导出APK
知道了APK的包名,导出APK就简单了。因为data/app下的APK文件名只有两种情况,一个一个试就行了
adb pull data/app/com.tencent.mm-1.apk com.tencent.mm.apk
adb pull data/app/com.tencent.mm-2.apk com.tencent.mm.apk
第三种方法好是好,但是得首先知道APK叫什么名字,可以使用adb shell pm list package -f -3获得
备注:Android4.4以后,dumpsys的输出有点变化,这里,在获取到dumpsys的输出后,搜索关键字:Stack #1 ,就可以在下面几行找到类似的包名了
相关文章推荐
- android中handler用法总结
- android中通知系统扫描系统媒体文件的几种方法
- android关于data/data/目录下,各应用之间的私有数据读写
- Android - Design Support Library 学习总结 2
- Android开发 关于软键盘的 打开与关闭
- android系统编译记录
- AndroidManifest.xml详解分析
- android-从官网下拉源码(ubuntu)
- 关于android.support.annotation找不到的问题
- Android wakelock 自上而下浅析
- Android Alarm自上而下 调试浅析
- Android如何实现获取短信验证码的功能
- Android RTC 自下往上浅析
- 安卓开发学习之002 LinearLayout之android:layout_gravity详解
- Android Studio使用--了解项目结构
- android listview的divider分割线的宽度设置
- android读取短信内容 自动填充验证码
- 转:Android 签名验证机制(相当不错,强烈推荐)
- Android 事件传递
- 如何设置TextView控件的背景透明度和字体透明度