Odpowiedzi:
Zainstalowane aplikacje znajdują się w /system/app
folderze. 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.
Możesz użyć menedżera pakietów ( pm
), adb shell
aby wyświetlić listę pakietów:
adb shell pm list packages | sort
i wyświetlić, gdzie .apk
jest plik:
adb shell pm path com.king.candycrushsaga
package:/data/app/com.king.candycrushsaga-1/base.apk
I adb pull
pobierz apk.
adb pull data/app/com.king.candycrushsaga-1/base.apk
adb pull /data/app/com.example.app-filename.apk path/to/desired/destination
Jeśli chcesz tylko pobrać plik APK czegoś wcześniej zainstalowanego, wykonaj następujące czynności:
Nie musisz rootować telefonu, używać adb
ani pisać.
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.
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).
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ę.
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 install
lub 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 pm
polecenia 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:
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/app
i /system/priv-app
.
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 install
bez -s
opcji. Można je znaleźć w katalogu /data/app
zrootowanego urządzenia.
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 .apk
pliku. W katalogu /system/app
lub /system/priv-app
najnowszej wersji Androida znajduje się folder zawierający pliki dla każdej wstępnie zainstalowanej aplikacji .
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.
W / data / app, ale dla ochrony przed kopiowaniem Nie sądzę, że możesz uzyskać do niego dostęp.
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.
jeśli używasz Eclipse goto DDMS, a następnie eksploratora plików tam zobaczysz folder System / Apps i apki tam są
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.
Innym sposobem na uzyskanie apk
s, 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/appmanager
i sprawdź kopię zapasową aplikacji systemowej lub kopię zapasową aplikacji użytkownika .
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.
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.
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;)