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

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

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


person Gubatron    schedule 24.03.2010    source источник


Ответы (19)


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

person Macarse    schedule 24.03.2010
comment
Это работало как Charm на Motorola Droid, а также на Nexus One, оба без рута. - person Gubatron; 25.03.2010
comment
Хорошо, вы так и не сказали, для чего они вам нужны :) - person Macarse; 26.03.2010
comment
Я хочу иметь возможность читать их и делать с ними что-то. К счастью, они читаемы. - person Gubatron; 26.03.2010
comment
Хорошо, что файлы доступны не только для списка, но и для чтения, поэтому они подходят для моей цели. - person Gubatron; 26.03.2010
comment
Я где-то читал, что APK в /data/app соответствуют только приложениям, загруженным из магазина Play. Это правильно или включает в себя что-то, что установил пользователь? - person Christian; 31.01.2014
comment
@Christian /data/app также содержит apk-файлы приложений, которые не установлены из игрового магазина. - person Sagar D; 21.01.2015

Вы можете использовать диспетчер пакетов (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 скачать apk.

adb pull data/app/com.king.candycrushsaga-1/base.apk
person Mariusz Jamro    schedule 15.03.2015
comment
у каждого приложения есть папка с именем, таким же, как имя пакета, но с «-1» или «-2» в конце. Любая идея, почему? - person shadygoneinsane; 25.11.2017
comment
Чтобы указать путь или имя целевого файла, adb pull /data/app/com.example.app-filename.apk path/to/desired/destination - person manikanta; 14.11.2019

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

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

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

person Jan Przybylo    schedule 10.08.2012
comment
Проголосовали против, потому что это на самом деле не отвечает на вопрос. Что, если OP захочет использовать ADB, чтобы его можно было использовать на устройствах, где разрешена отладка, но забыт пароль или сломан экран. - person Hack5; 18.10.2017
comment
более простой способ получить файл apk для нерутированного устройства. - person fahmi hammadi; 16.10.2018
comment
Спасибо. Проголосовали за то, что он отвечает на вопрос, говоря в некотором роде: он сохраняет их в /data, но только если вы выполняете процедуру X - person ntg; 14.02.2020

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

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

person hackbod    schedule 24.03.2010
comment
что за приложение с блокировкой вперед? - person Tony Chan; 04.05.2012
comment
Это старый механизм защиты от копирования, который устанавливал .apk с разрешениями, которые позволяли только этому приложению читать его. - person hackbod; 13.05.2012

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

person xmaslatte    schedule 24.05.2011

Установить из магазина

Поведение рынка зависит от того, следует ли сохранять apk после установки. Google play не сохраняет apk после установки. Другие сторонние торговые площадки могут иметь другое поведение.

Установить из инструмента разработки/отладки (adb, eclipse, android studio)

Когда мы устанавливаем apk из инструмента отладки, напрямую вызывая adb install или из студии eclipse/android, 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

Как система хранит APK

Конечно, система должна где-то хранить все apk. В системе есть три места для хранения APK-файлов на основе различных типов APK-файлов:

  1. для стокового приложения

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

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

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

  3. приложение на SD-карте

    Если apk включает место установки на SD-карте с android:installLocation="auto" в манифесте, приложение можно переместить на SD-карту из системного меню диспетчера приложений. Эти apks обычно находятся в защищенной папке SD-карты /mnt/sdcard/asec.

    Еще один способ принудительно указать место установки на SD-карте — использовать команду adb install -s apk-to-install.apk.

Обратите внимание, что файлы предустановленного приложения больше не находятся в одном файле .apk. В каталоге /system/app или /system/priv-app для последней версии Android есть папка с файлами для каждого предустановленного приложения.

person alijandro    schedule 08.05.2015

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

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

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

person tomwhipple    schedule 15.08.2012

Вы можете тянуть приложения с помощью ADB. Я думаю, они находятся в /data/App/.

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

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

person Bryan Denny    schedule 24.03.2010

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

person Robby Pond    schedule 24.03.2010
comment
Итак, как именно работает приложение, которое позволяет обмениваться APK через Bluetooth? Как они это делают? - person An SO User; 27.09.2014

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

person Tanzer    schedule 01.03.2011

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

adb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4
person gilm    schedule 31.01.2013

  • данные/приложение
  • система/приложение
  • система/приват-приложение
  • mnt/asec (при установке на SD-карту)

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

adb тянуть /mnt/asec

person Ignorante    schedule 16.07.2015

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

person vgokul129    schedule 31.08.2015

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

person Jawad Amjad    schedule 28.10.2011

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

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

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

person DeAviator    schedule 10.06.2010
comment
Я также пытаюсь найти apk, но я обнаружил, что вы не можете найти все apk, поэтому я предлагаю метод рутирования. Я не смог получить все установленные apks. Так что лучше рутировать свой телефон и получить все apks с помощью Titanium Backup и получить больше контроля над своим телефоном. - person Jawad Amjad; 28.10.2011

Еще один способ получить apk, которые вы не можете найти на устройстве с root-правами, — это использовать rom tool box.

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

person load    schedule 26.04.2014

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

person Prem    schedule 25.07.2014

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

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

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

person android developer    schedule 05.05.2015

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

person Sergio Abreu    schedule 26.07.2016