Android хранит файлы .apk? если так где?

187

После того, как android устанавливает приложение из Marketplace, сохраняет ли он файл .apk?

Существует ли стандартное место, где Android будет хранить такие файлы?

Gubatron
источник

Ответы:

125

Предустановленные приложения находятся в /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 и в эму.

Macarse
источник
Это работало как Очарование на Motorola Droid, а также на Nexus One, оба без рута.
Губатрон
Хорошо, вы никогда не говорили, для чего они нужны :)
Macarse
Я хочу иметь возможность читать их и делать с ними что-то. К счастью, они читабельны.
Губатрон
3
Хорошо то, что не только файлы «перечислены», но и читабельны, поэтому они будут соответствовать моей цели.
Губатрон
В другом месте я читал, что APK в / data / app соответствуют только приложениям, загруженным из магазина Play. Это правильно, или оно включает в себя что-либо, установленное пользователем?
Кристиан
135

Вы можете использовать менеджер пакетов ( 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
Мариуш Джамро
источник
2
у каждого приложения есть папка с именем, совпадающим с именем пакета, но в конце которого указывается «-1» или «-2». Есть идеи, почему?
shadygoneinsane
Чтобы указать путь к целевому файлу или имя,adb pull /data/app/com.example.app-filename.apk path/to/desired/destination
manikanta
95

Если вы просто хотите получить APK-файл ранее установленного вами файла, сделайте следующее:

  1. Загрузите AirDroid из Google Play
  2. Получите доступ к своему телефону с помощью AirDroid через веб-браузер на вашем ПК
  3. Зайдите в Приложения и выберите установленное приложение
  4. Нажмите кнопку «Загрузить», чтобы загрузить APK-версию этого приложения с вашего телефона.

Вам не нужно рутировать свой телефон, использовать adbили писать что-нибудь.

Ян Прзыбыло
источник
2
Проголосовал, потому что это не отвечает на этот вопрос. Что если OP хотел использовать ADB, чтобы его можно было использовать на устройствах, где разрешена отладка, но пароль забыт или экран поврежден.
Hack5
более простой способ получить файл apk для нерутированного устройства.
Фахми Хаммади
Thanx. Голосование поднято, потому что оно задает вопрос, говоря так: «Он хранит их в / data, но только если вы выполняете процедуру X»
ntg
26

Стандартного расположения не существует, однако вы можете использовать PackageManager, чтобы узнать о пакетах, и класс ApplicationInfo, который вы можете получить оттуда, содержит различную информацию о конкретном пакете: путь к его .apk, путь к его каталогу данных, путь к .apk только для ресурсов (для приложений с заблокированной пересылкой) и т. д. Обратите внимание, что вы можете иметь или не иметь разрешения на чтение этих каталогов в зависимости от ваших отношений с другим приложением; однако все приложения могут читать ресурс .apk (который также является реальным .apk для приложения без блокировки вперед).

Если вы просто ковыряетесь в оболочке, в настоящее время не заблокированные вперед приложения находятся в /data/app/.apk. Пользователь оболочки может прочитать конкретный .apk, но не может перечислить каталог. В будущем выпуске соглашение об именах будет немного изменено, поэтому не рассчитывайте, что оно останется прежним, но если вы получите путь к .apk из менеджера пакетов, вы можете использовать его в оболочке.

hackbod
источник
2
что такое "заблокированное приложение"?
Тони Чан
1
Это старый механизм защиты от копирования, который устанавливал .apk с разрешениями, которые позволяли только этому приложению читать его.
hackbod
18

Предустановленные приложения обычно находятся в / 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).

xmaslatte
источник
9

Если вы ищете путь к конкретному приложению, быстрое и грязное решение - просто просмотреть отчет об ошибке:

$ adb bugreport | grep 'dir=/data/app' 

Я не знаю, что это даст исчерпывающий список, поэтому он может помочь запустить приложение в первую очередь.

tomwhipple
источник
9

Установить с рынка

