Ответы:
Предустановленные приложения находятся в /system/app
папке. Установленные пользователем приложения находятся в /data/app
. Я думаю, что вы не можете получить доступ, если у вас нет рутированного телефона. У меня нет рутированного телефона, но попробуйте этот код:
public class Testing extends Activity {
private static final String TAG = "TEST";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
File appsDir = new File("/data/app");
String[] files = appsDir.list();
for (int i = 0 ; i < files.length ; i++ ) {
Log.d(TAG, "File: "+files[i]);
}
}
В нем перечислены apks в моей корневой магии htc и в эму.
Вы можете использовать менеджер пакетов ( pm
) adb shell
для вывода списка пакетов:
adb shell pm list packages | sort
и показать, где находится .apk
файл:
adb shell pm path com.king.candycrushsaga
package:/data/app/com.king.candycrushsaga-1/base.apk
И adb pull
скачать апк.
adb pull data/app/com.king.candycrushsaga-1/base.apk
adb pull /data/app/com.example.app-filename.apk path/to/desired/destination
Если вы просто хотите получить APK-файл ранее установленного вами файла, сделайте следующее:
Вам не нужно рутировать свой телефон, использовать adb
или писать что-нибудь.
Стандартного расположения не существует, однако вы можете использовать PackageManager, чтобы узнать о пакетах, и класс ApplicationInfo, который вы можете получить оттуда, содержит различную информацию о конкретном пакете: путь к его .apk, путь к его каталогу данных, путь к .apk только для ресурсов (для приложений с заблокированной пересылкой) и т. д. Обратите внимание, что вы можете иметь или не иметь разрешения на чтение этих каталогов в зависимости от ваших отношений с другим приложением; однако все приложения могут читать ресурс .apk (который также является реальным .apk для приложения без блокировки вперед).
Если вы просто ковыряетесь в оболочке, в настоящее время не заблокированные вперед приложения находятся в /data/app/.apk. Пользователь оболочки может прочитать конкретный .apk, но не может перечислить каталог. В будущем выпуске соглашение об именах будет немного изменено, поэтому не рассчитывайте, что оно останется прежним, но если вы получите путь к .apk из менеджера пакетов, вы можете использовать его в оболочке.
Предустановленные приложения обычно находятся в / system / app, а установленные пользователем приложения - в / data / app.
Вы можете использовать «adb pull», но вам нужно знать полный путь к файлу APK. В эмуляторе вы можете получить список каталогов, используя "adb shell" + "ls". Но на устройстве Android вы не сможете сделать это в папке "/ data" по соображениям безопасности. Так как же выяснить полный путь к файлу APK?
Вы можете получить полный список всех установленных приложений, написав программу, которая запрашивает PackageManager. Ниже приведен фрагмент кода:
PackageManager pm = getPackageManager();
List<PackageInfo> pkginfo_list = pm.getInstalledPackages(PackageManager.GET_ACTIVITIES);
List<ApplicationInfo> appinfo_list = pm.getInstalledApplications(0);
for (int x=0; x < pkginfo_list.size(); x++){
PackageInfo pkginfo = pkginfo_list.get(x);
pkg_path[x] = appinfo_list.get(x).publicSourceDir; //store package path in array
}
Вы также можете найти приложения, которые будут давать такую информацию. Их много. Попробуйте это (AppSender).
Если вы ищете путь к конкретному приложению, быстрое и грязное решение - просто просмотреть отчет об ошибке:
$ adb bugreport | grep 'dir=/data/app'
Я не знаю, что это даст исчерпывающий список, поэтому он может помочь запустить приложение в первую очередь.
Установить с рынка
Это поведение маркета, сохранять ли apk после установки. Google play не сохраняет apk после установки. Другие сторонние торговые площадки могут иметь другое поведение.
Установить из инструмента разработки / отладки (adb, eclipse, android studio)
Когда мы устанавливаем apk из инструмента отладки, напрямую вызываем adb install
или из eclipse / android studio, apk обычно переносится ( adb push
) в общедоступный каталог для чтения и записи /data/local/tmp/
. После этого инструмент будет использоватьpm
команду для установки, он удалит временный apk /data/local/tmp/
после успешной установки.
Мы могли бы получить эту информацию из вывода отладки, как показано ниже.
$ adb install bin/TestApplication.apk
3155 KB/s (843375 bytes in 0.260s)
pkg: /data/local/tmp/TestApplication.apk
Success
Как система держит апк
Конечно, система должна хранить все apks где-нибудь. В системе есть три места для хранения apks на основе различных типов apks:
для фондового приложения
Они обычно поставляются на устройстве изготовителем, включая основное приложение для работающей системы и сервис Google, вы можете найти их в каталоге /system/app
и /system/priv-app
.
приложение, установленное пользователем
Большинство apks попадают в эту категорию. Эти apks обычно устанавливаются с рынка пользователями или adb install
без -s
опции. Вы можете найти их в каталоге /data/app
для корневого устройства.
приложение на SDCard
Если apk активирует свое место установки в SDCard с помощью android:installLocation="auto"
манифеста, приложение можно переместить в SDCard из меню системного менеджера приложений. Эти apks обычно находятся в безопасной папке SDCard/mnt/sdcard/asec
.
Другой способ принудительно установить место установки на SDCard - использовать команду adb install -s apk-to-install.apk
.
Как примечание, файлы для предварительно установленного приложения больше не находятся в одном .apk
файле. Существует папка, содержащая файлы для каждого предустановленного приложения в каталоге /system/app
или /system/priv-app
для самой новой версии Android.
Вы можете тянуть приложения с АБР. Они находятся в / data / App /, я считаю.
adb pull (location on device) (where to save)
Обратите внимание, что вам нужно рутировать свой телефон, чтобы вытащить защищенные от копирования приложения.
В / data / app, но для защиты от копирования я не думаю, что вы можете получить к нему доступ.
Если вы рутированы, скачайте приложение Root Explorer. Лучший файловый менеджер для рутированных пользователей. В любом случае, System / app имеет все apks по умолчанию, которые поставляются с телефоном, а data / apk содержит все apks установленных приложений. Просто нажмите и удерживайте нужный файл (в Root Explorer), перейдите в папку / sdcard и просто вставьте.
если вы используете eclipse, перейдите в DDMS, а затем в проводник, там вы увидите папку System / Apps и там есть apks
Когда я установил свое приложение на эмулятор, он показал мой файл .apk в
data / app Затем я использовал ls data / app //, чтобы увидеть, существует он или нет
После установки приложения просто используйте команду ls vie shell и проверьте нужный каталог, но это зависит от того, какое приложение вы пытаетесь установить. Я использовал этот метод для установки точки, если что-то не так.
Еще один способ получить то, что apk
вы не можете найти, на рутированном устройстве - с помощью ящика для инструментов .
Сделайте резервную копию с помощью диспетчера приложений затем перейдите storage/emulated/appmanager
и проверить либо резервную копию системного приложения или резервное копирование приложений пользователя .
Чтобы найти apk
, загрузите и установите отправителя приложения Bluetooth из магазина Play. После завершения установки откройте отправителя приложения Bluetooth. Он покажет все приложения, (.apk)
установленные на вашем устройстве, а затем вы можете легко перенести приложение на ПК через Bluetooth.
В отличие от того, что написано в выбранном ответе, вам не нужен root, и можно получить APK-файлы установленных приложений, как я это сделал в своем приложении ( здесь ). Пример:
List<PackageInfo> packages=getPackageManager().getInstalledPackages(0);
Затем для каждого из элементов списка вы можете получить доступ к packageInfo.applicationInfo.sourceDir , который является полным путем к APK установленного приложения.
Я пришел к этому посту, потому что хотел переустановить какое-то приложение, которое мне очень понравилось. Если это ваш случай, просто перейдите в Google Play и найдите «Мои приложения», вкладку «Все», и вы найдете способ переустановить понравившееся вам приложение. Я столкнулся с проблемой, которую не смог найти при поиске по одному приложению, но это было в Моих приложениях, поэтому я мог переустановить свой новый мобильный телефон;)