logo Debian Debian Debian-France Debian-Facile Debian-fr.org Forum-Debian.fr Debian ? Communautés logo inclusivité

Debian-facile

Bienvenue sur Debian-Facile, site d'aide pour les nouveaux utilisateurs de Debian.

Vous n'êtes pas identifié(e).


L'icône rouge permet de télécharger chaque page du wiki visitée au format PDF et la grise au format ODT → ODT PDF Export

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
utilisateurs:slyfox:scripts:accueil [14/08/2018 17:23]
Slyfox créée
utilisateurs:slyfox:scripts:accueil [07/08/2020 18:25] (Version actuelle)
Slyfox
Ligne 1: Ligne 1:
-====== ​Sylmedia ​======+====== ​Samsung supprimer APK constructeur ​======
  
-  * Objet :  +===== Installation =====
-  * Niveau requis : {{tag>​débutant}} +
-  * Commentaires : - +
-  * Débutant, à savoir : [[:​doc:​systeme:​commandes:​le_debianiste_qui_papillonne|Utiliser GNU/Linux en ligne de commande, tout commence là !.]] :-) +
-  * Suivi :  +
-    * Création par [[user>​Slyfox]] 31/​07/​2018 +
-  * Commentaires sur le forum : +
  
-<note warning>__**Script en cours d’écriture!**__</note>+<code root>apt install android-tools-adb</code>
  
-Installation des paquets: 
-<code root>​apt-get update 
-apt-get install ffmpeg yad flac vorbis-tools eyed3 kid3-cli</​code>​ 
  
-Copier le script ci-dessous dans un fichier et le nommer **slymedia.sh** \\ 
-Déplacer le fichier **slymedia.sh** dans le dossier **/home** ou a convenance.\\ 
-Avant le premier lancement il faut que le fichier soit exécutable (adapter si nécessaire le chemin du fichier).\\ 
-<code user>​chmod u+x /​$HOME/​slymedia.sh</​code>​ 
  
-Pour lancer ​le script:\\+===== Configurer ​le téléphone ===== 
 +Activer le mode développeur 
 +Aller dans Paramètres 
 +Puis Paramètres système 
 +Aller dans « À propos du téléphone » 
 +Tapoter 7 fois sur le « numéro de build » 
 +Le menu « options pour les développeurs » apparaît dans les paramètres système. 
 +Activer le «debogage USB« 
  
-  * Ouvrir un terminal graphique (gnome terminal, terminal mate...) et taper le chemin du fichier **slymedia.sh** (adapter si nécessaire le chemin du fichier).\\+===== Commandes =====
  
-<​code ​user>/​$HOME/​slymedia.sh</​code>​+Lancer adb 
 +<​code ​root>adb start-server</​code>​
  
-ou\\+Lister les périphériques connectés au pc 
 +<code root>adb devices</​code>​
  
-  * Faire un double clic sur le fichier.+===== Suppression APK =====
  
 +<code user> #! /bin/bash
  
 + 
 +###########################​
 +# Phone apps and services #
 +###########################​
 +adb shell "cmd package install-existing com.android.stk"​ # SIM toolkit
 +adb shell "cmd package install-existing com.android.stk2"​ # SIM toolkit (maybe for dual-sim devices)
 +adb shell "cmd package install-existing com.sec.android.app.simsettingmgr"​ # SIM card manager, maybe required, contains configuration and settings for handling dual SIM (give a SIM an icon, a name, and so on)
 +adb shell "pm uninstall -k --user 0 com.samsung.android.smartcallprovider"​ # The 4th tab in the Phone app for 'local places'​
 +adb shell "pm uninstall -k --user 0 com.sec.vsim.ericssonnsds.webapp"​ # NSDSWebApp. The Non Sim Device Solution (NSDS) is linked to VoLTE and VoWifi (Wifi Calling). NSDS allows connecting non sim devices to IMS core: https://​uk.linkedin.com/​in/​hemant-kumar-dewnarain-2b779679
 +adb shell "pm uninstall -k --user 0 com.android.cts.ctsshim"​ # Probably linked to accessibility feature "​Captioned Telephone Service. No internet access required
 +adb shell "pm uninstall -k --user 0 com.android.cts.priv.ctsshim"​ # Probably linked to accessibility feature "​Captioned Telephone Service. No internet access required
 +adb shell "pm uninstall -k --user 0 com.samsung.crane"​ # Phone, with extended features: share rich data (doodles, location, text messages). Couldn'​t find a way to access it from an official interface
 +adb shell "pm uninstall -k --user 0 com.hiya.star"​ # Possibly linked to the Phone app "​Caller ID and spam protection service"​ as well as the "​Places"​ feature
  
-<​note>​**Version du 02.08.2018**</note>+adb shell "cmd package install-existing com.sec.ims" # IMS (IP Multimedia Subsystem) is linked to VoLTE, WiFi Calling and Rich Communication Services (RCS): https://​en.wikipedia.org/​wiki/​IP_Multimedia_Subsystem 
 +adb shell "cmd package install-existing com.sec.imslogger"​ # ImsLogger (see above for IMS) 
 +adb shell "cmd package install-existing com.sec.imsservice"​ # IMS Service (see above for IMS) 
 +adb shell "cmd package install-existing com.samsung.advp.imssettings"​ # Seem linked to IMS 
 +adb shell "cmd package install-existing com.sec.epdg"​ # ePDG (evolved packet data gateway) could be linked to WiFi Calling and possible VoLTE: http://​www.oracle.com/​us/​industries/​communications/​wifi-calling-epdg-wp-2874668.pdf
  
-===== Script =====+###############​ 
 +# System apps # 
 +###############​ 
 +adb shell "cmd package install-existing com.samsung.accessibility"​ # Accessibility settings (useful for apps creating virtual buttons such as a pie-menu) 
 +adb shell "cmd package install-existing com.samsung.android.app.soundpicker"​ # The ringtone picker provided by the system for any Alarm app 
 +adb shell "cmd package install-existing com.samsung.android.allshare.service.fileshare"​ # Wi-Fi Direct (bluetooth-wifi sharing of files) 
 +adb shell "cmd package install-existing com.samsung.android.allshare.service.mediashare"​ # Nearby service, maybe related to the previous wifi direct fileshare
  
-<​code ​user>#! /bin/bash+# Ant+ wireless technology 
 +adb shell "pm uninstall -k --user 0 com.dsi.ant.plugins.antplus"​ # ANT+ Plugins Service 
 +adb shell "pm uninstall -k --user 0 com.dsi.ant.sample.acquirechannels"​ # ANT + DUT 
 +adb shell "pm uninstall -k --user 0 com.dsi.ant.server"​ # ANT+ HAL service 
 +adb shell "pm uninstall -k --user 0 com.dsi.ant.service.socket" ​ANT Radio Service
  
-Paquets à installer: ffmpeg yad flac vorbis-tools eyed3 kid3-cli +################################​ 
-Version20180802+# Samsung specific system apps # 
 +################################​ 
 +adb shell "cmd package install-existing com.samsung.android.lool"​ # The Setting entry "​Device Care" with battery, storage, memory, and security 
 +adb shell "cmd package install-existing com.samsung.android.app.aodservice"​ # Always-on-Display,​ handles most of the lockscreen 
 +adb shell "cmd package install-existing com.samsung.android.MtpApplication" ​PC connection doesn'​t work well without this helper utility 
 +adb shell "cmd package install-existing com.wssyncmldm"​ # Software updatedoesn'​t check OTA updates without 
 +adb shell "cmd package install-existing com.sec.android.emergencymode.service"​ # EmergencyManagerService,​ linked to the battery'​s "​Maximum power saving"​ mode 
 +adb shell "cmd package install-existing com.sec.android.sdhms"​ # Samsung Device Health Manager Service, most likely linked to "​battery habits"​ analysis
  
-#​=========================================================================================================== +adb shell "pm uninstall ​---user com.sec.android.cover.ledcover" ​# LED Cover Service
-function YADMAIN() +
-+
-yadMain=$(yad --form \ +
---geometry="640x720"​ \ +
---borders="​20"​ \ +
---title "​SlyMedia"​ \ +
---item-separator="​!"​ \ +
---columns=1 \ +
---scroll \ +
---field="​ ":LBL " " \ +
---field="<​b>​Profil</​b>":​CB "​${profile}!Audio FLAC!Audio vorbis!Audio aac!Audio mp3!Vidéo mkv - x264 - vorbis!Vidéo mkv - x264 - aac!Vidéo mkv - x264 - mp3!Vidéo mkv - x265 - vorbis!Vidéo mkv - x265 - aac!Vidéo mkv - x265 - mp3" \ +
---field="​ ":LBL " " \ +
---field="<​b>​Qualité</​b>":​CB "​${quality}!Excellente!Elevée!Moyenne!Minimum!Faible"​ \ +
---field="​ ":LBL " " \ +
---field="<​b>​Dossier destination</​b>":​DIR "​${dirOut}"​ \ +
---field="​ ":LBL " " \ +
---field="":​LBL ""​ \ +
---field="<​b>​Source</​b>":​LBL " " \ +
---field="​ ":LBL " " \ +
---button="​Quitter!gtk-quit!:​1"​ \ +
---button="​Options par défaut!gtk-refresh!:​3"​ \ +
---button="​Préférences!gtk-preferences!:​2"​ \ +
---button="​Source!gtk-file!:​4"​ \ +
---button="​Lancer conversion!gtk-convert!:​0" ​+
-"​${cdeYadStream[@]}"​)+
  
-Status de sortie Yad +adb shell "pm uninstall -k --user 0 com.sec.location.nsflp2" ​Samsung Location SDK 
-status="$?"+adb shell "pm uninstall -k --user 0 com.samsung.android.location" ​# slocation
  
-Récupération variables +Maybe Knox-related 
-profile=$(awk ​-F [\|] '​{print $2}' <<<​ "​${yadMain}"​) +adb shell "cmd package install-existing com.samsung.ucs.agent.boot" # bootagent, probably linked to "eSE UCS Plugin" ​below, probably required by Knox  
-quality=$(awk -F [\|] '​{print $4}' <<< ​"${yadMain}"​) +adb shell "cmd package install-existing com.samsung.ucs.agent.ese" ​# eSE UCS Plugin, eSE is for "embedded SEcurity", probably required by Knox 
-dirOut=$(awk ​-F [\|] '​{print $6}' <<< ​"${yadMain}"​) +adb shell "cmd package install-existing com.samsung.android.smartmirroring" ​# Smart View, for screen mirroring and Chromecast
-+
-#=========================================================================================================== +
-function YADPREFERENCE() +
-+
-# Sélection du ou des fichiers source +
-yadPreference=$(yad --form \ +
---title ​"SlyMedia" ​\ +
---geometry="640x720"​ \ +
---borders="20" ​+
---field="<​b>​Préférences vidéo</​b>":​LBL " " \ +
---field="​Définition de la vidéo":​CB ​"${definition}!Identique à la source!3840x2160 (UHD 16:​9)!1920x1080 (FULL-HD 16:​9)!1280x720 (HD 16:​9)!1024x576 (16:​9)!768x432 (16:​9)!512x288 (16:​9)!256x144 (16:​9)!720x576 (SD PAL)!720x480 (SD NTSC)!640x480 (4:​3)!320x240 (4:​3)!1024x768 (4:​3)!1280x960 (4:​3)!1280x800 (16:​10)!1440x900 (16:​10)!1680x1050 (16:​10)!1920x1200 (16:​10)!2560x1600 (16:10)" ​+
---field="​ ":LBL " " \ +
---field="​ ":LBL " " \ +
---field="​ ":LBL " " \ +
---field="<​b>​Préférences audio</​b>":​LBL " " \ +
---field="​Langue audio préférée":​CB "​${langAudio}!Toutes les langues!Aucune!Français!Allemand!Anglais!Arabe!Espagnol!Espéranto!Italien!Japonais!Latin!Luxembourgeois!Néerlandais!Portugais!Romanche!Russe"​ \ +
---field="​ ":LBL " " \ +
---field="​Débit binaire":​CB "​${typeRate}!VBR!CBR"​ \ +
---field="​ ":LBL " " \ +
---field="​ ":LBL " " \ +
---field="​ ":LBL " " \ +
---field="<​b>​Préférences sous-titre</​b>":​LBL " " \ +
---field="​Langue sous-titre préférée":​CB "​${langSub}!Toutes les langues!Aucune!Français!Allemand!Anglais!Arabe!Espagnol!Espéranto!Italien!Japonais!Latin!Luxembourgeois!Néerlandais!Portugais!Romanche!Russe"​ \ +
---field="​ ":LBL " " \ +
---field="​ ":LBL " " \ +
---field="​ ":LBL " " \ +
---field="<​b>​Options</​b>":​LBL " " \ +
---field="​Supprimer toutes les métadonnées":​CHK "​${metadata}"​ \ +
---field="​Ne pas encoder si même codec que l'​original":​CHK "​${nocopy}"​ \ +
---field="​Dossier source":​DIR "​${dirIn}"​ \ +
---button="​gtk-quit:​1"​ \ +
---button="​gtk-cancel:​2"​ \ +
---button="​gtk-ok:​0"​)+
  
