[Poradnik tygodnia] Jak odinstalować aplikacje typu bloatware bez roota na Androidzie 5.0+?

mm Michał Derej Artykuły 2017-07-15

Niechciane aplikacje, które na telefonach instalowane są przez producentów lub operatorów to ogromny problem Androida. Nie dość, że zajmują one cenne miejsce w pamięci urządzenia, to dodatkowo spowalniają je, działając w tle i zajmując miejsce w pamięci operacyjnej. Oczywiście programy tego typu da się usunąć, jednak wymaga to najczęściej dostępu do roota, a nie każdy chce wykonywać tę operację na swoim telefonie. W tym poradniku przedstawię wam sposób na to, jak odinstalować aplikacje typu bloatware bez dostępu do uprawnień SuperUsera. Wszystko, co będzie potrzebne to kilka minut wolnego czasu, telefon oraz komputer z konsolą ADB.

Odinstalowywanie aplikacji systemowych to operacja niebezpieczna. Wszystkie operacje wykonujesz na własną odpowiedzialność. Nie biorę odpowiedzialności za szkody, które mogą być spowodowane korzystaniem z tego poradnika.

Uwaga: aplikacje odinstalowywane są jedynie z profilu aktualnego użytkownika i dalej znajdują się w plikach systemowych. Nie usuwaj programów, które są niezbędne do poprawnego działania systemu. Niektóre aplikacje są wymagane do działania innych, przez co po odinstalowaniu jednego programu mogą wystąpić błędy w innych aplikacjach – miej to na uwadze. Po przywróceniu telefonu do ustawień fabrycznych ponownie pojawiają się na urządzeniu.

Poniższa metoda została przetestowana na: Galaxy S8, LG G6 oraz Google Pixel. Poradnik ten przeznaczony jest dla zaawansowanych użytkowników.

  1. Zainstaluj sterowniki USB dla swojego urządzenia. Możesz je znaleźć na stronie producenta. Uniwersalne sterowniki zebrane są także na tej stronie Google’a.
  2. Pobierz pliki ADB dla swojego systemu na komputerze (można je pobrać tutaj – Windows, Mac, Linux).
  3. Wypakuj pliki do jakiegoś folderu, dobrą lokalizacją jest w tym przypadku pulpit.
  4. Na swoim telefonie przejdź do opcji dla programistów. Jeśli nie posiadasz takiej zakładki w aplikacji Ustawienia, to musisz ją ręcznie włączyć – w tym celu przejdź do zakładki z informacjami o urządzeniu i siedmiokrotnie kliknij Numer wersji.
  5. W opcjach dla programistów włącz opcję Debugowanie USB.
  6. Podłącz swój telefon do komputera, jako typ połączenia wybierz opcję Transfer plików – MTP. Zaakceptuj monit z prośbą o debugowanie (wybierz opcję zawsze).
  7. Przejdź do lokalizacji, w której znajdują się pliki ADB.
  8. Trzymając klawisz Shift, wciśnij prawy przycisk myszy i wybierz opcję Otwórz okno polecenia tutaj.
  9. Otworzy się konsola ADB. Wpisz tam następującą komendę:
    adb devices
  10. Konsola powinna zwrócić ID urządzenia. Jeśli tak się nie dzieje, to powtórz kroki przedstawione wyżej.
  11. Użyj następującej komendy, by zlokalizować aplikacje, które chcesz usunąć (zamiast samsung wpisz nazwę producenta telefonu):
    adb shell cmd pm list packages | grep 'samsung'
  12. Po wybraniu aplikacji skorzystaj z następującej komendy:
    adb shell
  13. Użyj poniższej komendy, bo odinstalować program, którego nie potrzebujesz (nazwę pakietu wpisz bez znaków <>):
    pm uninstall -k --user 0 <nazwa pakietu>
  14. Po użyciu tej komendy powinien wyświetlić się napis Success, który informuje o poprawnym zakończeniu procedury odinstalowywania aplikacji. Gotowe!

