Чи зберігає Android файли .apk? якщо так, де?


187

Після того, як android встановить додаток з Marketplace, чи зберігає він файл .apk?

Чи є стандартне місце, де Android зберігатиме такі файли?

Відповіді:


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 магії та в emu.


Це спрацьовувало як Чарівність на Motorola Droid, а також на Nexus One, не вкорінене.
Губатрон

Гаразд, ти ніколи не говорив, чого ти хочеш від них :)
Макарсе

Я хочу вміти читати їх і робити з ними справи. На щастя, вони читаються.
Губатрон

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 завантажити apk.

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. Перейдіть до Apps і виберіть встановлений додаток
  4. Натисніть кнопку "завантажити", щоб завантажити APK версію цього додатка з телефону

Вам не потрібно викорінювати телефон, використовувати adbабо писати що-небудь.


2
Незважаючи на те, що це дійсно не відповідає на питання. Що робити, якщо ОП хотів використовувати ADB, щоб його можна було використовувати на пристроях, де налагодження дозволено, але забутий пароль або зламаний екран.
Hack5

простіший спосіб отримати apk файл для не вкорінених пристроїв.
fahmi hammadi

Дякую. Оновлене спричиняє це питання, запитуючи таким чином: "Він зберігає їх у дані / дані, але лише якщо ви виконуєте процедуру X"
ntg

26

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

Якщо ви просто тріскаєтесь в оболонці, наразі додатки, які не заблоковані вперед, знаходяться в /data/app/.apk. Користувач оболонки може прочитати певний .apk, хоча він не може перелічити каталог. У майбутньому випуску конвенція про іменування буде трохи змінена, тому не розраховуйте на те, що він залишиться таким же, але якщо ви отримаєте шлях до .apk від менеджера пакунків, то ви можете використовувати його в оболонці.


2
що таке "вперед заблокований додаток"?
Тоні Чан

1
Це старий механізм захисту від копіювання, який встановив .apk з дозволами, які дозволяли лише цій програмі його читати.
хакбод

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).


9

Якщо ви шукаєте шлях певного додатка, швидким і брудним рішенням є просто прихопити помилку:

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

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


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

Як система зберігає apk

Звичайно, система мусить десь зберігати всі програми. У системі є три місця для збереження apks на основі різних типів apks:

  1. для акцій

    Зазвичай вони постачаються на пристрої по виробництву, включаючи основний додаток для запуску системи та сервісу Google, ви можете знайти їх у каталозі /system/appта /system/priv-app.

  2. додаток, встановлений користувачем

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

  3. додаток на 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.


8

Ви можете перетягувати програми за допомогою ADB. Вони є в / data / App /, я вважаю.

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

Зауважте, що вам доведеться викорінювати телефон, щоб витягувати захищені від копіювання програми.


5

В / дані / додаток, але для захисту від копіювання я не думаю, що ви можете отримати доступ до нього.


2
То як саме працює програма, яка дозволяє ділитися APK через Bluetooth? Як вони це роблять?
Маленька дитина

5

Якщо у вас коріння, завантажте додаток Root Explorer. Кращий файловий менеджер для вкорінених користувачів. У будь-якому разі система / додаток має всі програми apk за замовчуванням, які постачаються разом із телефоном, а data / apk - усі програми, які ви встановили. Довго натискайте потрібний apk (перебуваючи в Root Explorer), перейдіть до папки / sdcard і просто вставте.


4

Використовуйте це, щоб перелічити всі .apks під / data / app /

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

4
  • дані / додаток
  • система / додаток
  • система / приват-додаток
  • mnt / asec (при встановленні в sdcard)

Ви можете витягнути .apks з будь-якого з них:

adb pull / mnt / asec


3

.apk файли можуть бути розташовані під / data / app / directory. За допомогою ES File Explorer ми можемо отримати доступ до цих файлів .APK.


2

якщо ви використовуєте eclipse goto DDMS, а потім провідник файлів там, ви побачите папку System / Apps і apks там


0

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

Дані / додаток Тоді я використовував ls data / app //, щоб перевірити, чи існує він чи ні

Після установки програми просто використовуйте команду ls command vie shell і перевірте потрібний каталог, але це залежить від того, який саме додаток ви намагаєтеся встановити. Я використовував цей метод для установки точки, якщо якась річ не так.


Я також намагаюся знайти apks, але я знайшов, що ви не можете знайти всі apks, таким чином я пропоную метод вкорінення. Я не зміг отримати всі встановлені apks. Тож краще запустити свій телефон і отримати всі програми за допомогою Titanium Backup та отримати більше контролю над своїм телефоном.
Jawad Amjad

0

Ще один спосіб отримати apks, який ви не можете знайти, на укоріненому пристрої - це інструментальна панель rom .

Зробіть резервну копію за допомогою диспетчера додатків, потім перейдіть до програми storage/emulated/appmanagerта перевірте резервну копію системної програми чи резервну копію користувацьких програм .


0

Щоб знайти apk, завантажте та встановіть відправник додатка Bluetooth з магазину Play. Після завершення встановлення відкрийте відправник додатка Bluetooth. На ньому будуть показані всі програми, (.apk)встановлені на вашому пристрої, тоді ви зможете легко перенести додаток на ваш ПК через Bluetooth.


0

На відміну від того, що написано у вибраній відповіді, вам не потрібен корінь, і можна отримати APK встановлених додатків, як це я зробив у своєму додатку ( тут ). Приклад:

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

Потім для кожного з елементів списку ви можете отримати доступ до пакета packageInfo.applicationInfo.sourceDir , який є повним шляхом до APK встановленого додатка.


-1

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.