zoukankan      html  css  js  c++  java
  • 命令行从Android手机中导出已安装APK的方法调研

    一、背景

    很多时候,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)

    最前面几行看起来是这样的:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)
      Main stack:
      * TaskRecord{41aa9ed0 #4 A com.tencent.mm U 0}
        numActivities=1 rootWasReset=true userId=0
        affinity=com.tencent.mm
        intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10600000 cmp=com.tencent.mm/.ui.LauncherUI}
        realActivity=com.tencent.mm/.ui.LauncherUI
        askedCompatMode=false
        lastThumbnail=null lastDescription=null
        lastActiveTime=19915965 (inactive for 10s)
        * Hist #9: ActivityRecord{41ba1a30 u0 com.tencent.mm/.ui.LauncherUI}
            packageName=com.tencent.mm processName=com.tencent.mm

    发现了吗,第三行就已经有我们需要的信息了: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 ,就可以在下面几行找到类似的包名了

  • 相关阅读:
    ActiveSync合作关系对话框的配置
    WINCE对象存储区(object store)
    Wince 隐藏TASKBAR的方法
    Wince输入法换肤换语言机制
    poj 3080 Blue Jeans 解题报告
    codeforces A. Vasily the Bear and Triangle 解题报告
    hdu 1050 Moving Tables 解题报告
    hdu 1113 Word Amalgamation 解题报告
    codeforces A. IQ Test 解题报告
    poj 1007 DNA Sorting 解题报告
  • 原文地址:https://www.cnblogs.com/qingchen1984/p/4905260.html
Copyright © 2011-2022 走看看