Відповіді:
Попередньо встановлені програми знаходяться в /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.
Ви можете використовувати менеджер пакунків ( 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
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
Як система зберігає apk
Звичайно, система мусить десь зберігати всі програми. У системі є три місця для збереження apks на основі різних типів apks:
для акцій
Зазвичай вони постачаються на пристрої по виробництву, включаючи основний додаток для запуску системи та сервісу Google, ви можете знайти їх у каталозі /system/app
та /system/priv-app
.
додаток, встановлений користувачем
Більшість апків належать до цієї категорії. Ці apks зазвичай встановлюються з ринку користувачами або adb install
без -s
можливості. Ви можете знайти їх під каталогом /data/app
для вкоріненого пристрою.
додаток на 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.
Ви можете перетягувати програми за допомогою ADB. Вони є в / data / App /, я вважаю.
adb pull (location on device) (where to save)
Зауважте, що вам доведеться викорінювати телефон, щоб витягувати захищені від копіювання програми.
В / дані / додаток, але для захисту від копіювання я не думаю, що ви можете отримати доступ до нього.
Якщо у вас коріння, завантажте додаток Root Explorer. Кращий файловий менеджер для вкорінених користувачів. У будь-якому разі система / додаток має всі програми apk за замовчуванням, які постачаються разом із телефоном, а data / apk - усі програми, які ви встановили. Довго натискайте потрібний apk (перебуваючи в Root Explorer), перейдіть до папки / sdcard і просто вставте.
Ви можете витягнути .apks з будь-якого з них:
adb pull / mnt / asec
якщо ви використовуєте eclipse goto DDMS, а потім провідник файлів там, ви побачите папку System / Apps і apks там
Коли я встановив додаток на емуляторі, він показав мій файл .apk у
Дані / додаток Тоді я використовував ls data / app //, щоб перевірити, чи існує він чи ні
Після установки програми просто використовуйте команду ls command vie shell і перевірте потрібний каталог, але це залежить від того, який саме додаток ви намагаєтеся встановити. Я використовував цей метод для установки точки, якщо якась річ не так.
Ще один спосіб отримати apk
s, який ви не можете знайти, на укоріненому пристрої - це інструментальна панель rom .
Зробіть резервну копію за допомогою диспетчера додатків, потім перейдіть до програми storage/emulated/appmanager
та перевірте резервну копію системної програми чи резервну копію користувацьких програм .
Щоб знайти apk
, завантажте та встановіть відправник додатка Bluetooth з магазину Play. Після завершення встановлення відкрийте відправник додатка Bluetooth. На ньому будуть показані всі програми, (.apk)
встановлені на вашому пристрої, тоді ви зможете легко перенести додаток на ваш ПК через Bluetooth.
На відміну від того, що написано у вибраній відповіді, вам не потрібен корінь, і можна отримати APK встановлених додатків, як це я зробив у своєму додатку ( тут ). Приклад:
List<PackageInfo> packages=getPackageManager().getInstalledPackages(0);
Потім для кожного з елементів списку ви можете отримати доступ до пакета packageInfo.applicationInfo.sourceDir , який є повним шляхом до APK встановленого додатка.
Ну, я прийшов на цю посаду, тому що хотів перевстановити якийсь додаток, який мені дуже сподобався. Якщо це ваш випадок, просто перейдіть на Google Play і знайдіть Мої програми, вкладку Все, і ви знайдете спосіб перевстановити якийсь додаток, який вам сподобався. Я зіткнувся з проблемою, яку я не зміг знайти в одному додатку, але він був там у Моїх додатках, щоб я міг перевстановити свій новий мобільний;)