Czy system Android przechowuje pliki .apk? jeśli tak to gdzie?

187

Czy po zainstalowaniu aplikacji z Marketplace Android zachowuje plik .apk?

Czy istnieje standardowa lokalizacja, w której Android przechowuje takie pliki?

Gubatron
źródło

Odpowiedzi:

125

Zainstalowane aplikacje znajdują się w /system/appfolderze. Zainstalowane są aplikacje użytkownika /data/app. Chyba nie masz dostępu, chyba że masz zrootowany telefon. Nie mam tutaj zrootowanego telefonu, ale wypróbuj ten kod:

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]);

        }
    }

Wymienia apki w mojej zakorzenionej magii HTC i emu.

Makaron
źródło
Działa to jak Charm na Motorola Droid, a także na Nexus One, zarówno nierootowane.
Gubatron,
Ok, nigdy nie powiedziałeś, po co ich chcesz :)
Macarse
Chcę móc je czytać i robić z nimi różne rzeczy. Na szczęście są czytelne.
Gubatron
3
Dobrą rzeczą jest to, że nie tylko pliki są „możliwe do wyświetlenia”, ale są także czytelne, więc będą pasować do mojego celu.
Gubatron
Czytałem gdzie indziej, że pliki APK w / data / app odpowiadają tylko aplikacjom pobranym ze sklepu Play. Czy to prawda, czy zawiera coś, co użytkownik zainstalował?
Christian
135

Możesz użyć menedżera pakietów ( pm), adb shellaby wyświetlić listę pakietów:

adb shell pm list packages | sort

i wyświetlić, gdzie .apkjest plik:

adb shell pm path com.king.candycrushsaga
package:/data/app/com.king.candycrushsaga-1/base.apk

I adb pullpobierz apk.

adb pull data/app/com.king.candycrushsaga-1/base.apk
Mariusz Jamro
źródło
2
każda aplikacja ma folder o nazwie takiej samej jak nazwa pakietu, ale na końcu „-1” lub „-2”. Wiesz, dlaczego?
shadygoneinsane
Aby określić ścieżkę lub nazwę pliku docelowego,adb pull /data/app/com.example.app-filename.apk path/to/desired/destination
manikanta,
95

Jeśli chcesz tylko pobrać plik APK czegoś wcześniej zainstalowanego, wykonaj następujące czynności:

  1. Pobierz AirDroid z Google Play
  2. Uzyskaj dostęp do telefonu za pomocą AirDroid z przeglądarki internetowej komputera
  3. Przejdź do aplikacji i wybierz zainstalowaną aplikację
  4. Kliknij przycisk „pobierz”, aby pobrać wersję APK tej aplikacji z telefonu

Nie musisz rootować telefonu, używać adbani pisać.

Jan Przybyło
źródło
2
Zagłosowano, ponieważ tak naprawdę nie odpowiada na pytanie. Co jeśli OP chciałby użyć ADB, aby można go było używać na urządzeniach, na których debugowanie jest autoryzowane, ale hasło jest zapomniane lub ekran jest uszkodzony.
Hack5
łatwiejszy sposób na uzyskanie pliku apk dla nie uruchomionego urządzenia.
fahmi hammadi
Dzięki Pozytywne, ponieważ anseruje pytanie, mówiąc w sposób: „Zatrzymuje je w / danych, ale tylko jeśli wykonasz procedurę X”
ntg
26

Nie ma standardowej lokalizacji, jednak można użyć programu PackageManager, aby dowiedzieć się o pakietach, a klasa ApplicationInfo, którą można uzyskać stamtąd, zawiera różne informacje na temat określonego pakietu: ścieżka do pliku .apk, ścieżka do katalogu danych, ścieżka do pliku .apk dostępnego tylko dla zasobów (dla aplikacji zablokowanych do przodu) itp. Pamiętaj, że możesz, ale nie musisz, mieć uprawnienia do czytania tych katalogów w zależności od relacji z inną aplikacją; jednak wszystkie aplikacje są w stanie odczytać .apk zasobu (który jest również prawdziwym apkiem dla aplikacji bez blokady).

Jeśli tylko grzebiesz w powłoce, aktualnie nie zablokowane aplikacje znajdują się w /data/app/.apk. Użytkownik powłoki może odczytać określony plik .apk, chociaż nie może wyświetlić katalogu. W przyszłej wersji konwencja nazewnictwa zostanie nieco zmieniona, więc nie licz na to, że pozostanie taka sama, ale jeśli uzyskasz ścieżkę .apk od menedżera pakietów, możesz użyć jej w powłoce.