-Status de sortie Yad +##################################################​ 
-status="$?"+# Samsung user apps, customization,​ and services # 
 +##################################################​ 
 +adb shell "cmd package install-existing com.samsung.android.contacts"​ # Samsung "​Contacts"​ app 
 +adb shell "cmd package install-existing com.sec.android.app.myfiles"​ # My Files, file browser 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.video"​ # Video, the default video player 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.themecenter"​ # Samsung Themes 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.themestore"​ # Galaxy Themes 
 +adb shell "pm uninstall -k --user 0 com.sec.android.app.samsungapps"​ # Galaxy Store 
 +adb shell "pm uninstall -k --user 0 com.sec.android.app.sbrowser"​ # Samsung Galaxy Browser 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.rubin.app"​ # Customization Service 
 +adb shell "pm uninstall -k --user 0 com.samsung.daydream.customization"​ # Some daydream VR customization capability? 
 +adb shell "pm uninstall -k --user 0 com.sec.android.app.chromecustomizations"​ # Chrome browser customization 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.scloud"​ # Samsung Cloud 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.mateagent"​ # Samsung Galaxy Friends 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.mobileservice"​ # Samsung Experience Service, handling the Samsung account and experience 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.weather"​ 
 +adb shell "pm uninstall -k --user 0 com.sec.android.daemonapp" ​# Weather
  
-# Récupération variables 
-definition=$(awk -F [\|] '​{print $2}' <<<​ "​${yadPreference}"​) 
-langAudio=$(awk -F [\|] '​{print $7}' <<<​ "​${yadPreference}"​) 
-typeRate=$(awk -F [\|] '​{print $9}' <<<​ "​${yadPreference}"​) 
-langSub=$(awk -F [\|] '​{print $14}' <<<​ "​${yadPreference}"​) 
-metadata=$(awk -F [\|] '​{print $19}' <<<​ "​${yadPreference}"​) 
-nocopy=$(awk -F [\|] '​{print $20}' <<<​ "​${yadPreference}"​) 
-dirIn=$(awk -F [\|] '​{print $21}' <<<​ "​${yadPreference}"​) 
  
 +# Samsing SmartSwitch
 +adb shell "pm uninstall -k --user 0 com.samsung.android.smartswitchassistant"​ # Samsung SmartSwitch
 +adb shell "pm uninstall -k --user 0 com.sec.android.easyMover"​ # Related Smart Switch
 +adb shell "pm uninstall -k --user 0 com.sec.android.easyMover.Agent"​ # Smart Switch Agent
 +adb shell "pm uninstall -k --user 0 com.samsung.android.shortcutbackupservice"​ # ShortcutBNR,​ linked to SmartSwitch Samsung Cloud features
  
-+Equalizers 
-#=========================================================================================================== +adb shell "pm uninstall -k --user 0 com.sec.android.app.soundalive"​ # SoundAlive, responsible for Dobly Atmos and other equalizer stuff (accessible from the Settings app
-function YADSOURCE() +adb shell "pm uninstall -k --user 0 com.sec.hearingadjust" ​# Adapt Sound, the sound equalizer in Accessibility services
-+
-IFS=$"|"+
  
-yadSource=$(yad --list \ +# SmartThings 
---radiolist \ +adb shell "pm uninstall ​---user 0 com.samsung.android.beaconmanager" ​# SmartThings 
---title="Slymedia"​ \ +adb shell "pm uninstall ​---user 0 com.samsung.android.ststub" ​# SmartThings 
---text="​Choississez une source"​ \ +adb shell "pm uninstall ​---user com.samsung.android.easysetup" ​# SmartThings
---print-all \ +
---geometry="​320x300" ​\ +
---borders="20" \ +
---center \ +
---button="​gtk-quit:​1" ​\ +
---button="gtk-cancel:​2"​ \ +
---button="​gtk-ok:​0" ​+
---column=""​ \ +
---column="​Type de source"​ \ +
-"​TRUE"​ "​Fichier"​ \ +
-"​FALSE"​ "​DVD"​ \ +
-"​FALSE"​ "​CD"​ \ +
-"​FALSE"​ "​DDL"​)+
  
-Status de sortie Yad +Samsung Health 
-status="$?"+adb shell "pm uninstall -k --user 0 com.sec.android.app.shealth" ​# Samsung Health 
 +adb shell "pm uninstall -k --user 0 com.sec.android.service.health"​ # Health Service, from Samsung
  
-Récupération variables +Widgets 
-source=$(awk -F [\|] '/​TRUE/​ {print $2}' <<< ​"${yadSource}"​) +adb shell "pm uninstall ​---user 0 com.sec.android.widgetapp.easymodecontactswidget" ​# Favorite Contacts, probably the favourite contacts when enabling the "simple use" ​senior mode 
-+adb shell "pm uninstall ​---user 0 com.sec.android.widgetapp.samsungapps" ​# Galaxy Essentials Widget 
-#​=========================================================================================================== +adb shell "pm uninstall ​---user com.sec.android.widgetapp.webmanual" ​# User manual
-function YADFILE() +
-+
-# Sélection du ou des fichiers source +
-fileIn=$(yad ​--file \ +
---multiple \ +
---title ​"SlyMedia"​ \ +
---geometry="640x720" ​\ +
---borders="20" \ +
---separator="​\n"​ \ +
---center \ +
---file-filter="​Fichier media | *mkv *.ogg *.mp4 *.avi *.vob *.flac *.mp3 *.m4a" ​\ +
---file-filter ​"Tous | *" \ +
---filename="​${dirIn}"​ \ +
---button="​gtk-quit:​1"​ \ +
---button="​gtk-cancel:​2"​ \ +
---button="​gtk-ok:​0")+
  
