Jak uzyskać APK zainstalowanej aplikacji bez dostępu do roota?

Próbuję wyodrębnić plik APK zainstalowanej aplikacji na Androida bez uprawnień roota.

Myślałem, że to niemożliwe, ponieważ wszystkie pliki APK dla aplikacji innych niż systemowe znajdują się w /data/app, a dostęp do tego folderu wymaga uprawnień roota. Następnie okazało się, że istnieje wiele aplikacji w Sklepie Google Play, które wydają się mieć dostęp do plików APK nawet na nie zakorzenionych urządzeń.

Czy ktoś może mi powiedzieć jak to jest możliwe? Czy nie ma aplikacji do tworzenia kopii zapasowych, które wykonują kopię zapasową Pliki APK bez roota?

Author: TylerH, 2012-06-13

10 answers

Dostęp do /data / app jest możliwy bez uprawnień roota; uprawnienia do tego katalogu to rwxrwx--x. uprawnienia do wykonania katalogu oznaczają, że możesz uzyskać do niego dostęp, jednak brak uprawnień do odczytu oznacza, że nie możesz uzyskać listy jego zawartości-więc aby uzyskać do niego dostęp, musisz znać nazwę pliku, do którego będziesz miał dostęp. Menedżer pakietów Androida powie Ci nazwę przechowywanego apk dla danego pakietu.

Aby to zrobić z linii poleceń, użyj adb shell pm list packages aby uzyskać lista zainstalowanych pakietów i znajdź żądany pakiet.

Z nazwą pakietu, możemy uzyskać rzeczywistą nazwę pliku i lokalizację APK za pomocą adb shell pm path your-package-name.

I znając pełny katalog, możemy w końcu wyciągnąć adb używając adb pull full/directory/of/the.apk

Kredyt dla @ tarn za wskazanie, że pod Lollipop, ścieżka apk będzie /data/app/your-package-name-1/base.apk

 331
Author: mah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-30 15:31:23

Android dodaje numer sekwencji do nazwy pakietu, aby uzyskać ostateczną nazwę pliku APK (możliwe, że różni się to w zależności od wersji systemu operacyjnego Android). Następująca sekwencja poleceń działa na urządzeniu nie rootowanym:

  1. Pobierz pełną nazwę ścieżki pliku APK dla żądanego pakietu.

    adb shell pm path com.example.someapp
    

    To daje wyjście jako: package:/data/app/com.example.someapp-2.apk.

  2. Wyciągnij plik APK z urządzenia z Androidem do pudełka programistycznego.

    adb pull /data/app/com.example.someapp-2.apk
    
 45
Author: Yojimbo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-19 14:23:50

Nie potrzebujesz uprawnień roota, aby uzyskać listę zainstalowanych aplikacji.

Możesz to zrobić za pomocą android PackageManager.

Poniżej mały fragment kodu.

final PackageManager pm = getPackageManager();
//get a list of installed apps.
List<ApplicationInfo> packages =  pm.getInstalledApplications(PackageManager.GET_META_DATA);

for (ApplicationInfo packageInfo : packages) {
    Log.d(TAG, "Installed package :" + packageInfo.packageName);
    Log.d(TAG, "Apk file path:" + packageInfo.sourceDir);
}
 16
Author: Sagar Waghmare,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-22 14:37:41

Kiedy masz zainstalowany Eclipse dla Android developement:

  • Użyj urządzenia jako urządzenia debugującego. W telefonie: Ustawienia > Aplikacje > Tworzenie i włączanie debugowania USB, zobacz http://developer.android.com/tools/device.html
  • w Eclipse, otwórz DDMS-window: Window > Open Perspective > Other... > DDMS, patrz http://developer.android.com/tools/debugging/ddms.html
  • Jeśli nie widzisz swojego urządzenia, spróbuj (ponownie) zainstalować sterownik USB dla Twój urządzenie
  • w środkowym okienku wybierz zakładkę "Eksplorator plików" i przejdź do system > app
  • Teraz możesz wybrać jeden lub więcej plików, a następnie kliknąć " Pull a file z urządzenia " ikona u góry (po prawej stronie do zakładek)
  • Wybierz folder docelowy-tada!
 6
Author: anon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-03 12:43:42
  1. Sprawdź listę zainstalowanych apk (następujące polecenie wyświetla również ścieżkę, gdzie jest zainstalowany i nazwę pakietu). adb shell pm list packages-f
  2. Użyj ADB pull/package_path /Nazwa pakietu / path_in_pc (ścieżka i Nazwa pakietu można uzyskać z powyższego polecenia 1.)
 6
Author: goldy021,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-14 10:40:20

