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

StackOverflow https://stackoverflow.com/questions/4032960

  •  26-09-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

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

(Для просмотра пользователей RUN ADB Shell PM Список пользователей) Это способ удаления / удаления (не с телефона, так как он возвращается с настроенным сбросом) ЛЮБЫЕ Приложение без рута, включая системные приложения (подсказки приложение Annoying Update, которое обновляет вашу телефонную линию, или нет, можно найти, Greping для «CCC»)

Другие советы

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

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

Этот код получит путь пакетов 3-го вечеринок с именем, чтобы вы могли легко идентифицировать свой APK

adb shell pm list packages -f -3

Выход будет

Пакет: /data/app/xx.xx.xx.apk=yy.yy.yy.yy.

Теперь потяните этот пакет, используя следующий код:

adb pull /data/app/XX.XX.XX.apk

Если вы выполнили выше CMD в C:>\ Тогда вы найдете этот пакет там.

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

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

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

После этого все, что вам нужно сделать, это извлечь контент TAL, и это сделано.

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

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 ... возможно, в Bash Git Shell):

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» под другим DIR. Должно быть «тривиально», чтобы исправить.

В системах 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 с устройства на рабочий стол

А) Убедитесь, что ваш бег (эмулятор / реальное устройство). Чтобы проверить эту команду

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

В) Скопируйте пакет (который вам нравится скачать) из вышеуказанной ссылки. Сформируйте наш случай, я выбираю этот пакет (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/

Е) Подтвердите в вашем локальном каталоге

ls -la /Users/$(whoami)/Documents/

Как сказано выше, вы можете получить APK с помощью команды Thurt в ADB.

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

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

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

Просто используйте приложение эмулятора терминала (например, Вот этот) и запустить:

# 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 (если в корневом режиме, но это требует укорениваемого телефона). Но вы можете скопировать .apk на альтернативный путь (скажем / SDCard / Download) на телефоне с помощью оболочки ADB, то вы можете сделать вытащить ADB из альтернативного пути.

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

Эта команда получена из Сценарий Ферворда. Отказ Я только что переименовал все APK в имена пакетов для решения проблемы с Сценарий Elcuco, то есть то же самое base.apk Файл перезаписан на Android 6.0 "зефир" и выше.

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

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

Загрузите и установите APK Externor на своем устройстве. Он бесплатный и совместим практически во всех устройствах Android. Еще одна точка плюс - это даже не требует рут или что-либо для работы. После того, как вы установите его, запустите его. Там вы увидите список приложений, которые находятся в вашем устройстве, которые включают в себя приложения, которые вы установлены позже, вместе с системными приложениями. Длительное Нажмите любое приложение, которое вы хотите извлечь (вы можете выбрать несколько или все приложения одновременно), и щелкнули опцию извлечения, которую вы видите в верхней части. У вас также будет возможность поделиться через Bluetooth или обмена сообщениями. Вы сделали, вы увидите извлеченные приложения как AppName_appPackage_appversionName_appversionCode.apk, который будет сохранен в пути / SDCard / Extakedapks / по умолчанию.

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

Все эти ответы требуют нескольких шагов для каждого файла APK, извлеченного с устройства. 1. Определите имя пакета, 2. Найдите файл и 3. Скачать его. Я построил простой apk_grabber Питонский скрипт Для этого для любого приложения, которое соответствует данному регулярному выражению, а затем декомпилировать эти APK в файлы JAR.

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

  1. ES File Explorer File Manager
  2. Astro Cloud & File Manager 3.Программный кабель данных

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

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

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

Нажмите «Приложения», выберите One и нажмите «Backup». Это закончится в вашей файловой системе в 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). На основе Ответ Педро Родригес, но немного проще в использовании.

Улучшения по версии PEDRO:

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

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

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

Проще всего есть: Установите приложение «ShareIt» на телефоне. Теперь установите приложение ShareIt на ПК или другом телефоне. Теперь с телефона, где установлено приложение, открыть ShareIt и отправить. На другом телефоне или ПК, открыть долю и получить.

  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.pull apk.

    adb pull /sdcard/base.apk

Мне очень понравилось все эти ответы. Большинство скриптов для экспорта и переименования всех из них были написаны в 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. Запустить doading-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.

Это поможет для того, кто ищет не технический отвечать

Это просто взломать

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top