Как получить файл apk с устройства Android?

Как получить файл apk с устройства Android? Или как перенести файл apk с устройства на систему?

26 ответов

Решение

Используйте 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) Это способ удалить / удалить (не с телефона, так как он возвращается с сбросом к заводским настройкам) почти ЛЮБОЕ приложение без корневых включений системных приложений (подсказка раздражающее приложение обновления, которое обновляет ваш телефон) Выровняйте это или нет, можно найти с помощью grepping для "ccc")

Ни одно из этих предложений не помогло мне, потому что Android добавлял порядковый номер к имени пакета, чтобы получить окончательное имя файла APK (это может варьироваться в зависимости от версии ОС Android). Следующая последовательность команд - это то, что сработало для меня на некорневом устройстве:

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

3) Потяните APK-файл с устройства Android в окно разработки.

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:>\ тогда вы найдете этот пакет там.

Действия по загрузке 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)

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/

Я видел множество решений этой проблемы: либо вам нужно рутировать свой телефон, либо вам нужно установить приложение. Затем, после долгих поисков, я получил это решение для телефонов без рута / рута.

Чтобы перечислить, какие приложения вы получили до сих пор.

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, и все готово.

Надеюсь, это работает для вас, ребята

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

В системах 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

Завершая ответ @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" под другим каталогом. Должно быть "тривиальным", чтобы исправить.

Попробуйте эту команду 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 "Зефир" и выше.

Обратите внимание, что эта команда выполняет резервное копирование только сторонних приложений, потому что я не вижу смысла в резервном копировании встроенных приложений. Но если вы хотите создать резервную копию системных приложений, просто опустите -3 вариант.

Как сказано выше, вы можете получить apk, используя команду pull в adb.

Поскольку вы говорите об установленных приложениях, продолжайте и посмотрите в каталог / data / app вашей файловой системы Android. Вы найдете APK там.

Затем используйте команду adb - adb pull /data/data/appname.apk

  1. Откройте приложение, из которого вы хотите извлечь APK из вашего телефона.
  2. Получить текущее открытое приложение с:

    adb shell dumpsys activity activities | grep mFocusedActivity
    
  3. Получить путь к имени пакета

    adb shell pm path <packagename.apk>
    

4. Скопируйте путь, который вы получили в каталог SDCard

    adb shell cp /data/app/<packagename.apk> /sdcard

5. Потяните апк

    adb pull /sdcard/base.apk

В июне 2023 года используйте:

      adb shell pm list packages --user 0

чтобы перечислить имена пакетов, затем:

      adb shell pm path your.package.name
adb pull /data/app/your/path/to/package/foo.apk

чтобы получить пакет(ы).

Если вы знаете (или если вы можете "угадать") путь к .apk (похоже, формата /data/app/com.example.someapp-{1,2,..}.apk к, то вы можете просто скопировать его из /data/app также. Это работало даже на моем обычном Android-телефоне без рута.

Просто используйте приложение 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 из альтернативного пути.

Все эти ответы требуют нескольких шагов для каждого файла apk, полученного с устройства. 1. определить имя пакета, 2. найти файл и 3. загрузить его. Я построил простой apk_grabber Сценарий python, чтобы сделать это для любого приложения, которое соответствует заданному регулярному выражению, а затем декомпилирует эти apks в файлы jar.

Я получил 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)

Вот как вы это делаете:

Скачайте и установите APK Extractor на ваше устройство. Это бесплатно и совместимо практически со всеми устройствами Android. Еще один плюс - он даже не требует рута или чего-либо еще для работы. После того, как он установлен, запустите его. Там вы увидите список приложений, которые находятся на вашем устройстве, включая приложения, которые вы установили позже, а также системные приложения. Длительно нажмите на любое приложение, которое вы хотите извлечь (вы можете выбрать несколько или все приложения одновременно), и нажмите на опцию извлечения, которую вы видите в верхней части. У вас также будет возможность поделиться через Bluetooth или обмен сообщениями. Все готово, вы увидите извлеченные приложения как AppName_AppPackage_AppVersionName_AppVersionCode.apk, которые по умолчанию будут сохранены в пути /sdcard/ExtractedApks/.

Для подробного описания того, как извлечь apk файлы в Android, посетите: http://appslova.com/how-to-extract-apk-files-in-android/

Я не использовал код для извлечения файла.apk с мобильного телефона, но я использовал программное обеспечение для извлечения файла.apk с мобильного телефона и программное обеспечение, которое я использовал ниже со ссылкой на Google Play:

  1. ES File Explorer Файловый менеджер
  2. ASTRO Cloud & File Manager3. Программный кабель для передачи данных

Надеюсь, это поможет вам.

Нет рута и нет инструментов ADB требуется метод. Установите приложение MyAppSharer из магазина игр.

Мне очень понравились все эти ответы. Большинство сценариев для экспорта и переименования всех написаны на 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;
}
  1. Убедитесь, что adb(.exe) находится в вашем пути или в том же каталоге
  2. Подключи свой телефон
  3. Запустите 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.

Хотите очень, очень удобное решение за 1 минуту?

только вам это приложение https://play.google.com/store/apps/details?id=com.cvinfo.filemanager (умный файловый менеджер из Google Play).

нажмите "приложения", выберите один и нажмите "резервное копирование". это закончится в вашей файловой системе в app_backup папка;)

Лично я предпочитаю стороннее приложение с открытым исходным кодом под названием « Apk Extractor » от F-Droid, используя нерутированное устройство Samsung Android 13, поскольку использование приложения выполняется одним щелчком мыши, и вы извлекли бы APK-файл вInternal storage -> Downloads -> apk -> your_apk.apk

Еще один скрипт bash (т.е. будет работать для большинства систем на основе Unix). Основано на ответе Педро Родригеса, но немного проще в использовании.

Улучшения по сравнению с версией Педро:

  1. Оригинальный подход не работал для меня на Android 7: adb pull продолжал жаловаться на no such file or directory в то время как adb shell мог получить доступ к файлу. Поэтому я использовал другой подход, с временным файлом.
  2. При запуске без аргументов мой скрипт просто перечислит все доступные пакеты. Когда указано частичное имя пакета, он попытается угадать полное имя пакета. Он будет жаловаться, если есть несколько возможных расширений.
  3. Я не прописываю путь назначения; вместо этого APK сохраняются в текущем рабочем каталоге.

Сохраните это в исполняемый файл:

#!/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\""

Это поможет тем, кто ищет нетехнический ответ

Это простой взлом

Скачать приложение App Share/Send Pro из магазина Google Play. Выберите приложение, которое вы хотите отправить, и метод отправки приложения.

Я обычно использую Bluetooth для отправки приложений на мой компьютер или другой телефон.

Самый простой из них: установить приложение "ShareIt" на телефон. Теперь установите приложение shareIt на ПК или другой телефон. Теперь с телефона, на котором установлено приложение, откройте ShareIt и отправьте. На другом телефоне или ПК откройте ShareIt и получите.

Другие вопросы по тегам