it-roy-ru.com

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

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

405
Finder

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

71
Maurits Rijk

Ни одно из этих предложений не помогло мне, потому что 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
1322
Yojimbo

Корень не требуется:

Этот код получит путь к сторонним пакетам с именем, чтобы вы могли легко определить свой 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:>\, то вы найдете этот пакет там.

102
Faris Al-Abed

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

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

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

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

51
Paulo Miguel Almeida
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)
17
RVR

Один лайнер, который работает для всех версий Android:

adb Shell 'cat `pm path com.example.name | cut -d':' -f2`' > app.apk
9
Vitaly Dyatlov

Завершая ответ @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

Это уродливый баш, но работает :)

Правка: Он больше не работает на AndroidM: все файлы называются «base.apk» под другим каталогом. Должно быть "тривиальным", чтобы исправить.

8
elcuco

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

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

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

6
aditya.gupta

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

Если вы знаете (или можете «угадать») путь к .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.

5
m01

Процедуры, описанные здесь, не работают для Android 7 (Nougat) [и, возможно, Android 6, но я не могу проверить]. Вы не можете извлекать файлы .apk непосредственно под Nougat (если только не в режиме root, но для этого требуется рутованный телефон). Но вы можете скопировать файл .apk по альтернативному пути (скажем,/sdcard/Download) на телефоне, используя оболочку adb, затем вы можете выполнить извлечение adb из альтернативного пути.

5
SamG

Попробуйте эту команду 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.

4
HEXcube

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

3
Jeff Brateman

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

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

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

3
Pramod Mahato

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

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

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

нажмите «приложения», выберите один и нажмите «резервное копирование». он попадет в вашу файловую систему в папку app_backup;)

1
user3350906

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

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

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

1
surhidamatya

Еще один сценарий 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\""
0
MarSoft

Никаких рутов и инструментов ADB не требуется ........ Установить MyAppSharer app из Play Store.

0
moberme

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

Мне очень понравились все эти ответы . Большинство сценариев для экспорта и переименования все они были написаны на 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.
0
Gerben Versluis

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

0
Sirsendu
  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
0
Bryan Ibrahim