Могу ли я получить .apk файл установленного приложения?

9

Я развернул файл .apk своих приложений на устройстве Qualcomm. Теперь из-за моей неудачи украли мой ноутбук, на котором было разработано это приложение. Так что у меня нет при себе кода моего приложения. Однако у меня есть устройство, на котором я ранее установил мое приложение.

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

Любая помощь заметна.

Спасибо, Гаурав

GamDroid
источник

Ответы:

10

Это должно быть расположено в /data/app/. Вы можете получить к нему доступ напрямую, если у вас есть root. Если нет, вам придется использовать adb pull. Например:

adb pull /data/app/myapp.apk C: \ backup \ myapp.apk

Более подробная информация по adb: http://developer.android.com/guide/developing/tools/adb.html

Мэтью Рид
источник
4

Если вы знаете имя установленного файла apk (которое на некоторых устройствах может быть myapp-1.apk или myapp-2.apk, а не просто myapp.apk), вы можете получить прямой доступ к нему как обычному пользователю, включая тот, который запускается как adb на защищенном устройстве, так что вы должны иметь возможность вытащить его. Но если вы не знаете имя установленного apk, вы не можете просматривать каталог / data / app, не будучи root или aid_system.

Возможно, стоит просто угадать установленное имя - попробуйте это просто, попробуйте его с -1.apk, с -2.apk и т. Д.

Возможен и другой способ: я считаю, что следующее будет работать на защищенном устройстве, но в данный момент у меня его нет, чтобы проверить его.

РЕДАКТИРОВАТЬ: Новая идея для определения точного имени файла APK

1) adb pull /data/system/packages.xml

2) Посмотрите на наличие записи codePath вашего приложения

3) ADB тянуть, что

РЕДАКТИРОВАТЬ: Что касается старой идеи, представленной ниже, Мэтью обнаружил, что, хотя файлы для каждого процесса в / proc имеют разрешение на чтение на защищенном устройстве, они пусты при чтении непривилегированным uid, отличным от их владельца. Так что это не сработает.


1) Запустите ваше приложение. Вам также понадобится машина с adb.

2) тип

adb shell ps 

и найдите строку с названием вашего приложения:

app_1     11959 907   112984 27580 ffffffff afd0c5bc S com.clevername.myapp

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

adb shell cat /proc/11959/maps

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

43e9c000-43ea3000 r--s 001f4000 b3:06 15393      /data/app/com.clevername.myapp-1.apk

4) Это имя файла, которое вам понадобится для adb pull.

adb pull /data/app/com.clevername.myapp-1.apk .

Изучение прав доступа к каталогу в / proc показывает, что это должно работать для непривилегированного пользователя, извините, если это не так. Если вы знакомы с использованием 'grep', вы можете использовать его, чтобы избежать ручного сканирования вывода.

Приложение: Я не совсем уверен, что история о приложениях, установленных на SD-карту.

Крис Страттон
источник
Я только что попробовал на моем безопасном устройстве; adb shell cat /proc/####/mapsничего не возвращает, к сожалению.
Мэтью Рид
@ Мэтью ... странно, я имитирую защищенный случай и вижу, что большинство файлов в proc имеют нулевой размер, но доступны для чтения. Прежде чем я проверил, что у них есть права на чтение. Возможно, это делается путем обнуления их, а не прав доступа, чтобы инструменты чтения / proc не получали постоянный поток ошибок доступа. Ну да ладно ... угадать на установленный вариант имени apk может быть лучшим.
Крис Страттон
Мое имя файла apk было сумасшедшим и неузнаваемым, но использование packages.xml помогло выяснить настоящее имя. :)
paleozogt