如何从android设备获取apk文件?或者如何将apk文件从设备传输到系统?
当前回答
在unix系统上,您可以尝试这个函数:
function android_pull_apk() {
if [ -z "$1" ]; then
echo "You must pass a package to this function!"
echo "Ex.: android_pull_apk \"com.android.contacts\""
return 1
fi
if [ -z "$(adb shell pm list packages | grep $1)" ]; then
echo "You are typed a invalid package!"
return 1
fi
apk_path="`adb shell pm path $1 | sed -e 's/package://g' | tr '\n' ' ' | tr -d '[:space:]'`"
apk_name="`adb shell basename ${apk_path} | tr '\n' ' ' | tr -d '[:space:]'`"
destination="$HOME/Documents/Android/APKs"
mkdir -p "$destination"
adb pull ${apk_path} ${destination}
echo -e "\nAPK saved in \"$destination/$apk_name\""
}
例如:android_pull_apk com.android.contacts 注意:识别包:adb shell pm列表包
其他回答
对于从设备检索的每个apk文件,所有这些答案都需要多个步骤。1. 2.确定包名。找到文件,然后3。下载它。我构建了一个简单的apk_grabber python脚本,用于匹配给定正则表达式的任何应用程序,然后将这些apks反编译到jar文件中。
这些建议对我都不起作用,因为Android在包名后面附加了一个序列号来生成最终的APK文件名。在最新版本的Android (Oreo和Pie)上,会追加一个不可预测的随机字符串。下面的命令序列是我在非root设备上使用的:
1)确定应用程序的包名。“com.example.someapp”。如果存在以下情况,请跳过此步骤 您已经知道包的名称。
adb shell pm list packages
查看包名列表,并尝试在有问题的应用程序和包名之间找到匹配项。这通常很简单,但请注意,包的名称可以与应用程序的名称完全无关。如果您无法从包名列表中识别该应用程序,请尝试使用浏览器在谷歌Play中找到该应用程序。谷歌Play中应用程序的URL包含包名。
2)获取所需包的APK文件的完整路径名称。
adb shell pm path com.example.someapp
输出看起来像这样 包:/数据/应用/ com.example.someapp apk——2. 或 包:/数据/ app / com.example.someapp-nfFSVxn_CTafgra3Fr_rXQ = = / base.apk
3)使用步骤2中的完整路径名称,将APK文件从Android设备拉到开发箱中。
adb pull /data/app/com.example.someapp-2.apk path/to/desired/destination
C:\Users\xyz>adb shell pm list packages -f | findstr whatsapp
package:/data/app/com.whatsapp-1/base.apk=com.whatsapp
C:\Users\xyz>adb pull /data/app/com.whatsapp-1/base.apk Desktop
/data/app/com.whatsapp-1/base.apk: 1 f.... 13.8 MB/s (32803925 bytes in
2.269s)
这对那些寻求非技术性答案的人很有帮助
这是一个简单的hack
从谷歌播放商店下载App Share/Send Pro选择要发送的应用程序和方法发送应用程序。
我通常使用蓝牙将应用程序发送到我的电脑或其他手机上。
完成@Yojimbo的回答,这是我所做的(只适用于Linux/Mac,不会在Windows上开箱工作……可能在git的bash shell中):
for i in $(adb shell pm list packages -f -3 | cut -d= -f 1 | cut -d ":" -f 2); do adb pull $i; done
这是一个丑陋的bash,但工作:)
编辑: 它不再适用于AndroidM:所有文件都命名为“base.apk”在另一个目录下。应该是“微不足道的”修复。
推荐文章
- 改变开关的“开”色
- 以编程方式将EditText的输入类型从PASSWORD更改为NORMAL,反之亦然
- 如何在隐藏和查看密码之间切换
- 在Android上调整一个大的位图文件到缩放输出文件
- 如何更改Android版本和代码版本号?
- Android Studio突然无法解析符号
- 应用程序重新启动而不是恢复
- 如何设置整个应用程序在纵向模式?
- Android中文本的阴影效果?
- 以编程方式设置TextView的布局权重
- Android -如何覆盖“后退”按钮,所以它不完成()我的活动?
- 如何从通知点击发送参数到一个活动?
- 导航目标xxx对于这个NavController是未知的
- 使用ConstraintLayout均匀间距的视图
- 文件google-services错误。模块根文件夹中缺少Json。谷歌服务插件没有它就不能正常工作。