Получить APK установленного приложения

Я ищу способ извлечь APK файл установленного приложения Android БЕЗ разрешения root.

Я думал, что это невозможно, потому что все файлы APK для не-системных приложений расположены в /data/app, и для доступа к этой папке требуется разрешение root. Затем я обнаружил, что в Google Play есть множество приложений, которые, похоже, имеют доступ к файлам APK даже на ненагруженных устройствах.

Может ли кто-нибудь сказать мне, как это возможно? Нет ли резервных приложений, которые резервируют файлы APK без root?

Ответ 1

Доступ к /data/app возможен без разрешения root; разрешениями для этого каталога являются rwxrwx-x. Выполнить разрешение в каталоге означает, что вы можете получить к нему доступ, однако отсутствие разрешения на чтение означает, что вы не можете получить список его содержимого, поэтому для доступа к нему вы должны знать имя файла, к которому вы будете обращаться. Менеджер пакетов Android сообщит вам имя сохраненного apk для данного пакета.

Чтобы сделать это из командной строки, используйте adb shell pm list packages, чтобы получить список установленных пакетов и найти нужный пакет.

С именем пакета мы можем получить фактическое имя файла и расположение APK с помощью adb shell pm path your-package-name.

И зная полный каталог, мы можем, наконец, вытащить adb, используя adb pull full/directory/of/the.apk

Подтвердить @tarn, указав, что в Lollipop путь apk будет/data/app/your-package-name-1/base.apk

Ответ 2

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

  • Получить полное имя файла APK для нужного пакета.

    adb shell pm path com.example.someapp
    

    Это дает результат как: package:/data/app/com.example.someapp-2.apk.

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

    adb pull /data/app/com.example.someapp-2.apk
    

Ответ 3

Вам не нужны разрешения ROOT для получения списка установленных приложений.

Вы можете сделать это с помощью пакета android PackageManager.

Ниже представлен небольшой фрагмент кода.

final PackageManager pm = getPackageManager();
//get a list of installed apps.
List<ApplicationInfo> packages =  pm.getInstalledApplications(PackageManager.GET_META_DATA);

for (ApplicationInfo packageInfo : packages) {
    Log.d(TAG, "Installed package :" + packageInfo.packageName);
    Log.d(TAG, "Apk file path:" + packageInfo.sourceDir);
}

Ответ 4

В игровом магазине Google есть приложение "Apk extracter". С помощью этого приложения вы можете получить файл .apk установленного приложения. Получите и наслаждайтесь!

Ответ 5

  • проверьте список установленных apk (следующая команда также перечисляет путь, где он установлен, и имя пакета). пакеты списка пакетов adb pm -f
  • использовать adb pull/package_path/имя пакета /path _in_pc (путь пакета и имя пакета можно получить из команды 1).

Ответ 6

Когда у вас установлен Eclipse для Android:

  • Используйте устройство в качестве устройства для отладки. На телефоне: Настройки > Приложения > Разработка и включение отладки USB, см. http://developer.android.com/tools/device.html
  • В Eclipse откройте окно DDMS: Window > Open Perspective > Other... > DDMS, см. http://developer.android.com/tools/debugging/ddms.html
  • Если вы не видите свое устройство, попробуйте (повторно) установить USB-драйвер для вашего Устройство
  • В средней панели выберите вкладку "Проводник" и перейдите в систему > приложение
  • Теперь вы можете выбрать один или несколько файлов, а затем нажать "Вытянуть файл" от значка устройства вверху (справа на вкладках)
  • Выберите целевую папку - tada!

Ответ 7

В Nougat (7.0) версия Android запускает adb shell pm list packages, чтобы отобразить пакеты, установленные на устройстве. Затем запустите adb shell pm path your-package-name, чтобы показать путь apk. После использования adb скопируйте пакет в Загрузки adb shell cp /data/app/com.test-1/base.apk /storage/emulated/0/Download. Затем вытащите apk из Загрузки на ваш компьютер, запустив adb pull /storage/emulated/0/Download/base.apk.

Ответ 8