Źródło: Reddit



  • acocieto

    wciśnięty Shift nie powoduje pojawienie się opcji Otwórz okno polecenia tutaj – jak to rozwiązać?

  • maxprzemo

    Punkt 11. zawiera błąd.
    Nie wywołuje się dwóch programów na raz. „pm” i „cmd package” to różne programy.
    pm obsługuje następujące komendy:
    usage: pm path [–user USER_ID] PACKAGE
    pm dump PACKAGE
    pm install [-lrtsfd] [-i PACKAGE] [–user USER_ID] [PATH]
    pm install-create [-lrtsfdp] [-i PACKAGE] [-S BYTES]
    [–install-location 0/1/2]
    [–force-uuid internal|UUID]
    pm install-write [-S BYTES] SESSION_ID SPLIT_NAME [PATH]
    pm install-commit SESSION_ID
    pm install-abandon SESSION_ID
    pm uninstall [-k] [–user USER_ID] PACKAGE
    pm set-installer PACKAGE INSTALLER
    pm move-package PACKAGE [internal|UUID]
    pm move-primary-storage [internal|UUID]
    pm clear [–user USER_ID] PACKAGE
    pm enable [–user USER_ID] PACKAGE_OR_COMPONENT
    pm disable [–user USER_ID] PACKAGE_OR_COMPONENT
    pm disable-user [–user USER_ID] PACKAGE_OR_COMPONENT
    pm disable-until-used [–user USER_ID] PACKAGE_OR_COMPONENT
    pm default-state [–user USER_ID] PACKAGE_OR_COMPONENT
    pm hide [–user USER_ID] PACKAGE_OR_COMPONENT
    pm unhide [–user USER_ID] PACKAGE_OR_COMPONENT
    pm grant [–user USER_ID] PACKAGE PERMISSION
    pm revoke [–user USER_ID] PACKAGE PERMISSION
    pm reset-permissions
    pm set-app-link [–user USER_ID] PACKAGE {always|ask|never|undefined}
    pm get-app-link [–user USER_ID] PACKAGE
    pm set-install-location [0/auto] [1/internal] [2/external]
    pm get-install-location
    pm set-permission-enforced PERMISSION [true|false]
    pm trim-caches DESIRED_FREE_SPACE [internal|UUID]
    pm create-user [–profileOf USER_ID] [–managed] [–restricted] [–ephemeral] [–guest] USER_NAME
    pm remove-user USER_ID
    pm get-max-users

    NOTE: ‚pm list’ commands have moved! Run ‚adb shell cmd package’
    to display the new commands.

    pm path: print the path to the .apk of the given PACKAGE.

    pm dump: print system state associated with the given PACKAGE.

    pm install: install a single legacy package
    pm install-create: create an install session
    -l: forward lock application
    -r: replace existing application
    -t: allow test packages
    -i: specify the installer package name
    -s: install application on sdcard
    -f: install application on internal flash
    -d: allow version code downgrade (debuggable packages only)
    -p: partial application install
    -g: grant all runtime permissions
    -S: size in bytes of entire session

    pm install-write: write a package into existing session; path may
    be ‚-‚ to read from stdin
    -S: size in bytes of package, required for stdin

    pm install-commit: perform install of fully staged session
    pm install-abandon: abandon session

    pm set-installer: set installer package name

    pm uninstall: removes a package from the system. Options:
    -k: keep the data and cache directories around after package removal.

    pm clear: deletes all data associated with a package.

    pm enable, disable, disable-user, disable-until-used, default-state:
    these commands change the enabled state of a given package or
    component (written as „package/class”).

    pm grant, revoke: these commands either grant or revoke permissions
    to apps. The permissions must be declared as used in the app’s
    manifest, be runtime permissions (protection level dangerous),
    and the app targeting SDK greater than Lollipop MR1.

    pm reset-permissions: revert all runtime permissions to their default state.

    pm get-install-location: returns the current install location.
    0 [auto]: Let system decide the best location
    1 [internal]: Install on internal device storage
    2 [external]: Install on external media

    pm set-install-location: changes the default install location.
    NOTE: this is only intended for debugging; using this can cause
    applications to break and other undersireable behavior.
    0 [auto]: Let system decide the best location
    1 [internal]: Install on internal device storage
    2 [external]: Install on external media

    pm trim-caches: trim cache files to reach the given free space.

    pm create-user: create a new user with the given USER_NAME,
    printing the new user identifier of the user.

    pm remove-user: remove the user with the given USER_IDENTIFIER,
    deleting all data associated with that user

    —————————————————————————————-
    A „cmd package” takie:
    Package manager (package) commands:
    help
    Print this help text.

    compile [-m MODE | -r REASON] [-f] [-c]
    [–reset] [–check-prof (true | false)] (-a | TARGET-PACKAGE)
    Trigger compilation of TARGET-PACKAGE or all packages if „-a”.
    Options:
    -a: compile all packages
    -c: clear profile data before compiling
    -f: force compilation even if not needed
    -m: select compilation mode
    MODE is one of the dex2oat compiler filters:
    verify-none
    verify-at-runtime
    verify-profile
    interpret-only
    space-profile
    space
    speed-profile
    speed
    everything
    -r: select compilation reason
    REASON is one of:
    first-boot
    boot
    install
    bg-dexopt
    ab-ota
    nsys-library
    shared-apk
    forced-dexopt
    core-app
    –reset: restore package to its post-install state
    –check-prof (true | false): look at profiles when doing dexopt?
    list features
    Prints all features of the system.
    list instrumentation [-f] [TARGET-PACKAGE]
    Prints all test packages; optionally only those targeting TARGET-PACKAGE
    Options:
    -f: dump the name of the .apk file containing the test package
    list libraries
    Prints all system libraries.
    list packages [-f] [-d] [-e] [-s] [-3] [-i] [-u] [–user USER_ID] [FILTER]
    Prints all packages; optionally only those whose name contains
    the text in FILTER.
    Options:
    -f: see their associated file
    -d: filter to only show disabled packages
    -e: filter to only show enabled packages
    -s: filter to only show system packages
    -3: filter to only show third party packages
    -i: see the installer for the packages
    -u: also include uninstalled packages
    list permission-groups
    Prints all known permission groups.
    list permissions [-g] [-f] [-d] [-u] [GROUP]
    Prints all known permissions; optionally only those in GROUP.
    Options:
    -g: organize by group
    -f: print all information
    -s: short summary
    -d: only list dangerous permissions
    -u: list only the permissions users will see
    dump-profiles TARGET-PACKAGE
    Dumps method/class profile files to
    /data/misc/profman/TARGET-PACKAGE.txt
    resolve-activity [–brief] [–components] [–user USER_ID] INTENT
    Prints the activity that resolves to the given Intent.
    query-activities [–brief] [–components] [–user USER_ID] INTENT
    Prints all activities that can handle the given Intent.
    query-services [–brief] [–components] [–user USER_ID] INTENT
    Prints all services that can handle the given Intent.
    query-receivers [–brief] [–components] [–user USER_ID] INTENT
    Prints all broadcast receivers that can handle the given Intent.
    suspend [–user USER_ID] TARGET-PACKAGE
    Suspends the specified package (as user).
    unsuspend [–user USER_ID] TARGET-PACKAGE
    Unsuspends the specified package (as user).
    set-home-activity [–user USER_ID] TARGET-COMPONENT
    set the default home activity (aka launcher).

    specifications include these flags and arguments:
    [-a ] [-d ] [-t ]
    [-c [-c ] …]
    [-e|–es …]
    [–esn …]
    [–ez …]
    [–ei …]
    [–el …]
    [–ef …]
    [–eu …]
    [–ecn ]
    [–eia [,<EXTRA_INT_VALUE…]]
    (mutiple extras passed as Integer[])
    [–eial [,<EXTRA_INT_VALUE…]]
    (mutiple extras passed as List)
    [–ela [,<EXTRA_LONG_VALUE…]]
    (mutiple extras passed as Long[])
    [–elal [,<EXTRA_LONG_VALUE…]]
    (mutiple extras passed as List)
    [–efa [,<EXTRA_FLOAT_VALUE…]]
    (mutiple extras passed as Float[])
    [–efal [,<EXTRA_FLOAT_VALUE…]]
    (mutiple extras passed as List)
    [–esa [,<EXTRA_STRING_VALUE…]]
    (mutiple extras passed as String[]; to embed a comma into a string,
    escape it using ",")
    [–esal [,<EXTRA_STRING_VALUE…]]
    (mutiple extras passed as List; to embed a comma into a string,
    escape it using „,”)
    [–f ]
    [–grant-read-uri-permission] [–grant-write-uri-permission]
    [–grant-persistable-uri-permission] [–grant-prefix-uri-permission]
    [–debug-log-resolution] [–exclude-stopped-packages]
    [–include-stopped-packages]
    [–activity-brought-to-front] [–activity-clear-top]
    [–activity-clear-when-task-reset] [–activity-exclude-from-recents]
    [–activity-launched-from-history] [–activity-multiple-task]
    [–activity-no-animation] [–activity-no-history]
    [–activity-no-user-action] [–activity-previous-is-top]
    [–activity-reorder-to-front] [–activity-reset-task-if-needed]
    [–activity-single-top] [–activity-clear-task]
    [–activity-task-on-home]
    [–receiver-registered-only] [–receiver-replace-pending]
    [–receiver-foreground]
    [–selector]
    [ | | ]
    —————————————————————————————————–
    Zależy też od wersji androida jaką mamy bo cmd package został wprowadzony od androida 7.0 jeśli się nie mylę.

  • gizmomp

    Jesli mi wyswietliło nazwę List of devices attached
    CB5A1YGNX0 device
    to komenda ma być
    adb shell cmd pm list packages | grep ‚CB5A1YGNX0’

    ?

    • MarcinS

      Ja przy LG G4 miałem LGH815… coś tam jeszcze i pisałem tylko ‚lg’

      • gizmomp
        • MarcinS

          No bo właśnie prawym jest tylko powershell, ja robilem w wierszu polecen, wywoływanym ze startu: cmd

          • gizmomp

            Potestuję. Dzięki @marcinso:disqus

          • disqus_Zc

            cmd ma taki problem – Desktopplatform-tools’ is not recognized as an internal or external command,
            operable program or batch file.

          • MarcinS

            C:Userstwoja nazwa>cd Desktopplatform-tools jeśli folder platform-tools masz na pulpiecie. „cd Desktopplatform-tools”

          • disqus_Zc

            C:UsersKomar>cd Desktopplatform-tools nie działa, is not recognized as an internal or external command,
            operable program or batch file

          • MarcinS

            platform-tools jest WYPAKOWANE na PULPICIE ?

          • disqus_Zc

            udało się, na tel dopiero zauważyłem potwierdzenie połączania z komp

        • MarcinS

          adb shell
          cmd pm list packages | grep ‚samsung’

        • Michał Derej

          Tak jak wspominają na dole, najpierw wpisz adb shell, a potem resztę.

    • Michał Derej

      Wpisujesz nazwę producenta, po to, by znaleźć pakiety powiązane z tą nazwą. Równie dobrze możesz wpisać „Play” (jak masz telefon brandowany przez Play) żeby wywalić ich aplikacje.

  • Sebastian Krauspe

    A może lepiej zrobić sobie tymczasowo roota i powyłączać apki aplikacją Disable Application ze sklepu?

    • maxprzemo

      Tymczasowo nie ma sensu bo i tak tracisz gwarancję. Na Samsungach nabijasz flagę Knox, na LG musisz pobrać od nich pliczek unlock.bin żeby odblokować bootloader i zostajesz w ich bazie danych jako (odblokowany bez gwarancji) bo podajesz przy zgłoszeniu IMEI telefonu, na Huawei masz podobnie tylko pobierasz kod, na Motoroli zostaje flaga relocked a kod też pobierasz ze strony producenta z podaniem IMEI. Nie wiem jak jest na Xiaomi i Sony bo nigdy nie miałem.

      • Michał Derej

        Żeby odblokować bootloader w Sony musisz wpisać IMEI na stronie producenta i dostajesz kodzik.

      • VikingsAreComing

        Na Xiaomi, wysyłasz prośbę na stronie, dostajesz SMS z potwierdzeniem i możesz przez program odblokowywać bootloader. Nie tracisz gwarancji dopóki nie zrobisz ROOTa, tzn. może tak, dopóki nie uceglisz telefonu w taki sposób, że nie będziesz umiał sam naprawić.

      • stark2991

        Na telefonach HTC odblokowanie BL też odbywa się przez stronę producenta i też ludzie gadali, że się zostaje w ich bazie i traci gwarancję – okazało się to bzdurą (sam wysyłałem tak odblokowany telefon). Zasadniczą sprawą jest, ze producent/serwis nie wie, czy użyłeś wygenerowany plik czy nie, bo przecież mogłeś się rozmyślić.
        Jedyna różnica to taka, że u HTC nie podaje się numeru IMEI, tylko wygenerowany w ADB token, w którym w sumie nie wiadomo co jest zapisane.

      • Ja Ba

        Na Xiaomi nie ma problemu mimo wysyłania prośby o zgodę na odblokowanie. Nie wiąże się to z utratą gwarancji.

  • MarcinS

    Jestę zielony. Jak ktoś jest zielony jak ja, to : adb shell cmd pm list packages | grep ‚samsung’ to dwie komendy, 1.adb shell 2. reszta xd

    • MarcinS

      Wbrew temu co pokazuje zdjęcie powyżej, nie usuniecie nic od Googla, np. któryś z dodawanych aplikacji, obowiązkowych pozycji androida, jedynie paczki producenta telefonu.

      • Michał Derej

        To bardzo zależy od urządzenia, na Pixelach udało się usunąć np. Mapy od Google’a.

      • Michał Derej

        Ps: aby usunąć aplikację od Google zamiast nazwy producenta wpisz słowo Google. Powinno zadziałać.

    • maxprzemo

      Przekierowujesz wynik pierwszej komendy do drugiej znacznikiem ” | ” (Pionową kreską).
      Tak można przekierowywać wyniki jednej komendy do drugiej w shell’u.
      Proste jak budowa cepa 😉

      • MarcinS

        może i tak, ale pierwsza komenda konczy się na „adb shell”, | jest później

        • maxprzemo

          Pierwszą komendą włączasz interfejs shell.
          Drugą działasz już w tym interfejsie.
          Spróbujesz zrozumiesz 😉

          • MarcinS

            Tak, rozumiem, tak zrobiłem. Dla mnie to trochę czarna magia. Tak jak wspomniałem w początkowym komentarzu i tylko o tym, to to że shell uruchamia się osobno, info dla zielonych nobów jak ja, żeby nie tłukli całej linijki na raz, bo to przynajmniej u mnie nie poszło 😀 Odtwórczo coś tam pogrzebię, choć nie zawsze rozumiem co robię 😀

          • maxprzemo

            Jeśli nie „klepiesz” komend z uprawnieniami roota (su) to nie jesteś w stanie nic popsuć choćbyś nie wiem co tam zrobił 🙂

      • MarcinS

        adb shell
        cmd pm list packages | grep ‚samsung’