Czy mogę uzyskać plik .apk zainstalowanej aplikacji?

9

Wdrożyłem plik .apk aplikacji na urządzeniu Qualcomm. Teraz, z powodu mojego pecha, mój laptop, na którym została opracowana ta aplikacja, został skradziony, więc nie mam przy sobie kodu aplikacji. Mam jednak urządzenie, na którym wcześniej zainstalowałem aplikację.

Więc moje pytanie brzmi: czy mogę pobrać plik .apk z tego urządzenia z tego urządzenia? jeśli tak, proszę powiedz mi, jak to zdobyć.

Każda pomoc jest znacząca.

Dzięki, Gaurav

GamDroid
źródło

Odpowiedzi:

10

Powinien być zlokalizowany przy /data/app/. Możesz uzyskać do niego bezpośredni dostęp, jeśli masz root. Jeśli nie, będziesz musiał użyć adb pull. Na przykład:

adb pull /data/app/myapp.apk C: \ backup \ myapp.apk

Więcej informacji na temat adb: http://developer.android.com/guide/developing/tools/adb.html

Matthew Read
źródło
4

Jeśli znasz nazwę zainstalowanego pliku apk (którym na niektórych urządzeniach może być myapp-1.apk lub myapp-2.apk zamiast tylko myapp.apk), możesz uzyskać bezpośredni dostęp do tego jako zwykły użytkownik, w tym ten adb działa jako na zabezpieczonym urządzeniu, więc powinieneś być w stanie go pociągnąć. Ale jeśli nie znasz zainstalowanej nazwy apk, nie możesz przeglądać katalogu / data / app bez uprawnień użytkownika root lub system_pomocy.

Być może warto po prostu zgadnąć zainstalowaną nazwę - wypróbuj ją prosto, wypróbuj z -1.apk i -2.apk itp.

Może być inny sposób: wierzę, że następujące będą działać na zabezpieczonym urządzeniu, ale nie mam go teraz przed sobą, aby go przetestować.

EDYCJA: Nowy pomysł na określenie dokładnej nazwy pliku APK

1) adb pull /data/system/packages.xml

2) Przejrzyj go w poszukiwaniu kodu codePath aplikacji

3) adb wyciągnij to

EDYCJA: W odniesieniu do starego pomysłu poniżej Matthew odkrył, że chociaż pliki poszczególnych procesów w / proc mają uprawnienia do odczytu na zabezpieczonym urządzeniu, są puste, gdy odczytywane są przez nieuprzywilejowany identyfikator użytkownika inny niż właściciela. Więc to nie zadziała.


1) Uruchom aplikację. Będziesz także potrzebował maszyny z adb.

2) typ

adb shell ps 

i poszukaj wiersza z nazwą aplikacji:

app_1     11959 907   112984 27580 ffffffff afd0c5bc S com.clevername.myapp

3) weź liczbę w drugiej kolumnie, która jest identyfikatorem procesu, i zobacz jej mapę pamięci wirtualnej, w takim przypadku wpisałbym

adb shell cat /proc/11959/maps

i poszukaj linii, w której zamapował swój własny plik apk w pamięci

43e9c000-43ea3000 r--s 001f4000 b3:06 15393      /data/app/com.clevername.myapp-1.apk

4) To jest nazwa pliku, którą należy pobrać

adb pull /data/app/com.clevername.myapp-1.apk .

Badanie uprawnień do katalogu w / proc sugeruje, że powinno to działać dla nieuprzywilejowanego użytkownika, przepraszam, jeśli nie działa. Jeśli znasz użycie „grep”, możesz go użyć, aby uniknąć ręcznego skanowania wyników.

Dodatek: Nie jestem do końca pewien, jaka jest historia aplikacji zainstalowanych na karcie SD.

Chris Stratton
źródło
Właśnie próbowałem na moim bezpiecznym urządzeniu; adb shell cat /proc/####/mapsnie zwraca nic, niestety.
Mateusz
@Matthew ... dziwne, symuluję bezpieczny przypadek i widzę, że większość plików w proc ma rozmiar zerowy, ale są czytelne. Zanim tylko sprawdziłem, czy będą mieć uprawnienia do odczytu. Być może dzieje się tak przez zerowanie ich zamiast uprawnień, aby narzędzia odczytu / proc nie otrzymywały ciągłego strumienia błędów dostępu. No cóż ... zgadywanie przy zainstalowanym wariancie nazwy apk może być najlepsze.
Chris Stratton
Moja nazwa pliku apk była szalona i niemożliwa do odczytania, ale użycie paczek.xml pomogło znaleźć prawdziwe imię. :)
paleozogt