После того, как Android устанавливает приложение из Marketplace, он сохраняет файл .apk?
Есть ли стандартное место, где Android будет хранить такие файлы?
После того, как Android устанавливает приложение из Marketplace, он сохраняет файл .apk?
Есть ли стандартное место, где Android будет хранить такие файлы?
Предустановленные приложения находятся в папке /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
- person manikanta; 14.11.2019
Если вы просто хотите получить 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).
Установить из магазина
Поведение рынка зависит от того, следует ли сохранять 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-файлов:
для стокового приложения
Они обычно поставляются производителем устройства, включая основное приложение для работы системы и службу Google, вы можете найти их в каталогах /system/app
и /system/priv-app
.
установленное пользователем приложение
Большинство APK попадают в эту категорию. Эти apk обычно устанавливаются с торговой площадки пользователями или adb install
без опции -s
. Вы можете найти их в каталоге /data/app
для корневого устройства.
приложение на 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 есть папка с файлами для каждого предустановленного приложения.
Если вы ищете путь к конкретному приложению, быстрое и грязное решение — просто найти отчет об ошибке:
$ adb bugreport | grep 'dir=/data/app'
Я не уверен, что это будет исчерпывающий список, поэтому может помочь сначала запустить приложение.
Вы можете тянуть приложения с помощью ADB. Я думаю, они находятся в /data/App/.
adb pull (location on device) (where to save)
Обратите внимание, что вам необходимо рутировать свой телефон, чтобы получать защищенные от копирования приложения.
В /data/app, но для защиты от копирования, я не думаю, что вы можете получить к нему доступ.
Если у вас есть root-права, скачайте приложение Root Explorer. Лучший файловый менеджер для рутированных пользователей. В любом случае, System/app содержит все APK-файлы по умолчанию, поставляемые с телефоном, а Data/APK содержит все APK-файлы установленных вами приложений. Просто нажмите и удерживайте нужный apk (в Root Explorer), перейдите в папку /sdcard и просто вставьте.
Используйте это, чтобы перечислить все .apks в /data/app/
adb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4
Вы можете вытащить .apks из любого из них:
adb тянуть /mnt/asec
Файлы .apk могут находиться в каталоге /data/app/. Используя ES File Explorer, мы можем получить доступ к этим файлам .APK.
если вы используете eclipse goto DDMS, а затем файловый менеджер, вы увидите папку System/Apps и apks там
Когда я установил свое приложение на эмуляторе, он показал мой файл .apk в
data/app Затем я использовал ls data/app//чтобы узнать, существует ли он или нет
После установки приложения просто используйте оболочку ls command vie и проверьте нужный каталог, но это зависит от того, какое приложение вы пытаетесь установить. Я использовал этот метод для Установить Укажите, если что-то не так.
Еще один способ получить apk
, которые вы не можете найти на устройстве с root-правами, — это использовать rom tool box.
Сделайте резервную копию с помощью диспетчера приложений, затем перейдите на storage/emulated/appmanager
и установите флажок Резервная копия системного приложения или Резервная копия пользовательского приложения.
Чтобы найти apk
, загрузите и установите приложение Bluetooth App Sender из магазина Play. После завершения установки откройте Bluetooth App Sender. Он покажет все приложения, (.apk)
установленные на вашем устройстве, после чего вы сможете легко перенести приложение на свой компьютер через Bluetooth.
В отличие от того, что написано в выбранном ответе, вам не нужен root, и можно получить APK установленных приложений, как я сделал это в своем приложении (здесь). Пример:
List<PackageInfo> packages=getPackageManager().getInstalledPackages(0);
Затем для каждого элемента списка вы можете получить доступ к packageInfo.applicationInfo.sourceDir, который представляет собой полный путь к APK установленного приложения.
Ну, я пришел к этому посту, потому что хотел переустановить какое-то приложение, которое мне очень понравилось. Если это ваш случай, просто зайдите в Google Play, и найдите Мои приложения, вкладку Все, и вы найдете способ переустановить какое-то приложение, которое вам понравилось. Я столкнулся с проблемой, что я не мог найти одно приложение с помощью поиска, но оно было в Моих приложениях, поэтому я мог переустановить его на своем новом мобильном телефоне;)