====== Adb ====== Un [[https://maly.io/@marsxyz/100397802696303439|toot sur Mastodon]] a attiré mon attention sur **adb** qui permet apparemment de supprimer les applications qu'on ne sait pas supprimer depuis l'interface d'android (mais uniquement désactiver) comme Facebook, les Google Apps, etc.. ===== Mettre son smartphone en "mode debug" ===== [[https://www.frandroid.com/comment-faire/tutoriaux/229753_questcequelemodedebogageusb|Frandroid]] nous indique comment activer le "mode développeur". Il faut aller dans les **Paramètres**, puis dans **À propos du téléphone** et toucher 7 fois la case **Numéro de build**. Le menu **Options pour les développeurs** apparaît alors dans les paramètres systèmes. (Ça donne l'impression d'être une mauvaise astuce pour un jeux vidéo, mais ça marche...) Dans le menu pour les développeurs, on trouve une option "Débogage USB" qu'on peut activer. ===== Installer adb ===== $ sudo apt install adb J'ai eu des erreurs de permissions dans certains cas : $ adb devices List of devices attached ZY909667 no permissions (user in plugdev group; are your udev rules wrong?); see [http://developer.android.com/tools/device.html] J'ai trouvé la solution là : [[https://www.janosgyerik.com/adding-udev-rules-for-usb-debugging-android-devices/|https://www.janosgyerik.com/adding-udev-rules-for-usb-debugging-android-devices/]] ===== Jouer avec adb ===== ==== Liste des appareils branchés ==== J'ai du lancer plusieurs fois la commande : $ adb devices List of devices attached * daemon not running. starting it now on port 5037 * free(): invalid next size (fast) ADB server didn't ACK * failed to start daemon * error: cannot connect to daemon $ adb devices List of devices attached * daemon not running. starting it now on port 5037 * * daemon started successfully * BJ030262 unauthorized Un pop-up apparait sur le téléphone pour demander si on autorise l'accès à cet ordinateur. Une fois qu'on a validé, on peut relancer la commande : $ adb devices List of devices attached BJ030262 device ==== Voir les logs du téléphone ==== La commande "logcat" permet de voir les logs du téléphone mais ça spamme vraiment beaucoup... $ adb logcat ==== Se connecter sur le téléphone ==== $ adb shell 1|bardock:/ $ Liste des programmes installés sur le téléphone : $ a acpi am app_process app_process64 appops atrace autoload alias antradio_app app_process32 applypatch appwidget audioflacapp $ b base64 bcc bg blockdev brctl bu bugreportz bzcat basename bdt bind bmgr break bugreport builtin $ c cal chcon chroot comm cpio case chdir cksum command cplay cat chgrp clear content curl cd chmod cmd continue cut chamomile_provision chown cmp cp $ d dalvikvm dex2oat dirname dpm dalvikvm32 dexdump dmesg du dalvikvm64 dexlist do dumpsys date df done dd diag_callback_sample dos2unix $ e e_loop echo elif env eval exit export ebtables egrep else esac exec expand expr $ f fallocate fgrep fm_qsoc_patches for false fi fmconfig free fc find fmfactorytest function fg flock fmfactorytestserver functions $ g getenforce getopts global grep gzip getevent getprop gptest groups $ h hash hci_qcomm_init head history hostname hwclock $ i id ime insmod iorenice ip6tables-save if in integer ip iptables ifconfig inotifyd ioctl ip6tables iptables-restore iftop input ionice ip6tables-restore iptables-save $ j jobs $ k kill killall $ l ld.mc linker load_policy logcat logwrapper lsmod let linker64 local login losetup lsof let] ln log logname ls lsusb $ m make_ext4fs mknod mm-qjpeg-enc-test mmi_agent32 monkey make_f2fs mkswap mm-qomx-idec-test mmi_agent64 more md5sum mktemp mm-qomx-ienc-test mmi_debug mount media mm-qcamera-app mm-vidc-omx-test mmi_diag mountpoint mkdir mm-qjpeg-dec-test mmc_utils_extended modinfo mv $ n nameref nandread netstat newfs_msdos nice nl nl_listener nohup $ o oatdump od $ p paste patchoat pidof ping6 pm print printf ps patch pgrep ping pkill pmap printenv prlimit pwd $ q qjpeg-dma-test qmi-framework-tests/ qmi_simple_ril_test $ r r readlink realpath renice return rmmod run-as radish readonly reboot requestsync rm rmnetcli runcon read readwritenv rename restorecon rmdir route $ s schedtest sendevent setenforce sha1sum source suspend screencap sensors_test setprop shift split svc screenrecord sensorservice setsid sleep start swapoff secdiscard seq settings sm stat swapon sed service setup_fs sort stop sync select set sh soter_client strings sysctl $ t tac telecom times top truncate tail test tinycap touch tty tar test_module_pproc tinymix toybox type taskset then tinypcminfo tr typeset tc time tinyplay trap tee timeout toolbox true $ u uiautomator umask unalias uniq unset uptime ulimit umount uname unix2dos until usleep $ v vendor_cmd_tool vmstat $ w wait wc wdsdaemon whence which while whoami wm $ x xargs xxd $ y (rien) $ z (rien) ==== Récupérer la liste des applications installées ==== 1|bardock:/ $ pm list packages package:com.bq.wizardbq.insurance (...) package:com.google.android.inputmethod.latin On peut bien évidemment filtrer cette liste avec [[grep]] : bardock:/ $ pm list packages | grep google package:com.google.android.youtube package:com.google.android.ext.services package:com.google.android.googlequicksearchbox package:com.google.android.onetimeinitializer package:com.google.android.ext.shared package:com.google.android.apps.messaging package:com.google.android.configupdater package:com.google.android.marvin.talkback package:com.google.android.deskclock package:com.google.android.gm package:com.google.android.apps.tachyon package:com.google.android.instantapps.supervisor package:com.google.zxing.client.android package:com.google.android.setupwizard package:com.google.android.music package:com.google.android.dialer package:com.google.android.apps.docs package:com.google.android.apps.maps package:com.google.android.webview package:com.google.android.syncadapters.contacts package:com.google.android.calculator package:com.google.android.packageinstaller package:com.google.android.gms package:com.google.android.gsf package:com.google.android.ims package:com.google.android.tts package:com.google.android.partnersetup package:com.google.android.videos package:com.google.android.feedback package:com.google.android.printservice.recommendation package:com.google.android.apps.photos package:com.google.android.calendar package:com.google.android.gsf.login package:com.google.android.backuptransport package:com.google.android.talk package:com.google.android.inputmethod.latin Si je regarde un peu les applications qui sont désactivées dans mon téléphones, je trouve : * L'agenda de base (J'utilise Etar) * L'appareil photo de base (J'utilise OpenCamera) * Chrome (J'utilise IceCatMobile) * Clavier Google (J'utilise MessagEase) * Contacts (J'utilise Simple Contacts) * Drive (J'utilise Nextcloud) * Duo * Gmail * Google Play Musique * Google Play Films et séries * Google * Hangouts * Magnétophone * Maps * Messages (J'utilise Silence) * Photos (J'utilise Simple Galery) * YouTube (J'utilise NewPipe) ==== Avoir plus d'informations sur une applications ==== bardock:/ $ dumpsys | grep -A 50 "Package .*youtube" Can't find service: android.service.gatekeeper.IGateKeeperService Can't find service: netd Package [com.google.android.youtube] (8fe1a80): userId=10090 pkg=Package{ac2e252 com.google.android.youtube} codePath=/system/app/YouTube resourcePath=/system/app/YouTube legacyNativeLibraryDir=/system/app/YouTube/lib primaryCpuAbi=arm64-v8a secondaryCpuAbi=null versionCode=1307553400 minSdk=21 targetSdk=26 versionName=13.07.55 splits=[base] apkSigningVersion=1 applicationInfo=ApplicationInfo{15f5ad5 com.google.android.youtube} flags=[ SYSTEM HAS_CODE ALLOW_CLEAR_USER_DATA ALLOW_BACKUP KILL_AFTER_RESTORE RESTORE_ANY_VERSION LARGE_HEAP ] privateFlags=[ HAS_DOMAIN_URLS RESIZEABLE_ACTIVITIES ] dataDir=/data/user/0/com.google.android.youtube supportsScreens=[small, medium, large, xlarge, resizeable, anyDensity] timeStamp=2009-01-01 00:00:00 firstInstallTime=2009-01-01 00:00:00 lastUpdateTime=2009-01-01 00:00:00 signatures=PackageSignatures{35b8923 [7d3bce25]} installPermissionsFixed=false installStatus=1 pkgFlags=[ SYSTEM HAS_CODE ALLOW_CLEAR_USER_DATA ALLOW_BACKUP KILL_AFTER_RESTORE RESTORE_ANY_VERSION LARGE_HEAP ] declared permissions: com.google.android.youtube.permission.C2D_MESSAGE: prot=signature, INSTALLED install permissions: com.google.android.c2dm.permission.RECEIVE: granted=true android.permission.USE_CREDENTIALS: granted=true com.google.android.providers.gsf.permission.READ_GSERVICES: granted=true com.google.android.youtube.permission.C2D_MESSAGE: granted=true android.permission.MANAGE_ACCOUNTS: granted=true android.permission.SYSTEM_ALERT_WINDOW: granted=true android.permission.NFC: granted=true android.permission.RECEIVE_BOOT_COMPLETED: granted=true com.google.android.gms.permission.AD_ID_NOTIFICATION: granted=true android.permission.INTERNET: granted=true android.permission.GET_PACKAGE_SIZE: granted=true android.permission.ACCESS_NETWORK_STATE: granted=true android.permission.VIBRATE: granted=true android.permission.ACCESS_WIFI_STATE: granted=true android.permission.WAKE_LOCK: granted=true User 0: ceDataInode=1139683 installed=true hidden=false suspended=false stopped=false notLaunched=false enabled=3 lastDisabledCaller: com.android.settings gids=[3003] ==== Supprimer une application ==== Commençons par supprimer **chrome** : bardock:/ $ pm list packages | grep chrome package:com.android.chrome On va utiliser la commande [[pm]] : 127|bardock:/ $ pm --help Error: unknown command '--help' 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 L'option "--user 0" semble indispensable. Il y a également l'option "-k" qui permet de garder les données et caches du programme. bardock:/ $ pm uninstall com.android.chrome Failure [DELETE_FAILED_INTERNAL_ERROR] bardock:/ $ pm uninstall --user 0 com.android.chrome Success Après avoir désinstallé Chrome, j'étais à 8,78 Go utilisé par les applications. On continue! Hop, on vire "Google Musique" : bardock:/ $ pm uninstall --user 0 com.google.android.music Success Le plus compliqué reste de trouver le nom du package à supprimer. On peut chercher avec [[dumpsys]], comme par exemple pour Google Vidéos : $ dumpsys | grep -A 50 "Package .*videos" (...) versionName=4.1.6.13 On peut alors comparer dans le menu et vérifier que la version correspond. * L'agenda de base : com.android.providers.calendar * L'appareil photo de base : **?** * Chrome : com.android.chrome * Clavier Google : * Contacts : * Drive : * Duo : * Gmail : com.google.android.gm * Google Play Musique : com.google.android.music * Google Play Films et séries : com.google.android.videos * Google (le widget) : com.google.android.googlequicksearchbox * Hangouts : com.google.android.talk * Magnétophone : **?** * Maps : com.google.android.apps.maps * Messages : com.google.android.apps.messaging * Photos : com.google.android.apps.photos * YouTube : com.google.android.youtube bardock:/ $ pm uninstall --user 0 com.google.android.apps.maps Success bardock:/ $ pm uninstall --user 0 com.google.android.apps.photos Success bardock:/ $ pm uninstall --user 0 com.google.android.music Success bardock:/ $ pm uninstall --user 0 com.android.providers.calendar Success bardock:/ $ pm uninstall --user 0 com.google.android.googlequicksearchbox Success bardock:/ $ pm uninstall --user 0 com.google.android.talk Success bardock:/ $ pm uninstall --user 0 com.google.android.apps.messaging Success bardock:/ $ pm uninstall --user 0 com.google.android.videos Success bardock:/ $ pm uninstall --user 0 com.google.android.youtube Success bardock:/ $ pm uninstall --user 0 com.google.android.gm Success bardock:/ $ pm uninstall --user 0 com.google.android.calendar Success ===== Upgrade LineageOS ===== Mettre à jour [[LineageOS]] : [[https://wiki.lineageos.org/devices/bardock/upgrade|https://wiki.lineageos.org/devices/bardock/upgrade]] $ adb root $ adb reboot sideload $ adb sideload lineage-17.1-20210316-nightly-bardock-signed.zip serving: 'lineage-17.1-20210316-nightly-bardock-signed.zip' (~47%) adb: failed to read command: Success La dernière fois, je n'ai pas réussis à lancer la commande "adb sideload ...", j'ai du copier le fichier sur le téléphone et lancer l'installation directement depuis TWRP. $ adb push lineage-18.1-20220705-nightly-bardock-signed.zip /storage/self/primary/lineage-18.1-20220705-nightly-bardock-signed.zip