Откройте ES explorer → нажмите кнопку меню в левом верхнем углу (три горизонтальные полосы) → в разделе "Библиотеки" выберите APP.

Таким образом, вы получаете список всех пользовательских приложений. Найдите свое приложение и выберите его с длинным нажатием на него. Затем нажмите "Дополнительно" в правом нижнем углу и выберите "Отправить". Затем вы можете использовать различные параметры, например. вы можете выбрать "ES Save To", чтобы сохранить файл .apk в своем домашнем каталоге или где-либо еще.

Ответ 9

Или вы можете получить "Передачу файлов Bluetooth" в Google Play и установить домашнюю папку на /system/. Тогда вы можете даже перейти к /.

Ответ 10

Список PackageManager.getInstalledApplications() предоставит вам список установленных приложений, а ApplicationInfo.sourceDir - это путь к файлу .apk.

// in oncreate
   PackageManager pm = getPackageManager(); 
   for (ApplicationInfo app : pm.getInstalledApplications(0)) {
 Log.d("PackageList", "package: " + app.packageName + ", sourceDir: " + app.sourceDir);
 }

//output is something like
D/PackageList(5010): package: com.example.xmlparse, sourceDir: /data/app   /com.example.xmlparse-2.apk
D/PackageList(5010): package: com.examples.android.calendar, sourceDir: /data/app/com.examples.android.calendar-2.apk
D/PackageList(5010): package: com.facebook.katana, sourceDir: /data/app/com.facebook.katana-1.apk
D/PackageList(5010): package: com.facebook.samples.profilepicture, sourceDir: /data/app/com.facebook.samples.profilepicture-1.apk
D/PackageList(5010): package: com.facebook.samples.sessionlogin, sourceDir: /data/app/com.facebook.samples.sessionlogin-1.apk
D/PackageList(5010): package: com.fitworld, sourceDir: /data/app/com.fitworld-2.apk
D/PackageList(5010): package: com.flipkart.android, sourceDir: /data/app/com.flipkart.android-1.apk
D/PackageList(5010): package: com.fmm.dm, sourceDir: /system/app/FmmDM.apk
D/PackageList(5010): package: com.fmm.ds, sourceDir: /system/app/FmmDS.apk

Ответ 11

У меня есть решение, недавно я попробовал. но я обнаружил, что когда вы обмениваетесь приложениями с zapya, он хранит расширения .apk одного и того же файла в папке приложений каталога zapya на вашем устройстве, где вы можете получить файл apk приложения, установленного на вашем устройстве.

Ответ 12

Я нашел способ получить имя пакета APK в устройстве без полномочий root. он не очень изящный, но работает все время.

Шаг 1: на вашем устройстве откройте целевой APK

Шаг 2: в окне PC cmd введите следующие команды:

 adb shell dumpsys activity a > dump.txt

так как вывод этой команды многочисленный, рекомендуется перенаправление к файлу.

Шаг 3: откройте этот файл dump.txt любым редактором.

для устройства для Android 4.4:
начало файла будет выглядеть так:

ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)  
  Main stack:  
  * TaskRecord{41aa9ed0 #4 A com.tencent.mm U 0}  
    numActivities=1 rootWasReset=true userId=0  
    affinity=com.tencent.mm  
    intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10600000 cmp=com.tencent.mm/.ui.LauncherUI}  
    realActivity=com.tencent.mm/.ui.LauncherUI  
    askedCompatMode=false  
    lastThumbnail=null lastDescription=null  
    lastActiveTime=19915965 (inactive for 10s)  
    * Hist #9: ActivityRecord{41ba1a30 u0 com.tencent.mm/.ui.LauncherUI}  
        packageName=com.tencent.mm processName=com.tencent.mm 

имя пакета находится в третьей строке, com.tencent.mm для этого примера.

для Android 4.4 и более поздних версий:
выход dumpsys немного изменился. попробуйте найти "Stack # 1", имя пакета будет очень близко под ним.

Кроме того, поиск "baseDir", вы найдете полный путь к файлу apk!