-Status de sortie Yad +################################################​ 
-status="$?+# Mandatory Knox apps, and other security apps # 
-} +################################################​ 
-#=========================================================================================================== +adb shell "cmd package install-existing com.samsung.android.knox.containeragent" ​# Knox thing that gets re-enabled at update 
-function CONFIGURATION() +adb shell "cmd package install-existing com.samsung.android.knox.containercore"​ # Knox thing that gets re-enabled at update 
-{ +adb shell "pm uninstall -k --user 0 com.samsung.android.knox.analytics.uploader" ​Knox Analytics Uploader 
-Création du dossier ​.slymedia +adb shell "pm uninstall -k --user 0 com.samsung.android.knox.containerdesktop"​ # KnowContainerDesktop 
-dirSylmedia="/home/$USER/.slymedia+adb shell "pm uninstall -k --user 0 com.knox.vpn.proxyhandler"​ # Samsung'​s Work profile for Entreprise proxy 
-[[ ! -"${dirSylmedia}" ​]] && mkdir "${dirSylmedia}"+adb shell "pm uninstall -k --user 0 com.sec.enterprise.knox.attestation" ​Knox-related 
 +adb shell "pm uninstall -k --user 0 com.sec.enterprise.knox.cloudmdm.smdms"​ # Knox Enrollment Service 
 +adb shell "pm uninstall -k --user 0 com.samsung.knox.securefolder"​ # Secure Folder 
 +adb shell "pm uninstall -k --user 0 com.samsung.knox.securefolder.setuppage"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.klmsagent"​ # KLMS Agent, most likely linked to Knox 
 +adb shell "pm uninstall -k --user 0 com.trustonic.teeservice"​ # TeeService, for Samsung Pay? Trustronic "​Trusted Execution Environment":​ https://www.trustonic.com/news/​blog/​devices-trustonic-tee/​ 
 +adb shell "pm uninstall -k --user 0 com.trustonic.tuiservice" ​# TuiService, for Samsung Pay? Trustronic "​Trusted User Interfaces":​ https://​www.trustonic.com/​news/​blog/​devices-trustonic-tee/​ 
 +adb shell "pm uninstall ​-k --user 0 com.samsung.android.spay" ​# Samsung Pay 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.spayfw" ​# Samsung PaymentFramework 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.samsungpass"​ # Samsung Pass 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.samsungpassautofill"​ # Autofill with Samsung Pass
  
-Suppression des anciens dossiers temporaires +###############################​ 
-rm -rf "${dirSylmedia}"/tmp*+# Samsung camera related apps # 
 +###############################​ 
 +adb shell "pm uninstall ​-k --user 0 com.sec.android.app.camera" ​# Samsung Camera 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.app.interactivepanoramaviewer"​ # Interactive panorama viewer (taken with the Samsung Camera) 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.app.motionpanoramaviewer"​ # Motion panorama viewer (taken with the Samsung Camera) 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.app.selfmotionpanoramaviewer"​ # Self-motion panorama viewer (taken with the Samsung Camera) 
 +adb shell "pm uninstall -k --user 0 com.samsung.app.highlightplayer"​ # Useful for the Video editor 
 +adb shell "pm uninstall -k --user 0 com.samsung.app.slowmotion"​ # Slow-motion viewer, taken with the Samsung Camera 
 +adb shell "pm uninstall -k --user 0 com.sec.android.gallery3d"​ # Samsung Gallery 
 +adb shell "pm uninstall -k --user 0 com.sec.android.mimage.photoretouching"​ # Photo editor 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.provider.stickerprovider"​ # If disabled, the "AR Emoji" button crashed the Camera app 
 +adb shell "pm uninstall -k --user 0 com.sec.android.app.vepreload" ​# Video Editor
  
-Création du dossier temporaire +Gallery'​s recognition and identification of content (same "​shared user id") 
-dossierTmp="$(mktemp ​-"${dirSylmedia}/​tmp-XXXXXXXXXXX"​)"​+adb shell "pm uninstall -k --user 0 com.samsung.cmh"​ # CMHProvider ​(CMHProvider.apk),​ required by the Gallery. Responsible of face recognition in the Gallery 
 +adb shell "pm uninstall ​-k --user 0 com.samsung.mlp" ​# mlp (MediaLearningPlatform.apk),​ has permissions linked to cmh, and visionintelligence 
 +adb shell "pm uninstall ​-k --user 0 com.samsung.storyservice" ​# Gallery stories (StoryService.apk), creates stories from the user photos and videos 
 +adb shell "pm uninstall -k --user 0 com.samsung.faceservice"​ # (FaceService.apk) 
 +adb shell "pm uninstall -k --user 0 com.samsung.ipservice"​ # (IPService.apk)
  
-Création du fichier de configurations +adb shell "pm uninstall -k --user 0 com.samsung.android.app.camera.sticker.facear.preload" ​Default live sticker 
-fileConfig="${dirSylmedia}/​config.txt"+adb shell "pm uninstall -k --user 0 com.samsung.android.app.camera.sticker.stamp.preload" ​# Stamps
  
-[[ ! -f "​${fileConfig}"​ ]] && CONFIGDEFAUT +################​ 
-+# Samsung Edge # 
-#=========================================================================================================== +################​ 
-function CONFIGDEFAUT() +adb shell "pm uninstall ​-k --user 0 com.cnn.mobile.android.phone.edgepanel" ​# CNN edge app 
-{ +adb shell "pm uninstall ​---user 0 com.samsung.android.app.appsedge" ​# Apps edge 
-Options par défaut +adb shell "pm uninstall -k --user 0 com.samsung.android.app.clipboardedge" ​# Clipboard edge 
-echo -"profile=\"Vidéo mkv x264 vorbis\"\nquality=\"Elevée\"\ndirOut=\"${HOME}\"\ndefinition=\"Identique à la source\"\nlangAudio=\"Toutes les langues\"\ntypeRate=\"VBR\"\nlangSub=\"​Toutes les langues\"​\nmetadata=\"​FALSE\"​\nnocopy=\"​FALSE\"​\ndirIn=\"​${HOME}/​\"" ​> "​${fileConfig}"​ +adb shell "pm uninstall -k --user 0 com.samsung.android.app.cocktailbarservice" ​# Edge screen 
-+adb shell "pm uninstall -k --user 0 com.samsung.android.app.sbrowseredge" ​# Samsung Internet panel 
-#=========================================================================================================== +adb shell "pm uninstall -k --user 0 com.samsung.android.app.taskedge" ​# Tasks edge 
-function SAVE() +adb shell "pm uninstall -k --user 0 com.samsung.android.service.peoplestripe" ​# People edge 
-+adb shell "pm uninstall -k --user 0 com.samsung.android.widgetapp.yahooedge.finance" # Finance, edge widget 
-# Sauvegarde variables dans fichier de configuaration utilisateur +adb shell "pm uninstall ​-k --user 0 com.samsung.android.widgetapp.yahooedge.sport" ​# Sport, edge widget
-echo -e "​profile=\"​${profile}\"​\nquality=\"​${quality}\"​\ndirOut=\"​${dirOut}\"​\ndefinition=\"​${definition}\"​\nlangAudio=\"​${langAudio}\"​\ntypeRate=\"​${typeRate}\"​\nlangSub=\"​${langSub}\"​\nmetadata=\"​${metadata}\"​\nnocopy=\"​${nocopy}\"​\ndirIn=\"​${dirIn}\""​ > "​${fileConfig}"+
  
-echo "​profile:​ ${profile}"​ +#################​ 
-echo "​quality:​ ${quality}"​ +# Samsung Bixby # 
-echo "​dirOut:​ ${dirOut}"​ +#################​ 
-echo "definition: ${definition}+adb shell "pm uninstall -k --user 0 com.samsung.android.app.spage" ​# Bixby Home 
-echo "langAudio: ${langAudio}" +adb shell "pm uninstall -k --user 0 com.samsung.android.app.settings.bixby" # SettingsBixby 
-echo "​typeRate:​ ${typeRate}"​ +adb shell "pm uninstall -k --user 0 com.samsung.android.bixby.agent
-echo "​langSub:​ ${langSub}"​ +adb shell "pm uninstall -k --user 0 com.samsung.android.bixby.agent.dummy
-echo "​metadata:​ ${metadata}"​ +adb shell "pm uninstall -k --user 0 com.samsung.android.bixby.es.globalaction
-echo "​nocopy:​ ${nocopy}"​ +adb shell "pm uninstall -k --user 0 com.samsung.android.bixby.plmsync
-echo "​dirIn:​ ${dirIn}"​ +adb shell "pm uninstall -k --user 0 com.samsung.android.bixby.service
-echo "​=============================================="​ +adb shell "pm uninstall -k --user 0 com.samsung.android.bixby.voiceinput
-+adb shell "pm uninstall -k --user 0 com.samsung.android.bixby.wakeup
-#=========================================================================================================== +adb shell "pm uninstall -k --user 0 com.samsung.android.svoice" ​# SVoice 
-function LANGUE() +adb shell "pm uninstall -k --user 0 com.samsung.svoice.sync" ​# Voice Service, S Voice is the ancestor of Bixby 
-+adb shell "pm uninstall -k --user 0 com.samsung.systemui.bixby
- if [[ "​${lang}"​ == "​fre"​ ]] || [[ "​${lang}"​ == "​fra"​ ]] || [[ "​${lang}"​ == "fr" ​]]; then +adb shell "pm uninstall -k --user 0 com.samsung.systemui.bixby2
- language="Français+adb shell "pm uninstall -k --user 0 com.samsung.android.visionintelligence" ​# Bixby Vision 
- languageISO="fre+adb shell "pm uninstall -k --user 0 com.samsung.visionprovider" ​# VisionProvider,​ maybe linked to Bixby?
-  +
- elif [[ "${lang}" ​== "​gre"​ ]] || [[ "​${lang}"​ == "​deu"​ ]] || [[ "​${lang}"​ == "​de"​ ]]; then +
- language="Allemand+
- languageISO="deu+
-  +
- elif [[ "${lang}" ​== "​eng"​ ]] || [[ "​${lang}"​ == "​en"​ ]]; then +
- language="Anglais+
- languageISO="eng+
-  +
-  +
- elif [[ "${lang}" ​== "​ara"​ ]] || [[ "​${lang}"​ == "​ar"​ ]]; then +
- language="Arabe+
- languageISO="ara+
-  +
- elif [[ "${lang}"​ == "​bre"​ ]] || [[ "​${lang}"​ == "​br"​ ]]; then +
- language="​Breton"​ +
- languageISO="​bre"​  +
-  +
- elif [[ "​${lang}"​ == "​cat"​ ]] || [[ "​${lang}"​ == "​ca"​ ]]; then +
- language="​Catalan"​ +
- languageISO="​cat"+
  
- elif [[ "​${lang}"​ == "​chi"​ ]] || [[ "​${lang}"​ == "​zho"​ ]] || [[ "​${lang}"​ == "​zh"​ ]]; then +###############​ 
- language="​Chinois"​ +# Samsung DeX # 
- languageISO="​chi"​ +###############​ 
-  +adb shell "pm uninstall -k --user 0 com.samsung.desktopsystemui" ​# Samsung DeX System UI 
- elif [[ "${lang}" ​== "​kor"​ ]] || [[ "​${lang}"​ == "​ko"​ ]]; then +adb shell "pm uninstall -k --user 0 com.sec.android.app.desktoplauncher" ​# Samsung DeX Home 
- language="​Coréen"​ +adb shell "pm uninstall -k --user 0 com.sec.android.desktopcommunity" ​# Samsung DeX community 
- languageISO="​kor"​ +adb shell "pm uninstall -k --user 0 com.sec.android.desktopmode.uiservice" ​# Samsung DeX
-  +
- elif [[ "​${lang}"​ == "​cos"​ ]] || [[ "​${lang}"​ == "​co"​ ]]; then +
- language="​Corse"​ +
- languageISO="​cos"​ +
-  +
- elif [[ "​${lang}"​ == "​hat"​ ]] || [[ "​${lang}"​ == "​ht"​ ]]; then +
- language="​Créole_haïtien"​ +
- languageISO="​hat"​ +
-  +
- elif [[ "​${lang}"​ == "​hat"​ ]] || [[ "​${lang}"​ == "​ht"​ ]]; then +
- language="​Créole_haïtien"​ +
- languageISO="​hat"​ +
-  +
- elif [[ "​${lang}"​ == "​rcf"​ ]] || [[ "​${lang}"​ == "​rc"​ ]]; then +
- language="​Créole_Réunionnais"​ +
- languageISO="​rcf"​ +
-  +
- elif [[ "​${lang}"​ == "​gla"​ ]] || [[ "​${lang}"​ == "gd" ​]]; then +
- language="Écossais+
- languageISO="gla"+
  
- elif [[ "​${lang}"​ == "​spa"​ ]] || [[ "​${lang}"​ == "​es"​ ]]; then +#######################################​ 
- language="​Espagnol"​ +# Hidden apps (debug and diagnostics) # 
- languageISO="​spa"​ +#######################################​
-  +
- elif [[ "​${lang}"​ == "​epo"​ ]] || [[ "​${lang}"​ == "​eo"​ ]]; then +
- language="​Espéranto"​ +
- languageISO="​epo"​+
  
- elif [[ "​${lang}"​ == "​fin"​ ]] || [[ "​${lang}"​ == "​fi"​ ]]; then +# Dialable apps 
- language="Finnois+adb shell "cmd package install-existing com.sec.android.app.factorykeystring" ​# DeviceKeyString (dial *#0283# to open audio LoopbackTest control, dial *#2663# for TSP firmware update) 
- languageISO="fin+adb shell "cmd package install-existing com.sec.android.app.hwmoduletest" ​# HwModuleTest,​ a hardware test app (dial *#0*# to open). Fun low-level stuff to see in there 
-  +adb shell "cmd package install-existing com.sec.android.app.servicemodeapp" ​# SysDump, low-level debugging and diagnostics tools (dial *#9900# to open) 
- elif [[ "${lang}" ​== "​glg"​ ]] || [[ "​${lang}"​ == "​gl"​ ]]; then +adb shell "cmd package install-existing com.sec.android.RilServiceModeApp" ​# Service mode RIL, for diagnostics (dial *#0011# for modem connectivity info, *#9090# for diagnostics control) 
- language="Galicien+adb shell "cmd package install-existing com.sec.factory.camera" ​# Camera Test (dial *#34971539# to open CameraFirmware Standard) 
- languageISO="​glg"​ +adb shell "cmd package install-existing com.sec.usbsettings" ​# USBSettings,​ choose from ADB, MTP, RNDIS, ACM, DM (dial *#0808# to open) 
-  +adb shell "pm uninstall -k --user 0 com.sec.factory.iris.usercamera" ​# Camera Iris User Test, the test from the *#0*# menu
-  +
- elif [[ "​${lang}"​ == "​wel"​ ]] || [[ "​${lang}"​ == "​cym"​ ]] || [[ "​${lang}"​ == "cy" ​]]; then +
- language="Gallois+
- languageISO="wel"+
  
- elif [[ "​${lang}"​ == "​gre"​ ]] || [[ "​${lang}"​ == "​ell"​ ]] || [[ "​${lang}"​ == "​el"​ ]]; then +# Other apps 
- language="Grec+adb shell "pm uninstall -k --user 0 com.samsung.android.networkdiagnostic" ​# Network diagnostic 
- languageISO="gre+adb shell "pm uninstall -k --user 0 com.sec.bcservice" ​# Linked to some diagnostics?​ It mentions TcpDump 
-  +adb shell "pm uninstall -k --user 0 com.sec.android.app.bluetoothtest" ​# BluetoothTest,​ probably a priviledged diagnostics app 
- elif [[ "${lang}" ​== "​heb"​ ]] || [[ "​${lang}"​ == "​he"​ ]]; then +adb shell "pm uninstall -k --user 0 com.sec.android.diagmonagent" ​# DiagMonAgent,​ probably diagnostics data collection from Settings > Biometrics and security > Send diagnostic data 
- language="Hébreu+adb shell "pm uninstall -k --user 0 com.sec.factory" ​# DeviceTest 
- languageISO="​heb"​ +adb shell "pm uninstall -k --user 0 com.sec.android.app.wlantest" ​# WlanTest 
-  +adb shell "pm uninstall -k --user 0 com.sec.epdgtestapp" ​# EpdgTestApp,​ test app for ePDG functionnality?​
- elif [[ "​${lang}"​ == "​hin"​ ]] || [[ "​${lang}"​ == "​hi"​ ]]; then +
- language="​Hindi"​ +
- languageISO="​hin"​ +
-  +
- elif [[ "​${lang}"​ == "​hun"​ ]] || [[ "​${lang}"​ == "​hu"​ ]]; then +
- language="​Hongrois"​ +
- languageISO="​hun"​ +
-  +
- elif [[ "​${lang}"​ == "​gle"​ ]] || [[ "​${lang}"​ == "​ga"​ ]]; then +
- language="​Irlandais"​ +
- languageISO="​gle"​ +
-  +
- elif [[ "​${lang}"​ == "​ice"​ ]] || [[ "​${lang}"​ == "​isl"​ ]] || [[ "​${lang}"​ == "is" ​]]; then +
- language="Islandais+
- languageISO="ice" +
  
- elif [[ "​${lang}"​ == "​ita"​ ]] || [[ "​${lang}"​ == "​it"​ ]]; then +################​ 
- language="​Italien"​ +# Game-related # 
- languageISO="​ita"​ +################​ 
-  +adb shell "pm uninstall -k --user 0 com.enhance.gameservice"  
- elif [[ "${lang}" ​== "​jpn"​ ]] || [[ "​${lang}"​ == "​jp"​ ]]; then +adb shell "pm uninstall -k --user 0 com.samsung.android.game.gamehome
- language="​Japonais"​ +adb shell "pm uninstall -k --user 0 com.samsung.android.game.gametools
- languageISO="​jpn"​ +adb shell "pm uninstall -k --user 0 com.samsung.android.game.gos" ​# Samsung Game Optimizing Service
-  +
- elif [[ "​${lang}"​ == "​lat"​ ]] || [[ "​${lang}"​ == "la" ​]]; then +
- language="Latin+
- languageISO="lat"+
  
- elif [[ "​${lang}"​ == "​ltz"​ ]] || [[ "​${lang}"​ == "​la"​ ]]; then +###############​ 
- language="​Luxembourgeois"​ +# Google apps # 
- languageISO="​ltz"​ +###############​
-  +
- elif [[ "​${lang}"​ == "​dut"​ ]] || [[ "​${lang}"​ == "​nld"​ ]] || [[ "​${lang}"​ == "​lb"​ ]]; then +
- language="​Néerlandais"​ +
- languageISO="​dut"​ +
-  +
- elif [[ "​${lang}"​ == "​nor"​ ]] || [[ "​${lang}"​ == "​no"​ ]]; then +
- language="​Norvégien"​ +
- languageISO="​nor"​ +
-  +
- elif [[ "​${lang}"​ == "​por"​ ]] || [[ "​${lang}"​ == "​pt"​ ]]; then +
- language="​Portugais"​ +
- languageISO="​por"​ +
-  +
- elif [[ "​${lang}"​ == "​roh"​ ]] || [[ "​${lang}"​ == "​rm"​ ]]; then +
- language="​Romanche"​ +
- languageISO="​roh"​+
  
- elif [[ "${lang}" ​== "rus" ​]] || [[ "${lang}" ​== "ru" ​]]; then +# Visible apps 
- language="Russe+adb shell "pm uninstall -k --user 0 com.google.android.apps.docs" ​# Google Drive 
- languageISO="rus"+adb shell "pm uninstall -k --user 0 com.google.android.apps.maps" ​# Google Maps 
 +adb shell "pm uninstall -k --user 0 com.google.android.apps.photos" ​# Google Photos 
 +adb shell "pm uninstall -k --user 0 com.google.android.GoogleCamera"​ # Google Camera 
 +adb shell "pm uninstall -k --user 0 com.google.android.gm"​ # Gmail 
 +adb shell "pm uninstall -k --user 0 com.google.android.videos"​ # Google Movies 
 +adb shell "pm uninstall -k --user 0 com.google.android.youtube"​ # Google'​s YouTube 
 +adb shell "pm uninstall -k --user 0 com.google.android.music"​ # Google Music 
 +# More hidden apps 
 +adb shell "pm uninstall -k --user 0 com.google.ar.core"​ # Google Play Services for AR (Augmented Reality) 
 +adb shell "pm uninstall -k --user 0 com.google.vr.vrcore"​ # Google VR (Virtual Reality) Services 
 +adb shell "pm uninstall -k --user 0 com.google.android.tts"​ # Text-to-speech synthesis 
 +adb shell "pm uninstall -k --user 0 com.android.hotwordenrollment.okgoogle"​ # Enroll for "​OK-Google"​ 
 +adb shell "pm uninstall -k --user 0 com.android.hotwordenrollment.xgoogle"​ # Enroll for something 
 +adb shell "pm uninstall -k --user 0 com.google.android.apps.nexuslauncher"​ # Removes the Google launcher 
 +adb shell "pm uninstall -k --user 0 com.google.android.apps.restore"​ # Restore data from the cloud or transfer it from another device 
 +adb shell "pm uninstall -k --user 0 com.google.android.apps.tachyon"​ 
 +adb shell "pm uninstall -k --user 0 com.google.android.backuptransport"​ 
 +adb shell "pm uninstall -k --user 0 com.google.android.ext.shared"​ 
 +adb shell "pm uninstall -k --user 0 com.google.android.feedback"​ # Market feedback agent 
 +adb shell "pm uninstall -k --user 0 com.google.android.gms.policy_sidecar_aps"​ 
 +adb shell "pm uninstall -k --user 0 com.google.android.googlequicksearchbox"​ # The super fat Google app 
 +adb shell "pm uninstall -k --user 0 com.google.android.onetimeinitializer"​ 
 +adb shell "pm uninstall -k --user 0 com.google.android.partnersetup"​ 
 +adb shell "pm uninstall -k --user 0 com.google.android.printservice.recommendation"​ # Print Service Recommendation Service 
 +adb shell "pm uninstall -k --user 0 com.google.android.setupwizard"​ # The initial setup wizard, that can pop later to "​finish the setup" with recommended apps 
 +adb shell "pm uninstall -k --user 0 com.google.android.syncadapters.calendar" ​# Google Calendar Sync 
 +adb shell "pm uninstall -k --user 0 com.google.android.syncadapters.contacts" ​# Google Contacts Sync 
 +adb shell "pm uninstall -k --user 0 com.google.android.apps.turbo" ​# Device Health Services
  
- elif [[ "${lang}" ​== "swe" ​]] || [[ "${lang}" ​== "sv" ​]]; then +####################​ 
- language="Suédois+# Third-party apps # 
- languageISO="swe"+####################​ 
 +#adb shell "pm uninstall -k --user 0 com.skype.raider" ​# Skype 
 +adb shell "pm uninstall -k --user 0 com.linkedin.android" ​# LinkedIn 
 +adb shell "pm uninstall -k --user 0 com.microsoft.office.excel" ​# Microsoft Excel 
 +adb shell "pm uninstall -k --user 0 com.microsoft.office.powerpoint"​ # Microsoft PowerPoint 
 +adb shell "pm uninstall -k --user 0 com.microsoft.office.word"​ # Microsoft Word 
 +adb shell "pm uninstall -k --user 0 com.microsoft.skydrive"​ # Microsoft SkyDrive 
 +adb shell "pm uninstall -k --user 0 de.axelspringer.yana.zeropage"​ # upday 
 +adb shell "pm uninstall -k --user 0 flipboard.boxer.app"​ # Flipboard 
 +adb shell "pm uninstall -k --user 0 com.facebook.appmanager"​ # Facebook 
 +adb shell "pm uninstall -k --user 0 com.facebook.katana"​ # Facebook 
 +adb shell "pm uninstall -k --user 0 com.facebook.services" ​# Facebook 
 +adb shell "pm uninstall -k --user 0 com.facebook.system" ​# Facebook 
 +adb shell "pm uninstall -k --user 0 com.amazon.appmanager"
  
- else +################​ 
- language="Inconnu+# Unclassified # 
- languageISO="und+################​ 
- fi  +adb shell "pm uninstall -k --user 0 package:​com.sec.android.app.fm" ​# Radio FM 
-} +adb shell "cmd package install-existing com.android.keychain
-#=========================================================================================================== +adb shell "cmd package install-existing com.android.nfc"​ 
-function STREAM() +adb shell "cmd package install-existing com.android.providers.blockednumber"​ 
-{ +adb shell "cmd package install-existing com.android.providers.calendar"​ 
-[[ -"${dossierTmp}/​stream.txt" ​]] && rm "${dossierTmp}/​stream.txt+adb shell "cmd package install-existing com.android.providers.settings"​ 
-cdeYadStream=() +adb shell "cmd package install-existing com.android.proxyhandler"​ 
-  +adb shell "cmd package install-existing com.android.settings.intelligence"​ 
-IFS=$'​\n'​+adb shell "cmd package install-existing com.android.wallpaperbackup"​ 
 +adb shell "cmd package install-existing com.android.wallpapercropper"​ 
 +adb shell "cmd package install-existing com.sec.android.wallpapercropper2" ​Background image and lock-screen cropping tool 
 +adb shell "cmd package install-existing com.android.wallpaper.livepicker"​ 
 +adb shell "cmd package install-existing com.samsung.android.app.smartcapture"​ 
 +adb shell "cmd package install-existing com.samsung.android.authfw"​ 
 +adb shell "cmd package install-existing com.samsung.android.bio.face.service"​ 
 +adb shell "cmd package install-existing com.samsung.android.mdm"​ 
 +adb shell "cmd package install-existing com.samsung.android.messaging"​ 
 +adb shell "cmd package install-existing com.samsung.android.providers.context"​ 
 +adb shell "cmd package install-existing com.samsung.android.server.iris"​ 
 +adb shell "cmd package install-existing com.samsung.android.wallpaper.res"​ 
 +adb shell "cmd package install-existing com.samsung.sec.android.application.csc"​ 
 +adb shell "cmd package install-existing com.sec.android.app.clockpackage"​ 
 +adb shell "cmd package install-existing com.sec.android.emergencylauncher"​ 
 +adb shell "cmd package install-existing com.sec.android.ofviewer"​ 
 +adb shell "cmd package install-existing com.sec.android.provider.emergencymode"​ 
 +adb shell "cmd package install-existing com.sec.android.providers.security"​ 
 +adb shell "cmd package install-existing com.sec.modem.settings"​ 
 +adb shell "pm uninstall -k --user 0 android.autoinstalls.config.samsung"​ 
 +adb shell "pm uninstall -k --user 0 com.android.backupconfirm"​ 
 +adb shell "pm uninstall -k --user 0 com.android.bips"​ # Default print service 
 +adb shell "pm uninstall -k --user 0 com.android.bluetoothmidiservice"​ 
 +adb shell "pm uninstall -k --user 0 com.android.bookmarkprovider"​ 
 +adb shell "pm uninstall -k --user 0 com.android.calllogbackup"​ 
 +adb shell "pm uninstall -k --user 0 com.android.captiveportallogin"​ 
 +adb shell "pm uninstall -k --user 0 com.android.chrome"​ 
 +adb shell "pm uninstall -k --user 0 com.android.dreams.basic"​ 
 +adb shell "pm uninstall -k --user 0 com.android.dreams.phototable"​ 
 +adb shell "pm uninstall -k --user 0 com.android.egg"​ 
 +adb shell "pm uninstall -k --user 0 com.android.htmlviewer"​ 
 +# adb shell "pm uninstall -k --user 0 com.android.inputdevices"​ # Input devices, only contains a receiver named "​Android keyboard",​ possibly for an external keyboard 
 +adb shell "pm uninstall -k --user 0 com.android.managedprovisioning"​ # Work profile setup 
 +adb shell "pm uninstall -k --user 0 com.android.mms.service"​ # MmsService, no activity but a service, with permissions related to carrier connectivity. For receiving MMS? 
 +adb shell "pm uninstall -k --user 0 com.android.pacprocessor"​ 
 +adb shell "pm uninstall -k --user 0 com.android.printspooler"​ # Print spooler 
 +adb shell "pm uninstall -k --user 0 com.android.providers.partnerbookmarks"​ 
 +# adb shell "pm uninstall -k --user 0 com.android.sharedstoragebackup"​ # One service ​(ObbBackupService), nothing else. No internet access, and might be useful 
 +adb shell "pm uninstall -k --user 0 com.android.statementservice"​ # Intent Filter Verification Service 
 +adb shell "pm uninstall ​-k --user 0 com.diotek.sec.lookup.dictionary" ​# Dictionary 
 +adb shell "pm uninstall -k --user 0 com.galaxyfirsatlari" 
 +adb shell "pm uninstall -k --user 0 com.gd.mobicore.pa
 +adb shell "pm uninstall -k --user 0 com.mobeam.barcodeService"​ 
 +adb shell "pm uninstall -k --user 0 com.monotype.android.font.chococooky"​ 
 +adb shell "pm uninstall -k --user 0 com.monotype.android.font.cooljazz"​ 
 +adb shell "pm uninstall -k --user 0 com.monotype.android.font.foundation"​ 
 +adb shell "pm uninstall -k --user 0 com.monotype.android.font.rosemary"​ 
 +adb shell "pm uninstall -k --user 0 com.osp.app.signin"​ 
 +adb shell "pm uninstall -k --user 0 com.policydm"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.aasaservice"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.accessory"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.accessory.beansmgr"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.accessory.safiletransfer"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.app.accesscontrol"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.app.advsounddetector"​ # Sound detectors 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.app.assistantmenu"​ # Assistant menu 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.app.color"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.app.filterinstaller"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.app.galaxyfinder"​ # Finder, the "​search in device"​ feature 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.app.ledcoverdream"​ # LEF icon editor, for LED covers 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.app.mirrorlink"​ # Samsung MirrorLink 1.1, to connect the phone to a car 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.app.multiwindow"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.app.notes"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.app.omcagent"​ # Configuration update, some activities are very suspicious: "​Recommended apps"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.app.panel.naver.v"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.app.reminder"​ # Reminder, does regular network access 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.app.simplesharing"​ # Link sharing 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.app.social"​ # What's new 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.app.talkback"​ # Voice Assistant 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.app.watchmanager"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.app.watchmanagerstub"​ # Wearable Manager Installer 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.app.withtv"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.bbc.bbcagent" ​ # BBCAgent 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.calendar"​ # Calendar 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.clipboarduiservice"​ # ClipboardUIService 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.coreapps"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.da.daagent"​ # Dual messenger 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.dlp.service"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.dqagent"​ # DQA (Device Quality Agent), reportedely keeps tabs on Wi-Fi quality throughout the device 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.drivelink.stub"​ # CarmodeStub 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.email.provider"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.emojiupdater"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.fingerprint.service"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.fmm"​ # Find my mobile 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.gearoplugin"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.hmt.vrsvc"​ # Gear VR Service 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.keyguardwallpaperupdator"​ # Keyguard Wallpaper Updator, seems linked to selecting multiple lockscreen wallpapers, features removed in S8 but app stayed 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.kidsinstaller"​ # Kids Home Installer 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.oneconnect"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.provider.shootingmodeprovider"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.samsungpositioning"​ # Samsung Positioning 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.sdk.handwriting"​ # Handwriting Service 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.sdk.professionalaudio.app.audioconnectionservice"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.sdk.professionalaudio.utility.jammonitor"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.securitylogagent"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.smartface"​ # SmartFaceService 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.smartfitting"​ # SmartFittingService
  
-for i in ${fileIn}; do +adb shell "pm uninstall -k --user 0 com.samsung.android.sm.devicesecurity"​ # This is the antivirus ​in Settings -> Device care -> Security 
- STREAMTITLE +# adb shell "pm uninstall ​---user 0 com.samsung.android.sm.policy" ​# SCPM Client, *might* be used for power savingshttps://​www.reddit.com/​r/​GalaxyS6/​comments/​4cg70v/​what_is_scpm_client/​d2ij0ep/​ but performs network requests 
- STREAMVIDEO +# adb shell "pm uninstall -k --user 0 com.samsung.android.spdclient" # Security policy updates, updates the SELinux policies according to Security Enhancements for Android ​(SE for Android
- STREAMAUDIO +adb shell "pm uninstall ​-k --user 0 com.samsung.android.spdfnote" ​# Write on PDF 
- STREAMSUBTITLE +adb shell "pm uninstall ​---user 0 com.samsung.android.stickercenter" ​# StickerCenter,​ related to Samsung stickers: https://​developer.samsung.com/​galaxy/​stickers
- cdeYadStream=(${cdeYadStream[@]} ​--field=" ​":LBL " "+
-  +
-done +
-+
-#=========================================================================================================== +
-function STREAMTITLE() +
-{ +
-Titre et durée +
-streamFormat=$(ffprobe ​-"${i}" -hide_banner ​-v quiet -show_entries format=duration,​bit_rate -of csv=s="|")+
  
-durationS=$(awk -F [\|] '​{print $2}' <<< ​"${streamFormat}") +adb shell "pm uninstall -k --user 0 com.samsung.android.svcagent" ​# SVC Agent 
-durationHMS=$(date ​-d@"${durationS}" -u +%H:%M:%S) +adb shell "pm uninstall ​-k --user 0 com.samsung.android.timezone.autoupdate_O" 
-rateTotal=$(awk ​-F [\|] '​{printf ​"%d kb/s" ,($3/1000)}'​ <<< ​"${streamFormat}")+# adb shell "pm uninstall ​-k --user 0 com.samsung.android.timezone.data_P"​ # Samsung Time Zone Data 
 +# adb shell "pm uninstall ​-k --user 0 com.samsung.android.timezone.updater" ​# Time Zone Updater 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.universalswitch" ​# Universal switchaccessibility feature to control the phone: https://​www.samsung.com/​uk/​accessibility/​mobile-universal-switch/​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.visioncloudagent"​ 
 +adb shell "pm uninstall -k --user 0 com.samsung.android.voc"
  
-Mise en mémoire dans tableau cdeYadStream +adb shell "pm uninstall ​---user com.samsung.app.newtrim" # Video trimmer 
-cdeYadStream=(${cdeYadStream[@]} --field="<​b>​TITRE:​ $(basename "​${i}"​) ​${durationHMS} ​${rateTotal}</​b>":​LBL " ") +adb shell "pm uninstall ​---user com.samsung.clipboardsaveservice" # ClipboardSaveServiceprobably the clipboard history sometimes accessible 
-+adb shell "pm uninstall ​---user com.samsung.dcmservice
-#​=========================================================================================================== +adb shell "pm uninstall ​---user com.samsung.enhanceservice
-function STREAMVIDEO() +adb shell "pm uninstall ​-k --user com.samsung.hiddennetworksetting"  
-+adb shell "pm uninstall ​---user com.samsung.rcs" # RcsSettings ​(Rich Communication Services ​"joyn"​), ​has permissions linked to cmhand visionintelligencehttps://en.wikipedia.org/wiki/Rich_Communication_Services 
-streamVideo=$(ffprobe ​-i  "​${i}"​ -hide_banner -v quiet -select_streams v -show_entries stream=index,​codec_name,​width,​height,​r_frame_rate -of csv=s="​|"​) +adb shell "pm uninstall ​---user com.samsung.safetyinformation" # Some safety informationtelling you not to put your phone in you eyes (I'm serious
- +adb shell "pm uninstall ​---user 0 com.samsung.SMT
-while read line; do +adb shell "pm uninstall ​---user com.sec.android.app.apex" # Samsung ApexServiceprovides a Motion Photo player/​viewer 
-  +adb shell "pm uninstall ​---user com.sec.android.app.applinker" # AppLinker, talks about firmware update and FeliCa Networks
- index=$(awk -F [\|] '​{print $2}' <<<​ "​${line}"​) +adb shell "pm uninstall ​---user com.sec.android.app.billing" ​# Samsung Checkout 
- codec=$(awk -F [\|] '​{print $3}' <<<​ "​${line}"​) +adb shell "pm uninstall ​---user 0 com.sec.android.app.DataCreate" ​ 
- width=$(awk -F [\|] '​{print $4}' <<<​ "​${line}"​) +adb shell "pm uninstall ​---user com.sec.android.app.magnifier" ​# Magnifier, uses the phone's camera 
- height=$(awk -F [\|] '​{print $5}' <<<​ "​${line}"​) +adb shell "pm uninstall -k --user com.sec.android.app.parser" # DRParser Mode, maybe linked to IME (Input Method Engine?Secret Codes 
- fps1=$(awk -F [\|] '​{print $6}' <<<​ "​${line}"​ | awk -F [\/] '​{print $1}'​) +# adb shell "pm uninstall ​---user 0 com.sec.android.app.personalization" # Perso, related to read/write phone state according to the app's permissions 
- fps2=$(awk -F [\|] '​{print $6}' <<<​ "​${line}"​ | awk -F [\/] '​{print $2}'​) +adb shell "pm uninstall ​---user 0 com.sec.android.app.popupcalculator
-  +adb shell "pm uninstall ​---user 0 com.sec.android.app.quicktool" # Quick tools 
- # Vérifiction si fps1 et fps2 sont des valeurs numériques +adb shell "pm uninstall ​---user com.sec.android.app.ringtoneBR" # ringtonebackup 
-  +adb shell "pm uninstall ​---user 0 com.sec.android.app.safetyassurance" # Safety assistance, related to phone-based emergency services. Keep for safety 
- if [[ "​${fps1}"​ = +([0-9]) ]] && [[ "​${fps2}"​ = +([0-9]) ]]; then +adb shell "pm uninstall ​---user 0 com.sec.android.app.SecSetupWizard"  
- fps=$(echo "​${fps1} / ${fps2}"​ | bc -l | awk '​{printf "%.3f" ​,​$1}'​) +adb shell "pm uninstall ​---user com.sec.android.app.setupwizardlegalprovider" # SetupWizardLegalProvider
-  +
- elif [[ "​${fps1}"​ = +([0-9]) ]] && [[ "​${fps2}"​ != +([0-9]) ]]; then +
- fps=$(awk '​{printf "​%d"​ ,$1}' <<<​ "​${fps1}"​) +
-  +
- else +
- fps="​N/​A"​ +
- fi +
-  +
- Type d'​image (Front, back, other) +
- if [[ "${codec}"​ == "​mjpeg"​ ]] || [[ "​${codec}"​ == "​png"​ ]]; then +
-  +
- # Recherche numéro id depuis la map +
- id=$(awk ​-F [\:] '​{print $2}' <<<​ "​0:​${index}"​) +
- typeImage=$(ffprobe ​-i  "​${i}" ​-hide_banner -v quiet -select_streams ${id} -show_entries stream_tags=comment -of csv=s="​|"​ | awk -F [\|] '​{print $2}'​) +
- +
- +
- # Mise en forme piste vidéo (envoi vers fichier tmp et envoi dans tableau cdeYadStream) +
- if [[ "​${index}"​ != ""​ ]]; then +
- printf "​|${i}|0:​${index}|VIDEO|${typeImage}|${codec}|${width}|${height}\n"​ >> "​${dossierTmp}/​stream.txt" +
- cdeYadStream=(${cdeYadStream[@]} --field="​0:​${index} | VIDEO |${typeImage} ${codec} ${width}x${height}":​CHK "​TRUE"​) +
-  +
- fi +
-  +
- else +
-  +
- # Mise en forme piste vidéo (envoi vers fichier tmp et envoi dans tableau cdeYadStream) +
- if [[ "​${index}"​ != ""​ ]]; then +
- printf "​|${i}|0:​${index}|VIDEO|${codec}|${width}|${height}|${fps}\n"​ >> "​${dossierTmp}/​stream.txt" +
- cdeYadStream=(${cdeYadStream[@]} --field="​0:​${index} | VIDEO |${codec} ${width}x${height} ${fps} fps":​CHK "​TRUE"​) +
-  +
- fi +
- fi +
-  +
- +
-  +
-done <<<​ "​${streamVideo}"​ +
-+
-#=========================================================================================================== +
-function STREAMAUDIO() +
-+
-streamAudio=$(ffprobe -i  "​${i}"​ -hide_banner -v quiet -select_streams a -show_entries stream=index,codec_name,​sample_rate,​channel_layout,​bit_rate -show_entries stream_tags=language -of csv=s="​|"​) +
-  +
- while read line; do +
- +
- index=$(awk -F [\|] '​{print $2}' <<< ​"${line}"​) +
- codec=$(awk ​-F [\|] '​{print $3}' <<<​ "​${line}"​) +
- rate=$(awk ​-F [\|] '​{print $4}' <<<​ "​${line}"​) +
- channelOut=$(awk ​-F [\|] '​{print $5}' <<<​ "​${line}"​) +
- lang=$(awk -F [\|] '​{print $NF}' <<<​ "​${line}"​) +
- #​debitAudio=$(awk -F [\|] '​{print $6}' <<<​ "​${line}"​) +
- +
- LANGUE +
-  +
- # Affectation TRUE ou FALSE +
- if [[ "​${language}"​ == "​${langAudio}"​ ]] || [[ "​${language}"​ == "​Inconnu"​ ]] || [[ "​${langAudio}"​ == "​Toutes les langues"​ ]]; then +
- bol="​TRUE"​ +
-  +
- else +
- bol="​FALSE"​ +
- fi +
-  +
- # Mise en forme piste audio (envoi vers fichier tmp et envoi dans tableau cdeYadStream) +
- if [[ "​${index}"​ != ""​ ]]; then +
- printf "​|${i}|0:​${index}|AUDIO|${codec}|${language}|${languageISO}|${rate}|${channelOut}|\n"​ >> "​${dossierTmp}/​stream.txt+
- cdeYadStream=(${cdeYadStream[@]} --field="0:${index}| AUDIO | ${language} ${codec} ${rate} Hz ${channelOut}":​CHK "​${bol}"​) +
-  +
- fi +
-  +
- done <<<​ "​${streamAudio}"​  +
-+
-#​=========================================================================================================== +
-function STREAMSUBTITLE() +
-+
-streamSub=$(ffprobe ​-i  "​${i}" ​-hide_banner ​-v quiet -select_streams s -show_entries stream=index,​codec_name -show_entries stream_tags=language -of csv=s="​|"​) +
- +
-while read line; do +
- +
- index=$(awk -F [\|] '​{print $2}' <<<​ "​${line}"​) +
- codec=$(awk -F [\|] '​{print $3}' <<<​ "​${line}"​) +
- lang=$(awk -F [\|] '​{print $NF}' <<<​ "​${line}"​) +
- +
- LANGUE +
-  +
- # Affectation TRUE ou FALSE +
- if [[ "​${language}"​ == "​${langSub}"​ ]] || [[ "​${language}"​ == "​Inconnu"​ ]] || [[ "​${langSub}"​ == "​Toutes les langues"​ ]]; then +
- bol="​TRUE"​ +
-  +
- else +
- bol="​FALSE"​ +
- fi +
-  +
- # Mise en forme piste audio (envoi vers fichier tmp et envoi dans tableau cdeYadStream) +
-  +
- if [[ "​${index}"​ != ""​ ]]; then  +
- printf "​|${i}|0:​${index}|SUBTITLE|${codec}|${language}|${languageISO}|\n"​ >> "​${dossierTmp}/​stream.txt+
- cdeYadStream=(${cdeYadStream[@]} --field="0:${index} | SUBTITLE | ${language} ${codec}":​CHK "​${bol}"​) +
-  +
- fi +
-  +
-done <<<​ "​${streamSub}"​ +
-+
-#​=========================================================================================================== +
- +
-function PROFIL() +
-+
-if [[ "​${profile}"​ = "Audio FLAC" ]]; then +
- FLAC +
- conteneur="​flac"​ +
- +
-elif [[ "​${profile}"​ = "Audio vorbis"​ ]]; then +
- VORBIS +
- conteneur="​ogg"​ +
- +
-elif [[ "​${profile}"​ = "Audio aac" ]]; then +
- AAC +
- conteneur="​m4a"​ +
-  +
-elif [[ "​${profile}"​ = "Audio mp3" ]]; then +
- MP3 +
- conteneur="​mp3"​ +
-  +
-elif [[ "​${profile}"​ = "​Vidéo mkv x264 - vorbis"​ ]]; then +
- X264 +
- VORBIS +
- conteneur="​mkv"​ +
- +
-elif [[ "​${profile}"​ = "​Vidéo mkv - x264 - aac" ]]; then +
- X264 +
- AAC +
- conteneur="​mkv"​ +
-  +
-elif [[ "​${profile}"​ = "​Vidéo mkv - x264 - mp3" ]]; then +
- X264 +
- MP3 +
- conteneur="​mkv"​ +
-  +
-elif [[ "​${profile}"​ = "​Vidéo mkv - x265 - aac" ]]; then +
- X265 +
- AAC +
- conteneur="​mkv"​ +
-  +
-elif [[ "​${profile}"​ = "​Vidéo mkv - x265 - mp3" ]]; then +
- X265 +
- MP3 +
- conteneur="​mkv"​ +
-fi +
-+
-#​=========================================================================================================== +
-function QUALITY_VIDEO() +
-+
-# Commande selon la qualité +
-if [[ "​${quality}"​ == "​Excellente"​ ]]; then +
- cdeQualityVideo=(${qVideo1[@]}) +
-  +
-elif [[ "​${quality}"​ == "​Elevée"​ ]]; then +
- cdeQualityVideo=(${qVideo2[@]}) +
-  +
-elif [[ "​${quality}"​ == "​Moyenne"​ ]]; then +
- cdeQualityVideo=(${qVideo3[@]}) +
-  +
-elif [[ "​${quality}"​ == "​Minimum"​ ]]; then +
- cdeQualityVideo=(${qVideo4[@]}) +
-  +
-elif [[ "​${quality}"​ == "​Faible"​ ]]; then +
- cdeQualityVideo=(${qVideo5[@]}) +
-  +
-fi +
-+
-#​=========================================================================================================== +
-function QUALITY_AUDIO() +
-+
-# Recherche debit total maximum du fichier source +
-rateTotal=$(ffprobe -i  "​${i}"​ -hide_banner -v quiet -show_entries format=bit_rate -of csv=s="​|"​ | awk -F [\|] '​{printf "​%d"​ ,​($2/​1000)}'​) +
-  +
-# Commande selon la qualité +
-if [[ "​${cAudio}"​ = "​copy"​ ]] || [[ "​${cAudio}"​ == "​flac"​ ]]; then +
- cdeQualityAudio=() +
- +
-elif [[ "​${typeRate}"​ == "​CBR"​ ]]; then +
- +
- if [[ "​${quality}"​ == "​Excellente"​ ]] && [[ "​${rateTotal}"​ -ge "​320"​ ]]; then +
- cdeQualityAudio=(${qAudio1[@]}) +
- +
- elif [[ "​${quality}"​ == "​Elevée"​ ]] && [[ "​${rateTotal}"​ -ge "​256"​ ]]; then +
- cdeQualityAudio=(${qAudio2[@]}) +
-  +
- elif [[ "​${quality}"​ == "​Moyenne"​ ]] && [[ "​${rateTotal}"​ -ge "​192"​ ]]; then +
- cdeQualityAudio=(${qAudio3[@]}) +
-  +
- elif [[ "​${quality}"​ == "​Minimum"​ ]] && [[ "​${rateTotal}"​ -ge "​128"​ ]]; then +
- cdeQualityAudio=(${qAudio4[@]}) +
-  +
- elif [[ "​${quality}"​ == "​Faible"​ ]] && [[ "​${rateTotal}"​ -ge "​64"​ ]]; then +
- cdeQualityAudio=(${qAudio5[@]}) +
-  +
- else +
-  +
- if [[ "​${codecAudioIn}"​ == "​${codecAudioOut}"​ ]]; then +
- cAudio="​copy"​ +
- cdeQualityAudio=() +
- +
- else +
- cdeQualityAudio=(-b:​a "​${rateTotal}k") +
-  +
- fi +
- +
- fi +
-  +
-elif [[ "​${typeRate}"​ == "​VBR"​ ]]; then +
- +
- if [[ "​${quality}"​ == "​Excellente"​ ]]; then +
- cdeQualityAudio=(${qAudio1[@]}) +
- +
- elif [[ "​${quality}"​ == "​Elevée"​ ]]; then +
- cdeQualityAudio=(${qAudio2[@]}) +
-  +
- elif [[ "​${quality}"​ == "​Moyenne"​ ]]; then +
- cdeQualityAudio=(${qAudio3[@]}) +
-  +
- elif [[ "​${quality}"​ == "​Minimum"​ ]]; then +
- cdeQualityAudio=(${qAudio4[@]}) +
-  +
- elif [[ "​${quality}"​ == "​Faible"​ ]]; then +
- cdeQualityAudio=(${qAudio5[@]}) +
-  +
- fi +
-fi +
-+
-#​=========================================================================================================== +
-function X265() +
-+
-if [[ "​${codecVideoIn}"​ = "​h265"​ ]] && [[ "​${nocopy}"​ = "​TRUE"​ ]]; then +
- cVideo="​copy"​ +
-else +
- cVideo="​libx265"​ +
-  +
- qVideo1=(-crf 18 -preset slow) +
- qVideo2=(-crf 24 -preset slow) +
- qVideo3=(-crf 30 -preset medium) +
- qVideo4=(-crf 36 -preset veryfast) +
- qVideo5=(-crf 42 -preset ultrafast)  +
-fi +
- +
- +
-+
-#​=========================================================================================================== +
-function X264() +
-+
-if [[ "​${codecVideoIn}"​ = "​h264"​ ]] && [[ "​${nocopy}"​ = "​TRUE"​ ]]; then +
- cVideo="​copy"​ +
-else +
- cVideo="​libx264"​ +
- +
- qVideo1=(-crf 18 -preset slow) +
- qVideo2=(-crf 24 -preset slow) +
- qVideo3=(-crf 30 -preset medium) +
- qVideo4=(-crf 36 -preset veryfast) +
- qVideo5=(-crf 42 -preset ultrafast) +
- +
-fi  +
-+
-#​=========================================================================================================== +
-function FLAC() +
-+
-if [[ "​${codecAudioIn}"​ = "​flac"​ ]] && [[ "​${nocopy}"​ = "​TRUE"​ ]]; then +
- cAudio="​copy"​ +
-  +
-else +
- cAudio="​flac"​ +
-fi +
-+
-#​=========================================================================================================== +
-function VORBIS() +
-+
-if [[ "​${codecAudioIn}"​ = "​vorbis"​ ]] && [[ "​${nocopy}"​ = "​TRUE"​ ]]; then +
- cAudio="​copy"​ +
-  +
-else +
- codecAudioOut="​vorbis"​ +
- cAudio="​libvorbis"​ +
-  +
- if [[ "​${typeRate}"​ == "​VBR"​ ]]; then +
- qAudio1=(-qscale:​a 10) +
- qAudio2=(-qscale:​a 8) +
- qAudio3=(-qscale:​a 5) +
- qAudio4=(-qscale:​a 4) +
- qAudio5=(-qscale:​a ​0+
- +
- elif [[ "${typeRate}"​ == "​CBR"​ ]]; then +
- qAudio1=(-b:​a 320k) +
- qAudio2=(-b:​a 256k) +
- qAudio3=(-b:​a 192k) +
- qAudio4=(-b:​a 128k) +
- qAudio5=(-b:​a 64k) +
- fi +
- +
-fi  +
-+
-#​=========================================================================================================== +
-function AAC() +
-+
-if [[ "${codecAudioIn}"​ = "​aac"​ ]] && [[ "​${nocopy}"​ = "​TRUE"​ ]]; then +
- cAudio="​copy"​ +
-  +
-else +
- codecAudioOut="​aac"​ +
- cAudio="​aac"​ +
- +
- if [[ "​${typeRate}"​ == "​VBR"​ ]]; then +
- qAudio1=(-q:a 0) +
- qAudio2=(-q:a 2) +
- qAudio3=(-q:a 5) +
- qAudio4=(-q:​a 7) +
- qAudio5=(-q:​a 9) +
- +
- elif [[ "​${typeRate}"​ == "​CBR"​ ]]; then +
- qAudio1=(-b:​a 320k) +
- qAudio2=(-b:​a 256k) +
- qAudio3=(-b:​a 192k) +
- qAudio4=(-b:​a 128k) +
- qAudio5=(-b:​a 64k) +
- fi +
- +
-fi +
-+
-#​=========================================================================================================== +
-function MP3() +
-+
-if [[ "​${codecAudioIn}"​ = "​mp3"​ ]] && [[ "​${nocopy}"​ = "​TRUE"​ ]]; then +
- cAudio="​copy"​ +
-  +
-else +
- codecAudioOut="​mp3"​ +
- cAudio="​libmp3lame"​ +
- +
- if [[ "​${typeRate}"​ == "​VBR"​ ]]; then +
- qAudio1=(-q:​a ​0+
- qAudio2=(-q:​a 2) +
- qAudio3=(-q:​a 5) +
- qAudio4=(-q:​a 7) +
- qAudio5=(-q:​a 9) +
-  +
- elif [[ "​${typeRate}"​ == "​CBR"​ ]]; then +
- qAudio1=(-b:​a 320k) +
- qAudio2=(-b:​a 256k) +
- qAudio3=(-b:​a 192k) +
- qAudio4=(-b:​a 128k) +
- qAudio5=(-b:​a 64k) +
- fi +
-fi +
-+
-#​=========================================================================================================== +
-function FFMPEG() +
-+
-IFS=$'​\n'​ +
- +
-for iFileIn in ${fileIn}; do +
-  +
- # Initialisation commandes +
- cdeVideo=() +
- cdeAudio=() +
- cdeSub=() +
-  +
- # Nom fichier source +
- fileNameExtension=$(basename "​${iFileIn}"​) +
- fileName="​${fileNameExtension%.*}" +
- extension="​${fileNameExtension##​*.}" +
-  +
- Recherche map +
- mapVideo=$(awk -F [\|] '{if ($4 ~ /VIDEO/ && /'​${fileName}'/​) {printf ​"%s\n" ,$3}}' <<<​ "​${stream}") +
- mapAudio=$(awk -F [\|] '{if ($4 ~ /AUDIO/ && /'​${fileName}'/​) {printf "​%s\n" ​,$3}}' <<<​ "​${stream}"​) +
- mapSub=$(awk -F [\|] '{if ($4 ~ /SUBTITLE/ && /'​${fileName}'/​) {printf "​%s\n" ​,$3}}' <<<​ "​${stream}"​) +
-  +
- echo "​=============================================="​ +
- echo " ​ iFileIn${iFileIn}"​ +
- echo " fileName${fileName}"​ +
- echo " mapVideo: ${mapVideo}"​ +
- echo " mapAudio: ${mapAudio}"​ +
- echo " ​  ​mapSub:​ ${mapSub}"​ +
-  +
- # Metadonnée +
- if [[ "​${metadata}"​ == "​TRUE"​ ]]; then +
- cdeMetadata=(-map_metadata -1) +
- else +
- cdeMetadata=() +
- fi +
-  +
- FFMPEG_VIDEO +
- FFMPEG_AUDIO +
- FFMPEG_OUT +
-  +
-  +
-  +
- # Conversion fichier +
- ffmpeg -y -i "​${iFileIn}"​ -loglevel debug "​${cdeMetadata[@]}"​ "​${cdeVideo[@]}"​ "​${cdeAudio[@]}"​ "​${dirOut}/${fileName}.${conteneur}"​ +
-  +
- ffmpeg -i "​${dirOut}/${fileName}.${conteneur}"​ ## TEST ## +
- echo "​ffmpeg -y -i "​${iFileIn}"​ "​${cdeMetadata[@]}"​ "​${cdeVideo[@]}"​ "​${cdeAudio[@]}"​ "​${dirOut}/​${fileName}.${conteneur}""​ ## TEST ## +
-  +
- # Image cover fichier audio +
- for iMapVideo in ${mapVideo};​ do +
-  +
- numImage="​1"​ +
- +
- # Recherche codec vidéo (image) +
- codecVideoIn=$(awk -F [\|] '{if ($4 ~ /VIDEO&& /'​${iMapVideo}'/​ && /'​${fileName}'/​) {printf "​%s"​ ,$5}}' <<<​ "​${stream}"​) +
- +
- if [[ "${codecVideoIn}"​ == "​mjpeg"​ ]] || [[ "​${codecVideoIn}"​ == "​png"​ ]]; then +
-  +
- COVER +
- fi +
-  +
- done +
-  +
-done +
-+
- +
-#​=========================================================================================================== +
-function FFMPEG_VIDEO() +
-+
-numFile=""​ +
- +
-for iMapVideo in ${mapVideo};​ do +
- +
- codecVideoIn=$(awk ​-F [\|] '{if ($4 ~ /VIDEO/ && /'​${iMapVideo}'/​ && /'​${fileName}'/​) {printf "​%s"​ ,$5}}' <<<​ "​${stream}"​) +
-  +
- PROFIL +
- QUALITY_VIDEO +
-  +
- if [[ "​${profile}"​ = "Audio FLAC" ]] || [[ "​${profile}"​ = "Audio vorbis"​ ]] || [[ "​${profile}"​ = "Audio aac" ]] || [[ "​${profile}"​ = "Audio mp3" ]]; then +
- cdeVideo=(-vn) +
- +
- else +
- cdeVideo=(${cdeVideo[@]} ​-map ${iMapVideo} -c:v ${cVideo} ${cdeQualityVideo[@]}) +
- +
- fi +
-  +
- echo "​cdeVideo:​ ${cdeVideo[@]}"​ +
- +
-done +
-+
-#​=========================================================================================================== +
-function FFMPEG_AUDIO() +
-+
-numAudio="​0+
- +
-for iMapAudio in ${mapAudio};​ do +
- +
- codecAudioIn=$(awk -F [\|] '{if ($4 ~ /AUDIO/ && /'​${iMapAudio}'/​ && /'​${fileName}'/​) {printf "​%s"​ ,$5}}' <<<​ "​${stream}"​) +
- languageISO=$(awk -F [\|] '{if ($4 ~ /AUDIO/ && $3 ~ /'​${iMapAudio}'/​ && /'​${fileName}'/​) {printf "​%s"​ ,$7}}' <<<​ "​${stream}"​) +
-  +
- PROFIL +
- QUALITY_AUDIO +
-  +
- cdeAudio=(${cdeAudio[@]} -map ${iMapAudio} -metadata:​s:​a:​${numAudio} language="​${languageISO}"​ -c:a ${cAudio} ${cdeQualityAudio[@]} ${channel[@]} -cutoff 20000) +
- ((numAudio+=1)) +
- +
-done +
-+
-#​=========================================================================================================== +
-function FFMPEG_OUT() +
-+
- +
- +
-# Si fichier exsite déjà ajoute "​copie"​ et numéro de la copie +
-nbrCopie="​1"​ +
-  +
-while [[ -f "​${dirOut}/​${fileName}.${conteneur}"​ ]]; do +
- fileName=$(awk '​{gsub(/​ - copie.*/, ""); printf "%s - copie '​$nbrCopie'"​ ,$0}' <<<​ "​${fileName}"​) +
- ((nbrCopie+=1)) +
-done +
-+
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
- +
-#=========================================================================================================== +
-function COVER() +
-+
-# Si codecVideoIn = mjpeg --> jpeg +
-[[ "​${codecVideoIn}"​ == "​mjpeg"​ ]] && codecVideoIn="​jpeg"​ +
- +
-# Recherche numéro id depuis la map +
-id=$(awk -F [\:] '​{print $2}' <<<​ "​${iMapVideo}"​) +
- +
-# Type d'​image (Frontback, other) +
-typeImage=$(ffprobe -i  "​${i}"​ -hide_banner -v quiet -select_streams ${id} -show_entries stream_tags=comment -of csv=s="​|"​ | awk -F [\|] '​{print $2}') +
- +
-# Nom image cover +
-nameImage=$(ffprobe -i  "${i}" -hide_banner ​-v quiet -select_streams ${id} -show_entries stream_tags=title -of csv=s="|" | awk -F [\|] '​{print $2}') +
- +
-if [[ "${nameImage}"​ == ""​ ]]; then  +
- #​nameImage="​cover_${typeImage}"​ +
-  +
-  +
- if [[ "​${typeImage}"​ == "Cover (front)"​ ]]; then +
- nameImage="​Cover front"​ +
- +
- elif [[ "​${typeImage}"​ == "Cover (back)"​ ]]; then +
- nameImage="​Cover back"​ +
- +
- else [[ "​${typeImage}"​ == "​Other"​ ]] +
- nameImage="​Other"​ +
-  +
- fi +
- +
-elif [[ "​${nameImage}"​ == "​${nameImageSave}"​ ]]; then +
- nameImage="​${nameImage}_${numImage}"​ +
-  +
-fi +
- +
-# Sauvegarde du nom de l'​image +
-nameImageSave="​${numImage}"​ +
-((numImage+=1)) +
- +
-# Extraction image du fichier source +
-ffmpeg ​--i "​${iFileIn}" ​-map ${iMapVideo} -an "​${dossierTmp}/​${nameImage}.${codecVideoIn}"​ +
- +
-# Image cover pour fichier audio flac +
-if [[ "​${profile}"​ = "Audio FLAC" ]]; then +
- COVER_FLAC +
- +
-# Image cover pour fichier audio vorbis +
-elif [[ "​${profile}"​ = "Audio vorbis"​ ]]; then +
- COVER_OGG +
- +
-# Image cover pour fichier audio mp3 +
-elif [[ "​${profile}"​ = "Audio mp3" ]]; then +
- COVER_MP3 +
- +
-# Image cover pour fichier audio aac +
-elif [[ "​${profile}"​ = "Audio aac" ]]; then +
- COVER_OTHER +
-fi +
- +
- +
-echo "=== COVER ===" +
-echo "id: ${id}"​ +
-echo "​typeImage:​ ${typeImage}"​ +
-echo "​nameImage:​ ${nameImage}"​ +
-+
-#​=========================================================================================================== +
-function COVER_FLAC() +
-+
- +
-if [[ "​${typeImage}"​ == "Cover (front)"​ ]]; then +
- typeImage="​3"​ +
- +
-elif [[ "​${typeImage}"​ == "Cover (back)"​ ]]; then +
- typeImage="​4"​ +
- +
- +
-else [[ "​${typeImage}"​ == "​Other"​ ]] +
- typeImage="​0+
- +
- +
- +
-fi +
- +
-# Ajout de l'​image au fichier audio +
-metaflac --import-picture-from="​${typeImage}||${nameImage}||${dossierTmp}/​${nameImage}.${codecVideoIn}"​ "​${dirOut}/​${fileName}.${conteneur}" +
- +
-+
-#=========================================================================================================== +
-function COVER_OGG() +
-+
- +
-# Type d'​image (Frontback, other) +
-typeImage=$(ffprobe -i  "${i}" -hide_banner ​-v quiet -select_streams ${id} -show_entries stream_tags=comment -of csv=s="​|"​ | awk -F [\|] '​{print $2}'​) +
- +
-if [[ "​${typeImage}"​ == "Cover (front)"​ ]]; then +
- typeImage="​3"​ +
- +
-elif [[ "​${typeImage}"​ == "Cover (back)"​ ]]; then +
- typeImage="​4"​ +
- +
-elif [[ "​${typeImage}"​ == "​Artist/​performer"​ ]]; then +
- typeImage="​8"​ +
-  +
-elif [[ "​${typeImage}"​ == "​Other"​ ]]; then +
- typeImage="​0"  +
-  +
-else +
- typeImage="​3"​ +
- +
-fi +
- +
-# Sauvegarde données exsistantes du fichier source +
-vorbiscomment --list --raw "​${dirOut}/​out.${conteneur}"​ > "​${dossierTmp}/​fileSaveOgg.txt" +
- +
-#​Suppression image exsistante +
-#sed -i -e '/​^metadata_block_picture/​d'​ "​${dossierTmp}/​fileSaveOgg.txt" +
- +
-Metadata_block_picture format +
-#Lien: https://​xiph.org/​flac/​format.html#​metadata_block_picture +
-imageMimeType=$(file ​---mime-type "​${dossierTmp}/​${nameImage}.${codecVideoIn}"​) +
- +
-printf "0: %.8x" "​${typeImage}"​ | xxd -r -g0 >> "​${dossierTmp}/​dataImage.txt" +
-printf "0: %.8x" $(echo -n "​${imageMimeType}"​ | wc -c) | xxd -r -g0 >> "​${dossierTmp}/​dataImage.txt+
-echo -n "${imageMimeType}"​ >> "​${dossierTmp}/​dataImage.txt"​ +
-printf "0: %.8x" $(echo ​-n "​${nameImage}"​ | wc -c) | xxd -r -g0 >> "​${dossierTmp}/​dataImage.txt" +
-echo -n "​${nameImage}"​ >> "​${dossierTmp}/​dataImage.txt" +
-printf "0: %.8x" 0 | xxd -r -g0  >> "​${dossierTmp}/​dataImage.txt+
-printf ​"0: %.8x" 0 | xxd --g0 >> "​${dossierTmp}/​dataImage.txt"​ +
-printf "0: %.8x" 0 | xxd -r -g0 >> "​${dossierTmp}/​dataImage.txt"​ +
-printf "0: %.8x" 0 | xxd -r -g0 >> "​${dossierTmp}/​dataImage.txt" +
-printf "0: %.8x" $(wc -c "​${dossierTmp}/​cover.${codecVideoIn}" ​| cut --delimiter=' ​' --fields=1) | xxd -r -g0 >> "​${dossierTmp}/​dataImage.txt"​ +
- +
-#Image file +
-cat "${dossierTmp}/​cover.${codecVideoIn}"​ >> "​${dossierTmp}/​dataImage.txt"​ +
- +
-echo "​metadata_block_picture=$(base64 ​--wrap=< "​${dossierTmp}/​dataImage.txt"​)"​ >> "​${dossierTmp}/​fileSaveOgg.txt" +
- +
-#Update vorbis file comments +
-vorbiscomment --write --raw --commentfile "​${dossierTmp}/​fileSaveOgg.txt" "​${dirOut}/​${fileName}.${conteneur}" +
- +
-#Delete temp files +
-rm "​${dossierTmp}/​dataImage.txt"​ +
-rm "​${dossierTmp}/​fileSaveOgg.txt"​ +
-+
-#​=========================================================================================================== +
-function COVER_MP3() +
-+
-if [[ "${typeImage}"​ == "Cover (front)"​ ]]; then +
- typeImage="​FRONT_COVER"​ +
- +
-elif [[ "​${typeImage}"​ == "Cover (back)"​ ]]; then +
- typeImage="​BACK_COVER"​ +
- +
-elif [[ "​${typeImage}"​ == "​Artist/​performer"​ ]]; then +
- typeImage="​ARTIST"​ +
-  +
-elif [[ "​${typeImage}"​ == "​Other"​ ]]; then +
- typeImage="​OTHER"​ +
- +
-else +
- typeImage="​FRONT_COVER"​ +
- +
-fi +
- +
-# Ajout de l'​image au fichier audio +
-eyeD3 --add-image="​${dossierTmp}/​${nameImage}.${codecVideoIn}":"​${typeImage}":"​${nameImage}"​ "​${dirOut}/​${fileName}.${conteneur}"​ +
-+
-#​=========================================================================================================== +
-function COVER_OTHER() +
-+
-if [[ "​${typeImage}"​ == "Cover \(back\)"​ ]]; then +
- +
- # renommage image cover en "​cover"​ +
- mv "​${dossierTmp}/​${nameImage}.${codecVideoIn}"​ "​${dossierTmp}/​cover.${codecVideoIn}" +
- +
- Ajout de l'image au fichier audio +
- kid3-cli -c "set picture:"​${dossierTmp}/​cover.${codecVideoIn}"​ ''"​ "​${dirOut}/​${fileName}.${conteneur}"​ +
- +
-fi +
-+
- +
-#​=========================================================================================================== +
-function MAIN() +
-+
-# Chargement fichier de configurations +
-"​${fileConfig}+
- +
-YADMAIN +
- +
-# Si aucune source sélectionnée +
-if [[ "​${status}" -eq "​0"​ ]] && [[ "​${fileIn}"​ == ""​ ]]; then +
- status="​4"​ +
-fi +
- +
-# YADMAIN Bouton "​Quitter"​ ou "Croix fenêtre"​ +
-if [[ "​${status}" ​-eq "​1"​ ]] || [[ "​${status}" ​-eq "252" ]]; then +
- rm -rf "​${dossierTmp}"​ +
- exit +
-  +
-YADMAIN Bouton "​Configuration par défaut"​ +
-elif [[ "​${status}"​ -eq "​3"​ ]]; then +
- SAVE +
- CONFIGDEFAUT +
- MAIN +
- +
-YADMAIN Bouton "​Préférences"​ +
-elif [[ "​${status}" -eq "​2"​ ]]; then +
- SAVE +
- YADPREFERENCE +
-  +
- # YADPREFERENCE Bouton "​Quitter"​ ou "Croix fenêtre"​ +
- if [[ "​${status}" ​-eq "​1"​ ]] || [[ "​${status}" ​-eq "​252"​ ]]; then +
- rm -rf "​${dossierTmp}"​ +
- exit +
-  +
- # YADPREFERENCE Bouton "​Annuler"​ +
- elif [[ "​${status}"​ -eq "​2"​ ]]; then +
- MAIN +
-  +
- # YADPREFERENCE Bouton "​Valider"​ +
- elif [[ "​${status}"​ -eq "0" ​]]; then +
- SAVE +
- #STREAM +
- MAIN +
-  +
- fi +
- +
-YADMAIN Bouton "​Source"​ ou aucune source sélectionnée +
-elif [[ "​${status}" -eq "​4"​ ]]; then +
- SAVE +
- YADSOURCE +
-  +
- # YADSOURCE Bouton "​Quitter"​ ou "Croix fenêtre"​ +
- if [[ "​${status}" ​-eq "​1"​ ]] || [[ "​${status}" ​-eq "252" ]]; then +
- rm -rf "​${dossierTmp}"​ +
- exit +
-  +
- YADSOURCE Bouton "​Annuler"​ +
- elif [[ "​${status}" ​-eq "​2"​ ]]; then +
- MAIN +
-  +
- # YADSOURCE choix "​Fichier"​ +
- elif [[ "​${source}"​ == "​Fichier"​ ]]; then +
- YADFILE +
-  +
- # YADFILE Bouton "​Quitter"​ ou "Croix fenêtre"​ +
- if [[ "​${status}" -eq "​1"​ ]] || [[ "​${status}" ​-eq "​252"​ ]]; then +
- rm -rf "​${dossierTmp}+
- exit +
-  +
- # YADFILE Bouton "​Annuler"​ +
- elif [[ "​${status}" -eq "​2"​ ]]; then +
- MAIN +
-  +
- # YADFILE Bouton "​Valider"​ +
- elif [[ "​${status}" ​-eq "​0"​ ]]; then +
- STREAM +
- MAIN +
- fi +
- +
- # YADSOURCE choix "​DVD"​ +
- elif [[ "​${source}"​ == "​DVD"​ ]]; then +
- echo "​Source DVD à finir"​ +
-  +
- # YADSOURCE choix "​CD"​ +
- elif [[ "​${source}"​ == "​CD"​ ]]; then +
- echo "​Source CD à finir"​ +
-  +
- # YADSOURCE choix "​DDL"​ +
- elif [[ "​${source}"​ == "​DDL"​ ]]; then +
- echo "​Source DDL à finir"​ +
- +
- fi +
- +
-# YADMAIN Bouton "​Lancer conversion"​ +
-elif [[ "​${status}" ​-eq "0" ]]; then +
- SAVE +
-  +
- # Récupération de la valeur TRUE et FALSE depuis YADMAIN et fusion avec les données du fichier stream.txt +
- IFS=$"​|"​ +
- numLine="​4"​ +
- stream=$( +
- while read line; do +
- bol=$(awk 'NR == '​${numLine}'​ {printf "​%s"​ ,$1}' <<<​ "​$(printf "​%s\n"​ ${yadMain} | awk NF)"​) +
- printf "​${bol}${line}\n"​ +
- ((numLine+=1)) +
- done <<<​ $(cat "​${dossierTmp}/​stream.txt") | awk -F [\|] '{if ($1 ~ /TRUE/) {print $0}}'​) +
-  +
- SAVE +
- FFMPEG +
- MAIN +
-  +
-fi +
-+
-#=========================================================================================================== +
-CONFIGURATION +
-MAIN+
  
 +adb shell "pm uninstall -k --user 0 com.sec.android.app.suwscriptplayer"​ # SuwScriptPlayer
 +adb shell "pm uninstall -k --user 0 com.sec.android.app.sysscope"​
 +adb shell "pm uninstall -k --user 0 com.sec.android.app.voicenote"​
 +adb shell "pm uninstall -k --user 0 com.sec.android.AutoPreconfig"​
 +# adb shell "pm uninstall -k --user 0 com.sec.android.easyonehand"​ # Probably the shrinked display for a 1-hand use feature
 +adb shell "pm uninstall -k --user 0 com.sec.android.mimage.gear360editor"​ # 360° Photo Editor, the photo editor for the Samsung Gear 360 device
 +adb shell "pm uninstall -k --user 0 com.sec.android.preloadinstaller"​ # Application Installer, the Internet says it's responsible of (re-)installing junk on your mobile
 +adb shell "pm uninstall -k --user 0 com.sec.android.provider.badge"​ # BadgeProvider
 +# adb shell "pm uninstall -k --user 0 com.sec.android.soagent"​ # Software update, works along com.wssyncmldm?​
 +# adb shell "pm uninstall -k --user 0 com.sec.android.splitsound"​ # SplitSoundService,​ probably the capability to play different music on the local device and on a bluetooth speaker ​
 +adb shell "pm uninstall -k --user 0 com.sec.android.uibcvirtualsoftkey"​ # UIBCVirtualSoftkey,​ probably the service to get a software button for accessibility
 +adb shell "pm uninstall -k --user 0 com.sec.app.RilErrorNotifier"​ # RilNotifier
 +adb shell "pm uninstall -k --user 0 com.sec.automation"​ # TetheringAutomation,​ linked to an "​always on tethering"​ option
 +adb shell "pm uninstall -k --user 0 com.sec.downloadablekeystore"​
 +adb shell "pm uninstall -k --user 0 com.sec.enterprise.mdm.services.simpin"​ # Entreprise Sim Pin Service
 +adb shell "pm uninstall -k --user 0 com.sec.enterprise.mdm.vpn"​
 +adb shell "pm uninstall -k --user 0 com.sec.mldapchecker"​ # MLDAPlog
 +adb shell "pm uninstall -k --user 0 com.sec.smartcard.manager"​
 +adb shell "pm uninstall -k --user 0 com.sec.spp.push"​ # Samsung Push Service
 +adb shell "pm uninstall -k --user 0 com.sec.sve"​ # SecVideoEngineService
 +adb shell "pm uninstall -k --user 0 com.sem.factoryapp"​ # SEMFactoryApp
 +adb shell "pm uninstall -k --user 0 com.setk.widget"​
 +adb shell "pm uninstall -k --user 0 com.skms.android.agent"​ # SKMSAgentService,​ Samsung KMS (Key Managment Service?) talks with the eSE device (embedded SEcurity): https://​android-apk.org/​com.skms.android.agent/​
 +# adb shell "pm uninstall -k --user 0 com.wsomacp"​ # Configuration message, linked to OMA (Open Mobile Alliance) CP (Client Provisioning) messages: carrier related, but can cause problems: https://​gbhackers.com/​single-sms-wap-crap-can-break-samsung-galaxy/​
 +adb shell "pm uninstall -k --user 0 com.wssnps"​
 +adb shell "pm uninstall -k --user 0 org.simalliance.openmobileapi.service"​
 </​code>​ </​code>​
- 
- 
- 
utilisateurs/slyfox/scripts/accueil.1534260193.txt.gz · Dernière modification: 14/08/2018 17:23 par Slyfox

Pied de page des forums

Propulsé par FluxBB