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



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



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



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

658   10  

10 ответов:

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

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

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

и зная полный каталог, мы можем, наконец, вытащить АБР с помощью 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
    

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

вы можете сделать это с помощью 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);
}

когда у вас есть Eclipse для Android developement установлен:

  • используйте устройство в качестве отладочного устройства. На вашем телефоне: настройки > Приложения > разработка и включение отладки USB, см. http://developer.android.com/tools/device.html
  • в Eclipse откройте DDMS-window: Window > Open Perspective > Other... > DDMS, см. http://developer.android.com/tools/debugging/ddms.html
  • Если вы не видите устройство попробовать (re)установка USB-драйвера для вашего устройство
  • в средней панели выберите вкладку "проводник" и перейдите в system > app
  • Теперь вы можете выбрать один или несколько файлов и выберите команду "тянуть файл из значка "устройство" вверху (справа на вкладках)
  • выберите целевую папку-tada!
  1. проверьте список установленных apk (следующая команда также перечисляет путь, где он установлен, и имя пакета). adb shell pm список пакетов-f
  2. использовать adb pull /package_path / имя пакета / path_in_pc (путь к пакету и имя пакета можно получить из команды выше 1.)

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

Список 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

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

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

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

 adb shell dumpsys activity a > dump.txt

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

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

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

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

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

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

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

Comments

    Ничего не найдено.