# 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/
我真的很喜欢这些答案 . 大多数要导出和重命名所有脚本的脚本都是用Bash编写的 . 我做了一个小的Perl脚本,它做了同样的事情(它应该在Perl for 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.
0
这对于正在寻找 non technical 答案的人有帮助
这很简单 hack
从google play store下载应用程序 App Share/Send Pro . 选择要发送的应用程序和方法发送应用程序 .
24 回答
使用adb . 使用adb pull,当设备连接USB时,您可以将文件从设备复制到系统 .
当然,您还需要正确的权限才能访问您的文件所在的目录 . 如果没有,您将需要首先根设备 .
如果您发现许多APK被命名为“base.apk”,您还可以使用此一行命令从您可以访问的手机中提取所有APK,同时将任何“base.apk”名称重命名为包名称 . 这也修复了APK路径未找到目录的问题,名称后面看似随机的字符:
如果您收到“adb:error:failed of stat remote object”,则表示您没有所需的权限 . 我在一个没有根据的Moto Z2上运行它,并且能够下载除了youtube之外我没有卸载的所有APK(见下文) .
(查看用户运行adb shell pm列表用户)这是一种删除/卸载(不是从手机恢复出厂设置)的方法几乎任何没有root的应用程序包含系统应用程序(暗示更新手机的烦人的更新应用程序)是否可以通过grepping找到"ccc")
这些建议都不适用于我,因为Android会在程序包名称后附加序列号以生成最终的APK文件名 . 在更新版本的Android(Oreo和Pie)中,会附加一个不可预测的随机字符串 . 以下命令序列对 non-rooted device 有用:
1)确定应用程序的包名称,例如“com.example.someapp” . 如果您已经知道包名称,请跳过此步骤 .
查看软件包名称列表,尝试查找相关应用程序与软件包名称之间的匹配项 . 这通常很简单,但请注意,包名称可能与应用名称完全无关 . 如果您无法从包名列表中识别该应用,请尝试使用浏览器在Google Play中查找该应用 . Google Play中应用的网址包含套餐名称 .
2)获取所需包的APK文件的完整路径名 .
输出看起来像
包:/data/app/com.example.someapp-2.apk
要么
包:/data/app/com.example.someapp-nfFSVxn_CTafgra3Fr_rXQ == / base.apk
3)使用步骤2中的完整路径名称,将APK文件从Android设备拉到开发框 .
No root is required:
此代码将获得名称的第三方包路径,以便您轻松识别您的APK
输出将是
现在使用以下代码拉出该包:
如果您在
C:>\
中执行了上面的cmd,那么您将在那里找到该包 .我已经看到很多这个问题的解决方案要么你必须手机根,要么你必须安装一个应用程序 . 然后经过大量的谷歌搜索我得到了 solution for non rooted/rooted phones.
列出到目前为止您使用的应用程序 .
然后你可以选择一个应用程序,例如twitter
An important thing here is to not set up a password for encrypt your backup
这将创建一个名为backup.ap的文件,但您仍然无法打开它 . 为此,您必须再次提取它,但使用dd命令 .
在此之后,您所要做的就是提取tar内容并完成 .
希望它适合你们
适用于所有Android版本的一个班轮:
完成@Yojimbo的回答,这就是我所做的(仅限Linux / Mac,不能在Windows上开箱即用......也许在git的bash shell中):
这是丑陋的bash,但工作:)
编辑:它不再适用于AndroidM:所有文件在另一个目录下命名为“base.apk” . 应该“微不足道”来修复 .
在unix系统上,您可以尝试以下功能:
Example :
android_pull_apk com.android.contacts
Note :识别包裹:
adb shell pm list packages
如上所述,您可以使用adb中的pull命令获取apk .
因为,您正在谈论已安装的应用程序,请继续查看Android文件系统的 /data/app 目录 . 你会在那里找到APK .
然后使用adb命令 - adb pull /data/data/appname.apk
如果您知道(或者如果你可以"guess")
.apk
的路径(它的格式似乎是/data/app/com.example.someapp-{1,2,..}.apk
,那么你也可以从/data/app
复制它 . 这甚至可以在我的非root用户手机上运行 .只需使用一个终端模拟器应用程序(如this one)并运行:
然后,您可以将其从SD卡移动到您想要的任何位置(或将其附加到电子邮件等) . 最后一点可能在技术上是可选的,但是在尝试使用
.apk
文件时,它会让您的生活更轻松 .这里概述的程序不适用于Android 7(Nougat)[可能还有Android 6,但我无法验证] . 您不能直接在Nougat下拉取.apk文件(除非在root模式下,但需要root电话) . 但是,您可以使用adb shell将.apk复制到手机上的备用路径(例如/ sdcard / Download),然后您可以从备用路径执行adb pull .
试试这个一行bash命令来备份你的所有应用:
此命令派生自Firelord's script . 我刚刚将所有apks重命名为他们的包名以解决elcuco's script的问题,即同样的
base.apk
文件在Android 6.0 "Marshmallow"及更高版本上被覆盖 .请注意,此命令仅备份第三方应用程序,因为我没有看到备份内置应用程序的重点 . 但是如果你想备份系统应用程序,只需省略
-3
选项 .我有
does not exist error
这是我如何使它工作
这是你如何做到的:
在您的设备中下载并安装APK Extractor . 它是免费的,几乎在所有Android设备中都兼容 . 另一个优点是它甚至不需要root或任何工作 . 安装完成后,启动它 . 在那里,您将看到设备中的应用列表,其中包括您稍后安装的应用以及系统应用 . 长按任何要提取的应用程序(您可以一次选择多个或所有应用程序),然后单击顶部显示的提取选项 . 您还可以选择通过蓝牙或消息进行分享 . 您已完成,您将看到提取的应用程序为AppName_AppPackage_AppVersionName_AppVersionCode.apk,默认情况下将保存在路径/ sdcard / ExtractedApks /中 .
有关how to extract apk files in android的详细说明,请访问:http://appslova.com/how-to-extract-apk-files-in-android/
所有这些答案都需要为从设备检索的每个apk文件执行多个步骤 . 1.确定包名称,2 . 找到文件,然后3.下载它 . 我为任何匹配给定正则表达式的应用程序构建了一个简单的apk_grabber python script,然后将这些apks反编译成jar文件 .
从设备下载APK到桌面的步骤
A) 确保您正在运行(模拟器/真实设备) . 要检查使用此命令
B) 选择设备中安装的所有可用包列表 . 您可以使用grep命令选择要下载的特定包 .
输出(可用包列表)
C) 从上面的链接复制包(您要下载的包) . 从我们的案例中我选择这个(com.example.myapplication)包
产量
D) 最后,从你的(模拟器/真实设备)下载APK
示例:尝试在本地计算机(Mac)中提取此CertInstaller.apk文件
E) 在您的本地目录中确认
我没有使用代码从移动设备中提取.apk文件,但我一直在使用软件从移动设备中提取.apk文件,我使用过的软件在谷歌播放链接下方:
ES File Explorer File Manager
ASTRO Cloud & File Manager 3. Software Data Cable
希望它能帮到你 .
想要非常非常舒适的1分钟解决方案?
只是你这个应用程序https://play.google.com/store/apps/details?id=com.cvinfo.filemanager(来自谷歌播放的智能文件管理器) .
点击"apps",选择一个并点按"backup" . 它将在
app_backup
文件夹中的文件系统上结束;)又一个bash脚本(即适用于大多数基于unix的系统) . 基于the answer by Pedro Rodrigues,但稍微容易使用 .
对Pedro版本的改进:
原创方法在Android 7上对我不起作用:
adb pull
一直抱怨no such file or directory
而adb shell
可以访问该文件 . 因此我使用了不同的方法,临时文件 .在没有参数的情况下启动时,我的脚本将只列出所有可用的包 . 提供部分包名称时,它将尝试猜测完整的包名称 . 如果有几种可能的扩展,它会抱怨 .
我没有硬编码目标路径;而是将APK保存到当前工作目录 .
将其保存到可执行文件:
最简单的一个是:在手机上安装“ShareIt”应用程序 . 现在在PC或其他手机中安装shareIt应用程序 . 现在,从安装了应用程序的手机,打开ShareIt并发送 . 在其他方面手机或PC,打开ShareIt并接收 .
打开您希望从手机中提取apk的应用程序 .
获取当前打开的应用:
4.复制你到达sdcard目录的路径
5.Pull apk
没有Root,也没有ADB工具所需的方法 . 从Play商店安装MyAppSharer app .
我真的很喜欢这些答案 . 大多数要导出和重命名所有脚本的脚本都是用Bash编写的 . 我做了一个小的Perl脚本,它做了同样的事情(它应该在Perl for windows和linux上工作,只在Ubuntu上测试) .
download-apk.pl
确保adb(.exe)位于您的路径或同一目录中
连接手机
运行download-apk.pl
输出类似于:
这对于正在寻找 non technical 答案的人有帮助
这很简单 hack
从google play store下载应用程序
App Share/Send Pro
. 选择要发送的应用程序和方法发送应用程序 .我通常使用蓝牙将应用程序发送到我的电脑或其他手机 .