W wersji Nougat(7.0) Android uruchom adb shell pm list packages, aby wyświetlić listę pakietów zainstalowanych na urządzeniu. Następnie uruchom adb shell pm path your-package-name, aby pokazać ścieżkę apk. Po użyciu adb skopiować pakiet do Downloads adb shell cp /data/app/com.test-1/base.apk /storage/emulated/0/Download. Następnie wyciągnij plik apk z pobranych plików do komputera, uruchamiając adb pull /storage/emulated/0/Download/base.apk.

 5
Author: Buhiire Keneth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-07 21:05:27

Lista PackageManager.getinstalledaplications () wyświetli listę zainstalowanych aplikacji oraz ApplicationInfo.sourceDir to droga do ... plik apk.

// in oncreate
   PackageManager pm = getPackageManager(); 
   for (ApplicationInfo app : pm.getInstalledApplications(0)) {
 Log.d("PackageList", "package: " + app.packageName + ", sourceDir: " + app.sourceDir);
 }

//output is something like
D/PackageList(5010): package: com.example.xmlparse, sourceDir: /data/app   /com.example.xmlparse-2.apk
D/PackageList(5010): package: com.examples.android.calendar, sourceDir: /data/app/com.examples.android.calendar-2.apk
D/PackageList(5010): package: com.facebook.katana, sourceDir: /data/app/com.facebook.katana-1.apk
D/PackageList(5010): package: com.facebook.samples.profilepicture, sourceDir: /data/app/com.facebook.samples.profilepicture-1.apk
D/PackageList(5010): package: com.facebook.samples.sessionlogin, sourceDir: /data/app/com.facebook.samples.sessionlogin-1.apk
D/PackageList(5010): package: com.fitworld, sourceDir: /data/app/com.fitworld-2.apk
D/PackageList(5010): package: com.flipkart.android, sourceDir: /data/app/com.flipkart.android-1.apk
D/PackageList(5010): package: com.fmm.dm, sourceDir: /system/app/FmmDM.apk
D/PackageList(5010): package: com.fmm.ds, sourceDir: /system/app/FmmDS.apk
 0
Author: Pankaj Arora,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-14 10:54:30

Znalazłem sposób, aby uzyskać nazwę pakietu APK w urządzeniu nie-root. nie jest taki elegancki, ale działa cały czas.

Krok 1 : na urządzeniu otwórz docelowy APK

Krok 2 : w oknie PC cmd wpisz następujące polecenia:

 adb shell dumpsys activity a > dump.txt

Ponieważ wyjście tego polecenia jest liczne, zalecane jest przekierowanie do pliku.

Krok 3 : Otwórz to wysypisko.plik txt z dowolnym edytorem.

Dla Urządzenia z systemem Android 4.4:
początek pliku wyglądałoby to tak:

ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)  
  Main stack:  
  * TaskRecord{41aa9ed0 #4 A com.tencent.mm U 0}  
    numActivities=1 rootWasReset=true userId=0  
    affinity=com.tencent.mm  
    intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10600000 cmp=com.tencent.mm/.ui.LauncherUI}  
    realActivity=com.tencent.mm/.ui.LauncherUI  
    askedCompatMode=false  
    lastThumbnail=null lastDescription=null  
    lastActiveTime=19915965 (inactive for 10s)  
    * Hist #9: ActivityRecord{41ba1a30 u0 com.tencent.mm/.ui.LauncherUI}  
        packageName=com.tencent.mm processName=com.tencent.mm 

Nazwa pakietu jest w trzeciej linii com.tencent.mm dla tego przykładu.

Dla Androida 4.4 i nowszych:
wyjście dumpsys trochę się zmieniło. spróbuj wyszukać "stos # 1", Nazwa pakietu będzie bardzo blisko pod nim.

Również wyszukaj "baseDir", znajdziesz pełną ścieżkę pliku apk!

 0
Author: Swing,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-22 02:17:22

Otwórz ES explorer - > wciśnij przycisk Menu w lewym górnym rogu (trzy poziome paski) - > w sekcji biblioteki wybierz Aplikacje.

W ten sposób otrzymujesz listę wszystkich aplikacji użytkownika. Znajdź swoją aplikację i wybierz ją z długim naciśnięciem. Następnie naciśnij "Więcej" w prawym dolnym rogu i wybierz "Wyślij". Następnie możesz użyć różnych opcji, np. możesz wybrać "ES Zapisz do", aby zapisać .plik apk do katalogu domowego lub gdziekolwiek indziej.

 -1
Author: JenyaKh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-04 14:26:26

Lub możesz pobrać "Bluetooth File Transfer" Z Google Play i ustawić folder domowy na /system/. Wtedy możesz nawet przejść do /.

 -2
Author: AJD,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-01 17:14:16