Android хранит файлы .apk? если так где? - PullRequest
175 голосов
/ 24 марта 2010

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

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

Ответы [ 19 ]

116 голосов
/ 24 марта 2010

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

108 голосов
/ 15 марта 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 чтобы скачать апк.

adb pull data/app/com.king.candycrushsaga-1/base.apk
91 голосов
/ 10 августа 2012

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

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

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

25 голосов
/ 24 марта 2010

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

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

17 голосов
/ 24 мая 2011

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

8 голосов
/ 15 августа 2012

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

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

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

7 голосов
/ 24 марта 2010

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

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

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

7 голосов
/ 08 мая 2015

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

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

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

Конечно, система должна где-то хранить все apks. В системе есть три места, в которых apks должны быть базовыми для разных типов apks.

  1. на складе приложения

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

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

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

  1. приложение на SDCard

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

Другой способ принудительно установить место установки на SDCard - использовать команду adb install -s apk-to-install.apk.

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

4 голосов
/ 01 марта 2011

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

3 голосов
/ 31 января 2013

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

adb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4
...