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

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

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

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


Доступ к/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


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

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

      adb shell pm path com.example.someapp  

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

  2. Вытяните файл APK с устройства Android на окно разработки.

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

После успешного извлечения APK-файл будет находиться в ../sdk/platform-tools/base.apk на вашем компьютере/ноутбуке.


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

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

      adb shell pm path com.example.someapp  

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

  2. Вытяните файл APK с устройства Android в окно разработки.

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

Местоположение APK после успешного извлечения будет в ../sdk/platform-tools /base.apk на вашем компьютере/ноутбуке.


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

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

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

  final PackageManager pm = getPackageManager ();//получить список установленных приложений.List  packages = pm.getInstalledApplications (PackageManager.GET_META_DATA); для (ApplicationInfo packageInfo: пакеты) {Log.d (TAG, «Установленный пакет:» + packageInfo.packageName);  Log.d (TAG, "Путь к файлу Apk:" + packageInfo.sourceDir);}  


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

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

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

  final PackageManager pm = getPackageManager ();//получаем список установленных приложений. List  packages = pm.getInstalledApplications (PackageManager.GET_META_DATA); for (ApplicationInfo packageInfo: packages) {Log.d (  TAG, «Установленный пакет:» + packageInfo.packageName);  Log.d (TAG, "Путь к файлу Apk:" + packageInfo.sourceDir);}  

  1. проверьте список установленных apk (в следующей команде также указывается путь, по которому он установлен, и имя пакета). adb shell pm list packages -f
  2. используйте adb pull/package_path/package name/path_in_pc (путь к пакету и имя пакета можно получить из команды 1 выше)


  1. проверьте список установленных apk (в следующей команде также указывается путь, по которому он установлен, и имя пакета). adb shell pm list packages -f
  2. использовать adb pull/package_path/имя пакета/path_in_pc (путь к пакету и имя пакета одно можно получить из приведенной выше команды 1.)

На 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 .


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


Если у вас установлена ​​разработка Eclipse для Android:

  • Используйте свое устройство как устройство отладки. На телефоне: Настройки> Приложения> Разработка и включите отладку по USB, см. Http://developer.android.com/tools/device.html
  • . В Eclipse откройте окно DDMS: Окно> Открыть перспективу > Другое …> DDMS, см. Http://developer.android.com/tools/debugging/ddms.html
  • Если вы не видите свое устройство, попробуйте (пере) установить USB- Драйвер для вашего устройства.
  • В средней панели выберите вкладку «Проводник» и перейдите в «Система»> «Приложение».
  • Теперь вы можете выбрать один или несколько файлов и затем нажать кнопку «Потянуть значок файла с устройства »вверху (справа от вкладок)
  • Выбрать целевую папку — тада!

Если у вас установлена ​​разработка Eclipse для Android:

  • Используйте свое устройство как устройство отладки. На телефоне: Настройки> Приложения> Разработка и включите отладку по USB, см. Http://developer.android.com/tools/device.html
  • . В Eclipse откройте окно DDMS: Окно> Открыть перспективу > Другое …> DDMS, см. Http://developer.android.com/tools/debugging/ddms.html
  • Если вы не видите свое устройство, попробуйте (пере) установить USB- Драйвер для вашего устройства.
  • В средней панели выберите вкладку «Проводник» и перейдите в «Система»> «Приложение».
  • Теперь вы можете выбрать один или несколько файлов и затем нажать кнопку «Потянуть значок файла с устройства »вверху (справа от вкладок)
  • Выбрать целевую папку — tada!

Я получил ошибку не существует

Вот как я заставляю это работать:

  adb shell pm list packages -f |  findstr zalopackage:/data/app/com.zing.zalo-1/base.apk=com.zing.zaloadb shellmido:/$ cp/data/app/com.zing.zalo-1/base.apk/sdcard/zalo  .apkmido:/$ exitadb pull/sdcard/zalo.apk Рабочий стол/sdcard/zalo.apk: вытащен 1 файл.  7,7 МБ/с (41895394 байта за 5.200 с)  


У меня возникла ошибка не существует