Это поведение маркета, сохранять ли 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:

  1. для фондового приложения

    Они обычно поставляются на устройстве изготовителем, включая основное приложение для работающей системы и сервис Google, вы можете найти их в каталоге /system/appи /system/priv-app.

  2. приложение, установленное пользователем

    Большинство apks попадают в эту категорию. Эти apks обычно устанавливаются с рынка пользователями или adb installбез -sопции. Вы можете найти их в каталоге /data/appдля корневого устройства.

  3. приложение на 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.

alijandro
источник
8

Вы можете тянуть приложения с АБР. Они находятся в / data / App /, я считаю.

adb pull (location on device) (where to save)

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

Брайан Денни
источник
5

В / data / app, но для защиты от копирования я не думаю, что вы можете получить к нему доступ.

Робби Понд
источник
2
Так как же работает приложение, которое позволяет делиться APK через bluetooth? Как они это делают?
Пользователь SO
5

Если вы рутированы, скачайте приложение Root Explorer. Лучший файловый менеджер для рутированных пользователей. В любом случае, System / app имеет все apks по умолчанию, которые поставляются с телефоном, а data / apk содержит все apks установленных приложений. Просто нажмите и удерживайте нужный файл (в Root Explorer), перейдите в папку / sdcard и просто вставьте.

Tanzer
источник
4

Используйте это, чтобы перечислить все .apks в / data / app /

adb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4
gilm
источник
4
  • данные / приложения
  • система / приложение
  • Система / собств-приложение
  • Mnt / Asec (при установке в SDCard)

Вы можете извлечь .apks из любого из них:

adb pull / mnt / asec

Ignorante
источник
3

Файлы .apk могут находиться в каталоге / data / app /. Используя ES File Explorer, мы можем получить доступ к этим файлам .APK.

vgokul129
источник
2

если вы используете eclipse, перейдите в DDMS, а затем в проводник, там вы увидите папку System / Apps и там есть apks

Джавад Амджад
источник
0

Когда я установил свое приложение на эмулятор, он показал мой файл .apk в

data / app Затем я использовал ls data / app //, чтобы увидеть, существует он или нет

После установки приложения просто используйте команду ls vie shell и проверьте нужный каталог, но это зависит от того, какое приложение вы пытаетесь установить. Я использовал этот метод для установки точки, если что-то не так.

DeAviator
источник
Я также пытаюсь найти apks, но я обнаружил, что вы не можете найти все apks, поэтому я предлагаю метод рутирования. Я не смог получить все установленные apks. Так что лучше рутировать свой телефон и получать все апки с помощью Titanium Backup и получить больший контроль над телефоном.
Джавад Амджад
0

Еще один способ получить то, что apkвы не можете найти, на рутированном устройстве - с помощью ящика для инструментов .

Сделайте резервную копию с помощью диспетчера приложений затем перейдите storage/emulated/appmanagerи проверить либо резервную копию системного приложения или резервное копирование приложений пользователя .

нагрузка
источник
0

Чтобы найти apk, загрузите и установите отправителя приложения Bluetooth из магазина Play. После завершения установки откройте отправителя приложения Bluetooth. Он покажет все приложения, (.apk)установленные на вашем устройстве, а затем вы можете легко перенести приложение на ПК через Bluetooth.

Prem
источник
0

В отличие от того, что написано в выбранном ответе, вам не нужен root, и можно получить APK-файлы установленных приложений, как я это сделал в своем приложении ( здесь ). Пример:

List<PackageInfo> packages=getPackageManager().getInstalledPackages(0);

Затем для каждого из элементов списка вы можете получить доступ к packageInfo.applicationInfo.sourceDir , который является полным путем к APK установленного приложения.

разработчик Android
источник
-1

Я пришел к этому посту, потому что хотел переустановить какое-то приложение, которое мне очень понравилось. Если это ваш случай, просто перейдите в Google Play и найдите «Мои приложения», вкладку «Все», и вы найдете способ переустановить понравившееся вам приложение. Я столкнулся с проблемой, которую не смог найти при поиске по одному приложению, но это было в Моих приложениях, поэтому я мог переустановить свой новый мобильный телефон;)

Серхио Абреу
источник