Как получить файл apk с устройства Android? - PullRequest
425 голосов
/ 27 октября 2010

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

Ответы [ 24 ]

1391 голосов
/ 02 августа 2013

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

Вывод будет выглядеть примерно так
пакет: /data/app/com.example.someapp-2.apk
или
пакет: /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
107 голосов
/ 30 августа 2013

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

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

84 голосов
/ 27 октября 2010

Используйте 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: not to stat удаленный объект», который указывает, что у вас нет необходимых разрешений. Я запустил это на некоренном Moto Z2 и смог загрузить ВСЕ APK, которые я не удалил (см. Ниже), кроме youtube.

adb shell pm uninstall --user 0 com.android.cellbroadcastreceiver   <--- kills presidential alert app!

(для просмотра пользователей запустите adb shell pm список пользователей) Это способ удалить / удалить (не с телефона, так как он возвращается с заводским сбросом) почти ЛЮБОЕ приложение БЕЗ рута, ВКЛЮЧАЯ системные приложения (намек на раздражающее приложение обновления, которое обновляет вашу телефонную линию, или нет быть найденным путём поиска "ccc")

52 голосов
/ 16 июня 2013

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

Список приложений, которые вы получили до сих пор.

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

Надеюсь, у вас все получится, ребята

18 голосов
/ 13 февраля 2018
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)
9 голосов
/ 10 июня 2018

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

adb shell 'cat `pm path com.example.name | cut -d':' -f2`' > app.apk
8 голосов
/ 09 декабря 2015

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

ЭтоЭто ужасный Bash, но работает:)

РЕДАКТИРОВАТЬ: Это больше не работает на AndroidM: все файлы с именем «base.apk» под другим каталогом.Должно быть "тривиальным", чтобы исправить.

7 голосов
/ 17 апреля 2017

В системах 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 голосов
/ 30 мая 2012

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

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

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

5 голосов
/ 25 апреля 2014

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

Просто используйте приложение Terminal Emulator (например, this ) и запустите:

# 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.

...