Вот как я заставляю это работать:

  adb shell pm list packages -f |  findstr zalopackage:/data/app/com.zing.zalo-1/base.apk=com.zing.zaloadb shellmido:/$ cp/data/app/com.zing.zalo-1/base.apk/sdcard/zalo  .apkmido:/$ exitadb pull/sdcard/zalo.apk Рабочий стол/sdcard/zalo. apk: вытащил 1 файл.  7,7 МБ/с (41895394 байта за 5.200 с)  

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

 //в oncreate  PackageManager pm = getPackageManager ();  для (ApplicationInfo app: pm.getInstalledApplications (0)) {Log.d ("PackageList", "package:" + app.packageName + ", sourceDir:" + app.sourceDir);  }//вывод выглядит примерно так: D/PackageList (5010): package: com.example.xmlparse, sourceDir:/data/app/com.example.xmlparse-2.apkD/PackageList(5010): package: com.examples.android  .calendar, sourceDir:/data/app/com.examples.android.calendar-2.apkD/PackageList(5010): package: com.facebook.katana, sourceDir:/data/app/com.facebook.katana-1.  apkD/PackageList (5010): пакет: com.facebook.samples.profilepicture, sourceDir:/data/app/com.facebook.samples.profilepicture-1.apkD/PackageList(5010): пакет: com.facebook.samples.sessionlogin  , sourceDir:/data/app/com.facebook.samples.sessionlogin-1.apkD/PackageList(5010): package: com.fitworld, sourceDir:/data/app/com.fitworld-2.apkD/PackageList(5010)  : пакет: com.flipkart.android, sourceDir:/data/app/com.flipkart.android-1.apkD/PackageList(5010): package: com.fmm.dm, sourceDir:/system/app/FmmDM.apkD/ PackageList (5010): пакет: com.fmm.ds, sourceDir:/system/app/FmmDS.apk  


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

 //в oncreate PackageManager pm = getPackageManager ();  для (ApplicationInfo app: pm.getInstalledApplications (0)) {Log.d ("PackageList", "package:" + app.packageName + ", sourceDir:" + app.sourceDir);  }//вывод выглядит примерно так: D/PackageList (5010): package: com.example.xmlparse, sourceDir:/data/app/com.example.xmlparse-2.apkD/PackageList(5010): package: com.examples.android  .calendar, sourceDir:/data/app/com.examples.android.calendar-2.apkD/PackageList(5010): package: com.facebook.katana, sourceDir:/data/app/com.facebook.katana-1.  apkD/PackageList (5010): пакет: com.facebook.samples.profilepicture, sourceDir:/data/app/com.facebook.samples.profilepicture-1.apkD/PackageList(5010): пакет: com.facebook.samples.sessionlogin  , sourceDir:/data/app/com.facebook.samples.sessionlogin-1.apkD/PackageList(5010): package: com.fitworld, sourceDir:/data/app/com.fitworld-2.apkD/PackageList(5010)  : пакет: com.flipkart.android, sourceDir:/data/app/com.flipkart.android-1.apkD/PackageList(5010): package: com.fmm.dm, sourceDir:/system/app/FmmDM.apkD/ Список пакетов (5010): пакет: com.fmm.ds, исходный каталог:/system/app/FmmDS. apk  

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

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

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

  adb shell dumpsys activity a> dump.txt  

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

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

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

  ACTIVITY MANAGER  ACTIVITIES (действия dumpsys) Главный стек: * 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 askCompatMode = false lastThumbnail = null lastDescription = null  lastActiveTime = 19915965 (неактивно 10 с) *  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 немного изменился . попробуйте выполнить поиск «Стек № 1», имя пакета будет очень близко под ним.

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


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

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

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

  adb shell dumpsys activity a> dump.txt  

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

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

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

  ACTIVITY MANAGER  ACTIVITIES (действия dumpsys) Главный стек: * 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 askCompatMode = false lastThumbnail = null lastDescription = null  lastActiveTime = 19915965 (неактивно 10 с) *  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 немного изменился. попробуйте выполнить поиск «Стек № 1», имя пакета будет очень близко под ним.

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


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

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


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

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


Или вы можете получить «Передача файлов по Bluetooth» из Google Play и установить для домашней папки значение /system/. Затем вы даже можете перейти к /.


Или вы можете получите «Передача файлов по Bluetooth» из Google Play и установите для домашней папки значение /system/. Затем вы даже можете перейти к /.

Оцените статью
techsly.ru
Добавить комментарий