hackbod
źródło
2
co to jest „aplikacja zablokowana do przodu”?
Tony Chan
1
Jest to stary mechanizm ochrony przed kopiowaniem, który instalował .apk z uprawnieniami, które pozwalały tylko aplikacji na odczyt.
hackbod
18

Wstępnie zainstalowane aplikacje są zazwyczaj w / system / app, a aplikacje zainstalowane przez użytkownika są w / data / app.

Możesz użyć „adb pull”, ale musisz znać pełną ścieżkę do pliku APK. Na emulatorze możesz uzyskać listę katalogów za pomocą „powłoki adb” + „ls”. Ale na urządzeniu z Androidem nie będzie można tego zrobić w folderze „/ data” ze względów bezpieczeństwa. Jak zatem ustalić pełną ścieżkę do pliku APK?

Możesz uzyskać pełną listę wszystkich zainstalowanych aplikacji, pisząc program, który odpytuje PackageManager. Krótki fragment kodu poniżej:

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
}

Możesz także znaleźć aplikacje, które podadzą takie informacje. Jest ich wiele. Wypróbuj ten (AppSender).

xmaslatte
źródło
9

Jeśli szukasz ścieżki konkretnej aplikacji, szybkim i brudnym rozwiązaniem jest po prostu grep raport o błędzie:

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

Nie wiem, czy to zapewni wyczerpującą listę, więc może pomóc najpierw uruchomić aplikację.

tomwhipple
źródło
9

Zainstaluj z rynku

Zachowanie się na rynku polega na tym, czy zachować apk po instalacji. Google Play nie utrzymuje apk po instalacji. Inne rynki innych firm mogą mieć różne zachowania.

Zainstaluj z narzędzia do programowania / debugowania (adb, eclipse, studio Android)

Kiedy instalujemy apk z narzędzia do debugowania, bezpośrednio wywołujemy adb installlub ze środowiska eclipse / android studio, apk zostanie zwykle przeniesiony ( adb push) do publicznego katalogu do odczytu i zapisu /data/local/tmp/. Następnie narzędzie użyje pmpolecenia do zainstalowania, usunie tymczasowy apk /data/local/tmp/po pomyślnej instalacji.

Możemy uzyskać te informacje z wyników debugowania, takich jak następujące.

$ adb install bin/TestApplication.apk 
3155 KB/s (843375 bytes in 0.260s)
    pkg: /data/local/tmp/TestApplication.apk
Success

Jak system utrzymuje apk

Oczywiście system musi gdzieś przechowywać wszystkie apki. Istnieją trzy miejsca, w których system może przechowywać aplikacje w oparciu o różne typy aplikacji:

  1. dla aplikacji magazynowej

    Są one zazwyczaj dostarczane fabrycznie na urządzenie, w tym podstawową aplikację do uruchamiania systemu i usługę Google, można je znaleźć w katalogu /system/appi /system/priv-app.

  2. aplikacja zainstalowana przez użytkownika

    Większość aplikacji należy do tej kategorii. Te aplikacje są zwykle instalowane z rynku przez użytkowników lub adb installbez -sopcji. Można je znaleźć w katalogu /data/appzrootowanego urządzenia.

  3. aplikacja na karcie SD

    Jeśli apk umożliwi lokalizację instalacji na android:installLocation="auto"karcie SD z manifestem, aplikację można przenieść do karty SD z menu menedżera aplikacji systemu. Te aplikacje zwykle znajdują się w bezpiecznym folderze sdcard /mnt/sdcard/asec.

    Innym sposobem wymuszenia lokalizacji instalacji na karcie SD jest użycie polecenia adb install -s apk-to-install.apk.

Uwaga: pliki wstępnie zainstalowanej aplikacji nie znajdują się już w jednym .apkpliku. W katalogu /system/applub /system/priv-appnajnowszej wersji Androida znajduje się folder zawierający pliki dla każdej wstępnie zainstalowanej aplikacji .

alijandro
źródło
8

Możesz pobierać aplikacje za pomocą ADB. Są w / data / App /, jak sądzę.

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

Pamiętaj, że musisz zrootować telefon, aby pobrać aplikacje chronione przed kopiowaniem.

