如何从android设备获取apk文件?或者如何将apk文件从设备传输到系统?


当前回答

我已经见过很多解决这个问题的方法,要么你必须在你的手机上安装根程序,要么你必须安装一个应用程序。然后在谷歌搜索了很多之后,我找到了这个解决方案,适用于非根/根手机。

列出你目前获得的应用程序。

adb shell pm list packages

然后你可以选择一个应用程序,比如twitter

adb backup -apk com.twitter.android

这里很重要的一点是不要为加密备份设置密码

这将创建一个名为backup的文件。Ap,但你还是打不开。为此,您必须再次提取它,但使用dd命令。

dd if=backup.ab bs=24 skip=1 | openssl zlib -d > backup.tar

在此之后,你所要做的就是提取焦油含量,这就完成了。

希望这对你们有用

其他回答

这对那些寻求非技术性答案的人很有帮助

这是一个简单的hack

从谷歌播放商店下载App Share/Send Pro选择要发送的应用程序和方法发送应用程序。

我通常使用蓝牙将应用程序发送到我的电脑或其他手机上。

这些建议对我都不起作用,因为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

还有另一个bash脚本(即可以用于大多数基于unix的系统)。基于佩德罗·罗德里格斯的回答,但更容易使用。

对佩德罗版本的改进:

Original approach did not work for me on Android 7: adb pull kept complaining about no such file or directory while adb shell could access the file. Hence I used different approach, with temporary file. When launched with no arguments, my script will just list all available packages. When partial package name is provided, it will try to guess the full package name. It will complain if there are several possible expansions. I don't hardcode destination path; instead APKs are saved to current working directory.

保存到一个可执行文件:

#!/bin/bash
# Obtain APK file for given package from the device connected over ADB

if [ -z "$1" ]; then
    echo "Available packages: "
    adb shell pm list packages | sed 's/^package://'
    echo "You must pass a package to this function!"
    echo "Ex.: android_pull_apk \"com.android.contacts\""
    exit 1
fi

fullname=$(adb shell pm list packages | sed 's/^package://' | grep $1)
if [ -z "$fullname" ]; then
    echo "Could not find package matching $1"
    exit 1
fi
if [ $(echo "$fullname" | wc -l) -ne 1 ]; then
    echo "Too many packages matched:"
    echo "$fullname"
    exit 1
fi
echo "Will fetch APK for package $fullname"

apk_path="`adb shell pm path $fullname | sed -e 's/package://g' | tr '\n' ' ' | tr -d '[:space:]'`"
apk_name="`basename ${apk_path} | tr '\n' ' ' | tr -d '[:space:]'`"

destination="${fullname}.apk"

tmp=$(mktemp --dry-run --tmpdir=/sdcard --suffix=.apk)
adb shell cp "${apk_path}" "$tmp"
adb pull "$tmp" "$destination"
adb shell rm "$tmp"

[ $? -eq 0 ] && echo -e "\nAPK saved in \"$destination\""

APK从设备下载到桌面的步骤

A)确保您的运行(模拟器/真实设备)。使用该命令检查

adb devices

B)选择设备中安装的所有可用软件包列表。可以使用grep命令选择要下载的软件包。

adb shell pm list packages
adb shell pm list packages -f -3

输出(可用包的列表)

package:/data/app/com.example.mytestapplication-sOzKi5USzfbYLPNDmaaK6g==/base.apk=com.example.mytestapplication
package:/data/app/com.example.myapplication-nd1I4FGnTZnQ9PyRbPDHhw==/base.apk=com.example.myapplication

C)从上面的链接复制包(你喜欢下载的)。在我们的案例中,我选择这个(com.example.myapplication)包

Syntax : adb shell pm path [your_package_name]
Command: adb shell pm path com.example.myapplication

输出

package:/data/app/com.example.myapplication-nd1I4FGnTZnQ9PyRbPDHhw==/base.apk

D)最后,从您的(模拟器/真实设备)下载APK

Syntax : adb pull /data/app/[your_package_name]-1/base.apk  [your_destination_path]
Command: adb pull /data/app/com.example.myapplication-3j4CVk0Tb2gysElgjz5O6A==/base.apk /Users/$(whoami)/Documents/your_apk.apk

示例:试图将CertInstaller.apk文件拉到本地机器(Mac)

adb pull /system/app/CertInstaller/CertInstaller.apk /Users/$(whoami)/Documents/APK/download_apk/

E)在您的本地目录中确认

ls -la /Users/$(whoami)/Documents/

想要非常非常舒服的一分钟解决方案吗?

只需你这个应用程序https://play.google.com/store/apps/details?id=com.cvinfo.filemanager(智能文件管理器从谷歌发挥)。

点击“应用程序”,选择一个,然后点击“备份”。它将在你的文件系统的app_backup文件夹;)