概述
我的手机是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
,替换即可。
最后
以上就是要减肥镜子为你收集整理的批量提取 data/app目录中的apk文件的全部内容,希望文章能够帮你解决批量提取 data/app目录中的apk文件所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复