Получить 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!