Ответы:
Используйте adb . С помощью adb pull вы можете копировать файлы с вашего устройства на вашу систему, когда устройство подключено через 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
Если вы получаете «adb: error: не удалось определить удаленный объект», это означает, что у вас нет необходимых разрешений. Я запустил это на некоренном Moto Z2 и смог загрузить ВСЕ APK, которые я не удалял (см. Ниже), кроме youtube.
adb shell pm uninstall --user 0 com.android.cellbroadcastreceiver <--- kills presidential alert app!
(для просмотра пользователей запустите adb shell pm list users) Это способ удалить / удалить (не с телефона, так как он возвращается с заводским сбросом) почти ЛЮБОЕ приложение БЕЗ root, включая системные приложения (подсказка раздражающее приложение обновления, которое обновляет ваш телефон) строка это или нет, можно найти с помощью grepping для "ccc")
adb shell pm list packages
и его полный путь, а adb shell pm path your.package.name
затем на своем компьютере, вы можете простоadb pull /full/path/to/your.apk
Ни одно из этих предложений не помогло мне, потому что Android добавлял порядковый номер к имени пакета, чтобы получить окончательное имя файла APK. В более поздних версиях Android (Oreo и Pie) добавляется непредсказуемая случайная строка. Следующая последовательность команд - это то, что сработало для меня на некорневом устройстве :
1) Определите имя пакета приложения, например, «com.example.someapp». Пропустите этот шаг, если вы уже знаете имя пакета.
adb shell pm list packages
Просмотрите список имен пакетов и попробуйте найти соответствие между рассматриваемым приложением и именем пакета. Обычно это легко, но обратите внимание, что имя пакета может быть совершенно не связано с именем приложения. Если вы не можете распознать приложение из списка названий пакетов, попробуйте найти приложение в Google Play с помощью браузера. URL-адрес приложения в Google Play содержит название пакета.
2) Получить полный путь к файлу APK для нужного пакета.
adb shell pm path com.example.someapp
Вывод будет выглядеть примерно так
: package: /data/app/com.example.someapp-2.apk
или
package: /data/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
pm list packages
поддерживает -f
флаг, который перечисляет местоположение .apk для вас, как package:/data/app/com.google.android.apps.maps-1.apk=com.google.android.apps.maps
. Встроенная справка pm бесполезна, но pm также может фильтровать типы пакетов, см. Developer.android.com/studio/command-line/adb.html#pm для получения дополнительной информации. РЕДАКТИРОВАТЬ: только что заметил, что ответ ниже говорит об этом, но этот ответ не так проголосовал, как этот.
adb: error: remote object '/data/app/path.of.the.app-2/base.apk' does not exist
. Если я просматриваю эти папки с помощью файлового браузера, папки пусты.
adb shell
и затем cp PathToApk /sdcard/
и затем копируя с SDCard.
Корень не требуется:
Этот код получит путь к сторонним пакетам с именем, чтобы вы могли легко определить свой 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:>\
, то вы найдете этот пакет там.
-f -s
вместо-f -3
Я видел много решений этой проблемы: либо вам нужно рутировать свой телефон, либо вам нужно установить приложение. Затем, после долгих поисков, я получил это решение для нерутированных / рутированных телефонов.
Чтобы перечислить, какие приложения вы получили до сих пор.
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
После этого все, что вам нужно сделать, это извлечь содержимое tar, и все готово.
Надеюсь, это работает для вас, ребята
Действия по загрузке APK с устройства на рабочий стол
А) Убедитесь, что вы работаете (эмулятор / реальное устройство). Для проверки используйте эту команду
adb devices
Б) Выберите весь список доступных пакетов, установленных на вашем устройстве. Вы можете использовать команду 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/
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):
for i in $(adb shell pm list packages -f -3 | cut -d= -f 1 | cut -d ":" -f 2); do adb pull $i; done
Это уродливый баш, но работает :)
РЕДАКТИРОВАТЬ: Это больше не работает на 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, используя команду pull в adb.
Поскольку вы говорите об установленных приложениях, посмотрите каталог / data / app вашей файловой системы Android. Вы найдете APK там.
Затем используйте команду adb - adb pull /data/data/appname.apk
Попробуйте эту команду liner 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
Эта команда является производной от скрипта Повелителя огня . Я просто переименовал все apks в их имена пакетов для решения проблемы со скриптом elcuco , то есть тот же base.apk
файл перезаписывается на Android 6.0 «Marshmallow» и выше.
Обратите внимание, что эта команда выполняет резервное копирование только сторонних приложений, потому что я не вижу смысла в резервном копировании встроенных приложений. Но если вы хотите создать резервную копию системных приложений, просто опустите -3
опцию.
Если вы знаете (или если вы можете «угадать») путь к .apk
( кажется, что он имеет формат /data/app/com.example.someapp-{1,2,..}.apk
, то вы можете просто скопировать его из/data/app
. Это работало даже на моем обычном Android-телефоне без root-доступа.
Просто используйте приложение Terminal Emulator (например, это ) и запустите:
# 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 (Nougat) [и, возможно, Android 6, но я не могу проверить]. Вы не можете извлекать файлы .apk непосредственно под Nougat (если только не в режиме root, но для этого требуется рутованный телефон). Но вы можете скопировать .apk по альтернативному пути (скажем, / sdcard / Download) на телефоне, используя оболочку adb, затем вы можете выполнить извлечение adb из альтернативного пути.
adb shell
команды из комментария @Isa A) отлично работал на Android 7.1.1, не рутированный.
Получить текущее открытое приложение с:
adb shell dumpsys activity activities | grep mFocusedActivity
Получить путь к имени пакета
adb shell pm path <packagename.apk>
4. Скопируйте путь, который вы получили в каталог SDCard
adb shell cp /data/app/<packagename.apk> /sdcard
5. Потяните апк
adb pull /sdcard/base.apk
редактировать
Если шаг № 2 не работает, используйте это:
adb shell dumpsys window windows | grep mCurrentFocus
Вот как вы это делаете:
Скачайте и установите APK Extractor на ваше устройство. Он бесплатный и совместим практически со всеми устройствами Android. Еще один плюс - он даже не требует рута или чего-либо еще для работы. После того, как он установлен, запустите его. Там вы увидите список приложений, которые находятся на вашем устройстве, включая приложения, которые вы установили позже, а также системные приложения. Длительно нажмите на любое приложение, которое вы хотите извлечь (вы можете выбрать несколько или все приложения одновременно), и нажмите на опцию извлечения, которую вы видите в верхней части. У вас также будет возможность поделиться через Bluetooth или обмен сообщениями. Все готово, вы увидите извлеченные приложения как AppName_AppPackage_AppVersionName_AppVersionCode.apk, которые по умолчанию будут сохранены в пути / sdcard / ExtractedApks /.
Для подробного описания того, как извлечь apk-файлы в Android , посетите: http://appslova.com/how-to-extract-apk-files-in-android/
Все эти ответы требуют нескольких шагов для каждого файла apk, полученного с устройства. 1. определить имя пакета, 2. найти файл и 3. загрузить его. Я создал простой apk_grabber
скрипт на python, чтобы сделать это для любого приложения, соответствующего заданному регулярному выражению, а затем декомпилировал эти apks в файлы jar.
Я не использовал код для извлечения файла .apk с мобильного телефона, но я использовал программное обеспечение для извлечения файла .apk с мобильного телефона и программное обеспечение, которое я использовал ниже, со ссылкой Google Play:
Надеюсь, это поможет вам.
хотите очень, очень удобное решение за 1 минуту?
только вам это приложение https://play.google.com/store/apps/details?id=com.cvinfo.filemanager (умный файловый менеджер из Google Play).
нажмите «приложения», выберите один и нажмите «резервное копирование». это закончится на вашей файловой системе в app_backup
папке;)
Нет рута и нет инструментов ADB требуется метод. Установите приложение MyAppSharer из магазина игр.
Я получил 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). Основано на ответе Педро Родригеса , но немного проще в использовании.
Улучшения по сравнению с версией Педро:
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\""
Мне очень понравились все эти ответы. Большинство сценариев для экспорта и переименования всех написаны на Bash. Я сделал небольшой скрипт на 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;
}
Вывод похож на:
# ./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.
Это поможет тем, кто ищет нетехнический ответ
Это простой взлом
Загрузите приложение App Share/Send Pro
из магазина Google Play. Выберите приложение, которое вы хотите отправить, и метод отправки приложения.
Я обычно использую Bluetooth для отправки приложений на мой компьютер или другой телефон.