题
我怎么得到该应用文件。或者我该如何转让该应文件从装置的系统?
解决方案
使用 ADB 。随着的亚行拉的您可以从您的设备复制文件到您的系统中,当设备连接使用USB。
当然,你还需要正确的权限来访问您的文件所在的目录,如果没有,则需要根设备第一。
如果您发现很多APK中被命名为“base.apk”你也可以使用这一行命令拉所有的APK关闭手机,同时重命名任何“base.apk”名包名就可以访问。这也修复了这个名字后看似随机字符APK路径的目录中未发现问题:
for i in $(adb shell pm list packages | awk -F':' '{print $2}'); do adb pull "$(adb shell pm path $i | awk -F':' '{print $2}')"; mv base.apk $i.apk 2&> /dev/null ;done
如果你得到“亚行:错误:未能STAT远程对象”,表示你没有必要的权限。我跑这一个无根摩托Z2,并能下载所有的APK我没有卸载(见下文),除了YouTube上。
adb shell pm uninstall --user 0 com.android.cellbroadcastreceiver <--- kills presidential alert app!
(到视图用户运行ADB壳点列表中的用户) 这是一种方法,以消除/卸载(不是从手机,因为它回来了恢复出厂设置)差不多的所有的应用,而无需根,包括系统应用程序(暗示,更新您的电话线恼人的更新程序,或不可以通过grepping为 “CCC”)中找到
其他提示
这些建议为我工作,因为Android的被追加一个序列号给包名,产生最终的APK文件名无。在较新版本的Android(奥利奥和PIE)的,不可预测的随机字符串追加。下面的命令序列是什么工作了我的无根设备在:
1)确定的应用程序,例如的包名称“com.example.someapp”。如果跳过这一步 你已经知道包名称。
adb shell pm list packages
去翻包名称的列表,并设法找到有问题的应用程序和包名称之间的匹配。这通常是容易的,但要注意的是,包名称可以是完全无关的应用程序名称。如果你不能从包名称的列表识别应用程序,请尝试使用浏览器找到该应用程序在谷歌播放。在谷歌Play中的应用URL中包含包名称。
2)获取所需的包的APK文件的全路径名。
adb shell pm path com.example.someapp
在输出看起来像点击 包:/data/app/com.example.someapp-2.apk 结果 或点击 包:/data/app/com.example.someapp-nfFSVxn_CTafgra3Fr_rXQ == / base.apk
3)从第2步使用的全路径名,从Android设备APK文件拉至显影盒。
adb pull /data/app/com.example.someapp-2.apk path/to/desired/destination
<强>无需根强>
此代码将获得第三方软件包的路径与名称,以便您可以轻松地识别您的APK
adb shell pm list packages -f -3
的输出将是
包:/data/app/XX.XX.XX.apk=YY.YY.YY
现在使用以下代码拉该包:
adb pull /data/app/XX.XX.XX.apk
如果上述CMD C:>\
执行,那么你会发现,包那里。
我已经看到了这个问题的许多解决方案或者你在手机Root权限,或者您必须安装的应用程序。然后经过一番google搜索我得到了非植根/植根手机这个解决方案。
要列出哪些程序你有这么远。
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
这一切后,你所要做的就是提取焦油含量和它的完成。
希望工程为你们
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)
一个衬里,其适用于所有的Android版本:
adb shell 'cat `pm path com.example.name | cut -d':' -f2`' > app.apk
完成@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”。应该是“平凡的”来修复。
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 list packages
步骤来从设备下载到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)封装
Syntex: 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)
Syntex: 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/
如以上所述,可以通过在亚行使用拉命令获取APK。
由于,你在谈论你安装的应用程序,继续前进,看看在 /数据在Android文件系统/应用目录。你会发现APK的存在。
然后使用ADB命令 - ADB拉/data/data/appname.apk
如果您知道(或者,如果你能“猜”)的路径.apk
(它的似乎的是格式/data/app/com.example.someapp-{1,2,..}.apk
来的,那么你可以从/data/app
复制它。这即使工作在我的无根,股票的Android手机。
只需使用一个终端仿真器应用程序(例如这一个一>)和运行:
# step 1: confirm path
ls /data/app/com.example.someapp-1.apk
# if it doesn't show up, try -2, -3. Note that globbing (using *) doesn't work here.
# step 2: copy (make sure you adapt the path to match what you discovered above)
cp /data/app/com.example.someapp-1.apk /mnt/sdcard/
然后就可以从SD卡移动到任何你想要的(或将其附加到电子邮件等)。最后一位可能是技术上可选的,但试图做的.apk
文件的东西时,它会让你的生活变得更加简单。
这里所概述的程序不为Android 7(牛轧糖)的工作[和可能的Android 6,但我无法验证。你可以不拉的apk文件,直接下牛轧糖(除非根模式,但是这需要一个植根电话)。但是,你可以使用亚行外壳.apk文件复制到手机上的备用路径(比如/ SD卡/下载),那么你可以从备用路径做一个亚行拉。
试试这个衬bash命令,以备你所有的应用程序:
for package in $(adb shell pm list packages -3 | tr -d '\r' | sed 's/package://g'); do apk=$(adb shell pm path $package | tr -d '\r' | sed 's/package://g'); echo "Pulling $apk"; adb pull -p $apk "$package".apk; done
这个指令来自 Firelord的脚本.我只是重新命名的所有资料相关联到他们的软件包的名称,用于解决问题 elcuco的脚本, 我.e同 base.apk
文件复盖在安卓6.0"棉花糖"和以上。
请注意,该命令份只有3方的应用程序,因为我没有看到这一点的备份内的应用程序。但如果你想备份系统应用程序,只是忽略 -3
选项。
下面是你如何做到这一点:
下载,然后在你的设备上安装APK提取。它是免费的,而且是在几乎所有的Android设备兼容。另一种加点是,它甚至不要求根或其他类似的工作。 当你安装它,启动它。在那里,你会看到它的应用程序在你的设备,其中包括你后来安装的应用程式,与系统应用一起列表。长按要提取任何应用程序(可以一次选择多个或所有应用程序),并单击您在顶部看到提取选项。您也将通过蓝牙或短信的选项份额。 你做,你会看到所提取的应用为AppName_AppPackage_AppVersionName_AppVersionCode.apk,将被保存在路径/ SD卡/ ExtractedApks /默认。
有关的详细描述为如何提取在机器人,请访问: http://appslova.com/how-to -extract-APK-文件功能于机器人/
所有这些答案需要用于从该装置检索的每个apk文件多个步骤。 1.确定包名,2查找文件,和3下载。我建了一个简单的 apk_grabber
python脚本为匹配给定的正则表达式,然后反编译的任何应用程序做到这一点的apk成jar文件。
我还没有使用代码的拉。apk文件的移动,但我已经使用的软件来提取。apk文件的移动和软件我已经使用了以下与谷歌玩的链接:
希望这可以帮助你。
想非常,非常舒适1分钟溶液?
只是你这个程序 https://play.google的.com /商店/应用/细节?ID = com.cvinfo.filemanager (从谷歌播放智能文件管理器)。
抽头“应用程序”中,选择一个和抽头“备份”。它最终会在app_backup
文件夹中的文件系统上;)
没有根本和不亚行所需的工具的方法。安装 它几乎是不可能的 应用程序。
我有一个does not exist error
下面是我如何做它的工作原理
adb shell pm list packages -f | findstr zalo
package:/data/app/com.zing.zalo-1/base.apk=com.zing.zalo
adb shell
mido:/ $ cp /data/app/com.zing.zalo-1/base.apk /sdcard/zalo.apk
mido:/ $ exit
adb pull /sdcard/zalo.apk Desktop
/sdcard/zalo.apk: 1 file pulled. 7.7 MB/s (41895394 bytes in 5.200s)
又一个bash脚本(即将作为最基于unix系统)。基于上 答案由佩德罗*罗德里格斯, 但是稍微容易使用。
改进佩德罗的版本:
- 原始的方法并没有为我工作上的安卓7:
adb pull
直抱怨no such file or directory
同时adb shell
可以访问该文件。因此,我使用的不同办法,临时文件。 - 在启动时没有争论,我的剧本会只是列出所有可用的软件包。当部分包名称提供,它将试图猜测的充分包名。就会抱怨,如果有几种可能的扩展。
- 我不硬编码的目的地的路径;而不是资料相关联是保存以前的工作目录。
保存这种可执行的文件:
#!/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\""
简单的一种是: 在手机中安装“ShareIt”应用程序。 现在安装在电脑或其他手机shareIt应用。 现在,从手机,安装了应用程序,打开ShareIt和发送。 对其它电话或PC,开放ShareIt和接收。
- 打开你的愿望来提取超您的手机上。
获得当前打开的应用程序:
adb shell dumpsys activity activities | grep mFocusedActivity
让路径包名称
adb shell pm path <packagename.apk>
4.拷贝的路径你得到的文件目录
adb shell cp /data/app/<packagename.apk> /sdcard
5.拉该应
adb pull /sdcard/base.apk
我真的很喜欢所有这些问题的答案。最脚本到出口,并重新命名,他们都写在庆典。我做了一个小Perl脚本不相同(它应该在Perl windows和linux,只有测试Ubuntu).
download-apk.pl
#!/usr/bin/perl -w
# Automatically export all available installed APK's using adb
use strict;
print "Connect your device...\n";
system("adb", "wait-for-device");
open(my $OUT, '-|', 'adb', 'shell', 'pm', 'list', 'package', '-f');
my @list = split(/\s*/, `adb shell pm list packages -f`);
my $count = 0;
while(my $line = <$OUT>) {
$line =~ s/^\s*|\s*$//g;
my ($type, $path, $package) = $line =~ /^(.*?):(.*)=(.*)$/ ? ($1,$2,$3) : die('invalid line: '.$line);
my $category = $path =~ /^\/(.*?)\// ? $1 : 'unknown';
my $baseFile = $path =~ /\/([^\/]*)$/ ? $1 : die('Unknown basefile in path: '.$path);
my $targetFile = "$category-$package.apk";
print "$type $category $path $package $baseFile >> $targetFile\n";
system("adb", "pull", $path);
rename $baseFile, $targetFile;
}
- 确保adb(.exe)是在你的道路或同一目录下
- 连接你的电话
- 运行download-apk.pl
输出是类似的东西:
# ./download-apk.pl
Connect your device...
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
package system /system/app/YouTube/YouTube.apk com.google.android.youtube YouTube.apk >> system-com.google.android.youtube.apk
5054 KB/s (11149871 bytes in 2.154s)
package data /data/app/com.ghostsq.commander-1/base.apk com.ghostsq.commander base.apk >> data-com.ghostsq.commander.apk
3834 KB/s (1091570 bytes in 0.278s)
package data /data/app/de.blinkt.openvpn-2/base.apk de.blinkt.openvpn base.apk >> data-de.blinkt.openvpn.apk
5608 KB/s (16739178 bytes in 2.914s)
etc.
这人谁是寻找一个非技术答案
将帮助这是简单的劈强>
下载从谷歌Play商店应用App Share/Send Pro
。选择您要发送的方法发送应用程序的应用程序。
我通常使用蓝牙发送应用程序我的电脑或另一部手机。