批量提取 data/app目录中的apk文件

我的手机是user版本,data/app目录不能通过adb shell ls读取。

$ adb shell ls /data/app
ls: /data/app: Permission denied

但是可以通过其他方式获取 data/app目录中的apk路径。

★ 获取 data/app中 apk的路径

        PackageManager pm = getPackageManager();

        ArrayList<PackageInfo> thirdPartyAppList = new ArrayList<>();

        List<PackageInfo> pkgList = pm.getInstalledPackages(0);
        if (pkgList != null && pkgList.size() > 0) {
            for (PackageInfo pi : pkgList) {
                Log.e(TAG, "pkg name: " + pi.packageName);
                Log.e(TAG, "dir: " + pi.applicationInfo.publicSourceDir);
                if (pi.applicationInfo.publicSourceDir.startsWith("/data/app/")
                        && !pi.packageName.startsWith("com.smartisanos.")) {
                    thirdPartyAppList.add(pi);
                }
            }
        } else {
            Log.e(TAG, "No packages");
        }
        
        if (thirdPartyAppList.size() > 0) {
            Log.e(TAG, "====================================================");
            for (PackageInfo pi: thirdPartyAppList) {
                //Log.e(TAG, "pkg name: " + pi.packageName);
                Log.e(TAG, "dir: " + pi.applicationInfo.publicSourceDir);
            }
        }

打印的log如下(部分log,且通过Notepad++的列模式拷贝出来)

/data/app/com.zcbl.bjjj_driving-2/base.apk
/data/app/com.sankuai.meituan-1/base.apk
/data/app/com.youku.phone-2/base.apk
/data/app/com.dianping.v1-1/base.apk
/data/app/com.tencent.mm-2/base.apk
/data/app/com.sdu.didi.psnger-1/base.apk
/data/app/com.dangdang.buy2-2/base.apk
/data/app/com.tencent.mobileqq-1/base.apk
/data/app/com.zhihu.android-1/base.apk

通过Notepad++的列编辑模式,可以在每一行添加上 adb pull,如下:

adb pull /data/app/com.zcbl.bjjj_driving-2/base.apk
adb pull /data/app/com.sankuai.meituan-1/base.apk
adb pull /data/app/com.youku.phone-2/base.apk
adb pull /data/app/com.dianping.v1-1/base.apk
adb pull /data/app/com.tencent.mm-2/base.apk
adb pull /data/app/com.sdu.didi.psnger-1/base.apk
adb pull /data/app/com.dangdang.buy2-2/base.apk
adb pull /data/app/com.tencent.mobileqq-1/base.apk
adb pull /data/app/com.zhihu.android-1/base.apk

将此内容存为批处理文件,例如pull.bat.
但是执行pull.bat,只会得到一个base.apk.因为文件名相同,都给覆盖了。

★ 利用正则表达式 修改base.apk为特定文件名

如图,『 查找目标』填: /data/app/([a-zA-Z0-9_.\-]*)/base.apk
『替换为』填: /data/app/\1/base.apk \1.apk

这里写图片描述

效果:执行『全部替换』后,内容变为:

adb pull /data/app/com.zcbl.bjjj_driving-2/base.apk com.zcbl.bjjj_driving-2.apk
adb pull /data/app/com.sankuai.meituan-1/base.apk com.sankuai.meituan-1.apk
adb pull /data/app/com.youku.phone-2/base.apk com.youku.phone-2.apk
adb pull /data/app/com.dianping.v1-1/base.apk com.dianping.v1-1.apk
adb pull /data/app/com.tencent.mm-2/base.apk com.tencent.mm-2.apk
adb pull /data/app/com.sdu.didi.psnger-1/base.apk com.sdu.didi.psnger-1.apk
adb pull /data/app/com.dangdang.buy2-2/base.apk com.dangdang.buy2-2.apk
adb pull /data/app/com.tencent.mobileqq-1/base.apk com.tencent.mobileqq-1.apk
adb pull /data/app/com.zhihu.android-1/base.apk com.zhihu.android-1.apk
  • 20190418 update:
    替换的正则表达式也可以这么写:
    查找目标: (/data/app/([a-z0-9.]*).*/base.apk)
    替换为: \1 \2.apk

    举例:
    对于 /data/app/com.tencent.qqlive-HdJXiU5wzF6WsqpVhxnZIQ==/base.apk 替换后的结果为:
    /data/app/com.tencent.qqlive-HdJXiU5wzF6WsqpVhxnZIQ==/base.apk com.tencent.qqlive.apk
    优点是,不再要 -HdJXiU5wzF6WsqpVhxnZIQ== 这部分内容,这部分内容正好是用 -分割的,所以匹配时没有匹配 -,导出来的apk的名字为 com.tencent.qqlive.apk

  • 补充:
    如果在 cygwin 中执行 pull.sh 脚本,需要注意换行符。
    如果有回车符 \r, 会出错。出错信息,大致如下:

': No such file or directoryn.richinfo.automail.apk
': No such file or directoryom.aspire.mm.apk
': No such file or directoryom.chinasofti.rcs.apk
': No such file or directoryom.diotek.sec.lookup.dictionary.apk

解决方法,替换掉回车符,我用的是 Notepad++,可以在 Edit -》 EOL Conversion -》UNIX/OSX Format
或者用 Ctrl + H 替换,打开 Entended (\r, \n,\t...),搜索 \r,替换即可。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值