Bryan Denny
źródło
5

W / data / app, ale dla ochrony przed kopiowaniem Nie sądzę, że możesz uzyskać do niego dostęp.

Robby Pond
źródło
2
Jak dokładnie działa aplikacja, która umożliwia udostępnianie APK przez Bluetooth? Jak oni to robią?
Małe dziecko
5

Jeśli jesteś zrootowany, pobierz aplikację Root Explorer. Najlepszy menedżer plików dla zrootowanych użytkowników. W każdym razie System / aplikacja ma wszystkie domyślne aplikacje dostarczone z telefonem, a dane / apk ma wszystkie aplikacje zainstalowane przez Ciebie. Po prostu naciśnij długo żądany apk (będąc w Eksploratorze root), przejdź do folderu / sdcard i po prostu wklej.

Tanzer
źródło
4

Użyj tego, aby wyświetlić listę wszystkich .apks w / data / app /

adb bugreport | grep 'package name="' | grep 'codePath="/data' | cut -d'"' -f4
gilm
źródło
4
  • dane / aplikacja
  • system / aplikacja
  • system / priv-app
  • mnt / asec (po zainstalowaniu na karcie SD)

Możesz pobrać .apks z dowolnego z nich:

adb pull / mnt / asec

Ignorante
źródło
3

Pliki .apk mogą znajdować się w katalogu / data / app /. Za pomocą ES File Explorer możemy uzyskać dostęp do tych plików .APK.

vgokul129
źródło
2

jeśli używasz Eclipse goto DDMS, a następnie eksploratora plików tam zobaczysz folder System / Apps i apki tam są

Jawad Amjad
źródło
0

Kiedy zainstalowałem moją aplikację na emulatorze, pokazał mój plik .apk w

data / app Następnie użyłem ls data / app //, aby sprawdzić, czy istnieje

Po zainstalowaniu aplikacji po prostu użyj powłoki ls vie shell i sprawdź żądany katalog, ale zależy to od rodzaju aplikacji, którą próbujesz zainstalować. Użyłem tej metody, aby zainstalować punkt, jeśli coś jest nie tak.

DeAviator
źródło
Próbuję również zlokalizować apki, ale znalazłem, że nie można zlokalizować wszystkich apków, dlatego sugeruję metodę rootowania. Nie udało mi się pobrać wszystkich zainstalowanych aplikacji. Lepiej więc zrootować telefon i uzyskać wszystkie aplikacje za pomocą Titanium Backup i uzyskać większą kontrolę nad telefonem.
Jawad Amjad
0

Innym sposobem na uzyskanie apks, których nie możesz znaleźć, na zrootowanym urządzeniu jest przybornik ROM .

Utwórz kopię zapasową za pomocą menedżera aplikacji, a następnie przejdź do storage/emulated/appmanageri sprawdź kopię zapasową aplikacji systemowej lub kopię zapasową aplikacji użytkownika .

Załaduj
źródło
0

Aby znaleźć apk, pobierz i zainstaluj aplikację Bluetooth App Sender ze Sklepu Play. Po zakończeniu instalacji otwórz aplikację Bluetooth App Sender. Wyświetli wszystkie aplikacje (.apk)zainstalowane w urządzeniu, a następnie możesz łatwo przenieść aplikację na komputer przez Bluetooth.

Prem
źródło
0

W przeciwieństwie do tego, co jest napisane na wybranej odpowiedzi, nie potrzebujesz roota i można uzyskać APK zainstalowanych aplikacji, tak właśnie zrobiłem w mojej aplikacji ( tutaj ). Przykład:

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

Następnie dla każdego elementu listy można uzyskać dostęp do packageInfo.applicationInfo.sourceDir , który jest pełną ścieżką do pliku APK zainstalowanej aplikacji.

programista Androida
źródło
-1

Przyszedłem do tego postu, ponieważ chciałem ponownie zainstalować aplikację, która bardzo mi się podobała. Jeśli tak jest, po prostu przejdź do Google Play i poszukaj Moje aplikacje, zakładki Wszystkie, a znajdziesz sposób na ponowną instalację aplikacji, którą lubisz. Napotkałem problem, którego nie mogłem znaleźć, wyszukując jedną aplikację, ale był on w Moich aplikacjach, więc mogłem ponownie zainstalować w moim nowym telefonie komórkowym;)

Sergio Abreu
źródło