Как получить APK установленного приложения без рут-доступа?

Я пытаюсь извлечь APK-файл установленного Android-приложения БЕЗ рут-прав.

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

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

 Richard Le Mesurier30 июл. 2018 г., 15:35
Насколько я понимаю, @pinas спрашивал, как программировать это программно - ссылаясь на приложения, которые делают это так, как будто говорят «Эти приложения делают это, но как?». "В ожидании" причина здесь неправильна по моему мнению из-за этого.
Возможный дубликатHow do I get an apk file from an Android device?
 gliptak16 янв. 2013 г., 23:58
 Academy of Programmer07 июл. 2017 г., 07:46
 Wahib Ul Haq22 дек. 2012 г., 22:03
Я думаю, что на этот вопрос уже дан ответ. Пожалуйста, посмотрите наstackoverflow.com/a/12197924/1016544

Ответы на вопрос(11)

Вы можете сделать это с помощью 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);
}
Решение Вопроса

разрешения для этого каталога: 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

 11 авг. 2017 г., 04:16
@ 0xcaff Android сильно изменился за 5 лет, прошедших с момента получения этого ответа; возможно, этот путь является одним из таких изменений. Вы должны иметь возможность войти в систему и найти файл вручную, чтобы найти путь, подходящий для вашей версии операционной системы.
 27 дек. 2013 г., 22:20
Я использовал это на устройстве.stackoverflow.com/a/5097838/1224741
 10 сент. 2013 г., 05:43
Чтобы получить фактическое имя файла APK, используйте путь adb shell pm your-package-name. Смотрите этот вопрос для более подробного ответаstackoverflow.com/questions/4032960/…
 07 июн. 2013 г., 14:16
Чтобы сделать это из командной строки, используйтеadb shell pm list packages чтобы получить список установленных пакетов, выберите нужный пакет, добавьте-1.apk к нему, и вытащить его из/data/app, Пример: если имя пакетаorg.mozilla.firefoxиспользоватьadb pull /data/app/org.mozilla.firefox-1.apk.
 16 сент. 2016 г., 12:46
для леденца путь apk будет /data/app/your-package-name-1/base.apk

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

// in oncreate
   PackageManager pm = getPackageManager(); 
   for (ApplicationInfo app : pm..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

Google Play и установите домашнюю папку/system/ , Тогда вы даже можете пойти в/ .

нажмите кнопку меню в левом верхнем углу (три горизонтальные полосы) - & gt; в разделе «Библиотеки» выберите «Приложения».

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

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

Get the full path name of the APK file for the desired package.

adb shell pm path com.example.someapp

This gives the output as: package:/data/app/com.example.someapp-2.apk.

Pull the APK file from the Android device to the development box.

adb pull /data/app/com.example.someapp-2.apk
 14 июн. 2016 г., 15:03
В какую папку на локальной машине съемника заходит apk? РЕДАКТИРОВАТЬ: NVM, в каком бы каталоге вы ни находились, когда выполняли извлечение adb ...
 17 авг. 2018 г., 18:43
@zelanix после выполнения adb pull, где я могу получить файл .apk. Спасибо
 03 нояб. 2014 г., 13:31
Можно подтвердить, что это решение работало на устройстве без прав root, хотя для этого нужно знать имя пакета до первой команды! Использовать & quot; пакеты adb shell pm list & apos; чтобы получить список всех пакетов на телефоне, если вы не уверены в названии пакета нужного вам приложения
 29 сент. 2017 г., 22:38
@IgorGanapolsky попробуйте использовать adb pull /data/app/com.example.someapp-2/base.apk
 22 июн. 2016 г., 20:15
Я получаю ошибку:remote object /data/.... doesn't exist

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)
check the list of installed apk's (following command also list the path where it is installed and package name). adb shell pm list packages -f use adb pull /package_path/package name /path_in_pc (package path and package name one can get from above command 1.)
 04 февр. 2017 г., 16:32
Вы должны добавитьsuОднако, чтобы эта команда работала.

На Nougat (7.0) запускается версия Androidadb shell pm list packages перечислить пакеты, установленные на устройстве. Тогда бегиadb shell pm path your-package-name показать путь апк. После использования ADB скопировать пакет в Загрузкиadb shell cp /data/app/com.test-1/base.apk /storage/emulated/0/Download. Then pull the apk from Downloads to your machine by running adb pull /storage/emulated/0/Download/base.apk.

ot. это не так элегантно, но работает все время.

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

Step 2: в окне cmd ПК введите следующие команды:

 adb shell dumpsys activity a > dump.txt

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

Step 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 

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

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

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

Use your device as debugging device. On your phone: Settings > Applications > Development and enable USB debugging, see http://developer.android.com/tools/device.html In Eclipse, open DDMS-window: Window > Open Perspective > Other... > DDMS, see http://developer.android.com/tools/debugging/ddms.html If you can't see your device try (re)installing USB-Driver for your device In middle pane select tab "File Explorer" and go to system > app Now you can select one or more files and then click the "Pull a file from the device" icon at the top (right to the tabs) Select target folder - tada!
 24 мар. 2015 г., 15:32
В / system / app есть только системные приложения (или предустановленные приложения).

Ваш ответ на вопрос