1 votes

Comment trouver les applications qui n'ont pas été installées à partir d'Android Market ?

El Sky Go L'application ne fonctionne pas pour moi car elle pense que mon Samsung Galaxy Nexus est enraciné alors que je ne l'ai jamais enraciné.

Selon l'agent du service clientèle de Sky avec qui j'ai discuté, cela peut être dû à des applications sur le téléphone qui n'ont pas été installées à partir de l'Android Market/Google Play.

Je sais que j'ai installé manuellement un apk ou deux dans le passé [1], mais je ne suis pas sûr que les applications encore sur le téléphone (s'il y en a) ont été installées manuellement.

Alors, comment puis-je savoir quelles applications sur le téléphone ont été installées manuellement et lesquelles ont été installées à partir de l'Android Market/Google Play ?

[1] Curieusement, la seule application que je me rappelle avoir installée manuellement était l'application Sky Go, lorsqu'elle n'était pas disponible au téléchargement pour les téléphones Galaxy Nexus. Elle ne fonctionnait cependant pas, et je l'ai supprimée.

2 votes

Vous devriez demander au support de Sky comment l'installation d'une application à partir d'une "source inconnue" (par exemple pas Play Store) signifie que votre téléphone est rooté - ce n'est pas un indicateur de Root. Ces applications n'ont pas non plus l'autorisation de Root.

0 votes

@A--C Oui, je sais, mais la personne avec qui j'étais en IMing ne semblait pas prête à répondre à ce genre de questions. Je suppose que Sky a simplement une politique extrêmement conservatrice à ce sujet parce qu'ils ne peuvent pas être sûrs que les applications installées à partir d'autres sources ne font pas des choses contre lesquelles leurs licences les obligent à se protéger. Quel que soit le sens de cette politique. C'est comme ça que ça se passe maintenant, et c'est ce que je dois faire.

2voto

Firelord Points 23064

L'ensemble de la réponse repose sur le fait que lorsque cette requête est faite (elle requiert adb ) :

adb shell pm list packages -3 -i

l'installateur d'une application est listé dans la sortie à côté du nom du paquet de l'application. Nous pouvons filtrer les noms d'installateurs dans cette sortie afin d'isoler les applications non installées depuis le Play Store.

Remarque : si vous avez un système d'exploitation Android enraciné, vous pouvez vérifier les points suivants /data/system/package.xml puisque ladite commande expose les informations trouvées dans ce fichier, mais de manière plus lisible.

Automatisation

J'ai trouvé Tasker ( guide de l'utilisateur ) aptes ainsi que flexibles pour le travail. Créez une tâche nommée NonMarket et créez les actions suivantes dans celle-ci :

  1. Tâche → Exécuter le shell

    • Commandement :

      pm list packages -3 -i | grep **\-ve** "com.android.vending **\-ve** "com.google.android.feedback"
    • Store Output In : %AllPkgs

    Cela permettra de stocker le nom du paquet de toutes les applications tierces actuellement installées, mais ne provenant pas du Play Store, dans la variable AllPkgs. Remplacer -ve con -e dans ladite commande si vous avez l'intention de lister les applications actuellement installées et qui ont été installées depuis le Play Store.

    Toute ligne dans cette variable suivrait ce modèle :

    package:PACKAGE_NAME  installer=INSTALLER_NAME

    Ici,

    • PACKAGE_NAME → nom du paquet de l'application ;
    • INSTALLER_NAME → nom du paquet de l'application d'installation, tel que com.Android.vending o com.google.Android.feedback pour Play Store, org.fdroid.fdroid pour F-Droid, null si elle est installée manuellement par adb ou à partir d'un gestionnaire de fichiers ordinaire, etc.
  2. Variables → Recherche de remplacement de variables

    • Variable : %AllPkgs
    • Recherche : package:
    • tick Multi-Line
    • tique Remplacer les correspondances
    • Remplacer par : ne rien changer puisque nous avons l'intention de supprimer la correspondance des lignes.
  3. Variables → Recherche de remplacement de variables

    • Variable : %AllPkgs
    • Recherche : .*

      Notez qu'il y a un espace avant .* et il faut l'inclure.

    • tick Multi-Line
    • tique Remplacer les correspondances
    • Remplacer par : ne rien changer puisque nous avons l'intention de supprimer la correspondance des lignes.

    Après l'exécution de cette étape, chaque ligne de la variable AllPkgs ne contiendra que le nom du paquetage d'une application.

  4. Variables → Ensemble de variables

    • Nom : %ret
    • Pour : appuyer une fois sur la touche Entrée de votre clavier

    J'ai appris cette étape dans le post aquí par plepleus. Cette étape est nécessaire car nous avons l'intention de copier chaque ligne (a un nom de paquet d'une application) de AllPkgs dans une variable séparée. C'est pour faciliter l'utilisation.

  5. Variables → Fractionnement des variables

    • Nom : %AllPkgs
    • Séparateur : %ret

    Cette étape crée un tableau de AllPkgs et chaque ligne de l'ancien AllPkgs est assignée à un index de ce tableau. Ainsi, la taille du tableau est le nombre de lignes d'AllPkgs.

  6. Variables → Ensemble de variables

    • Nom : %count
    • A : 1

    Nous créons une variable nommée count et l'initialisons à 1, dans le but de boucler sur tous les éléments de AllPkgs.

  7. App → Test App

    • Type : Nom du paquet
    • Données : %All(%count)
    • Stocker le résultat dans : %Label(%count)

    Cette étape trouve l'étiquette d'une application à partir du nom de son paquet et l'assigne à un élément du tableau Label. Voir Matrices variables dans l'ouvrage de Tasker Guide de l'utilisateur sur les variables si vous avez des doutes sur cette étape.

  8. Variables → Ensemble de variables

    • Nom : %AllLabels
    • A : %Label(%count) - %AllPkgs(%count)%ret
    • tick Append

    La dernière étape, à chacune de ses exécutions dans n'importe quel cycle de la boucle, écraserait la valeur assignée à la variable mentionnée dans Stocker le résultat dans . Cette étape permet d'affecter cette valeur à une nouvelle variable appelée AllLabels et Append permet de s'assurer que le nouveau cycle ne fait qu'ajouter les modifications précédentes, sans les écraser.

    À la fin de la boucle, AllLabels aura des lignes où chacune d'entre elles aura l'étiquette d'une application particulière et le nom du paquet.

  9. Variables → Ajout de variables

    • Nom : %count
    • Valeur : 1

    Cette étape incrémente la variable Count, de sorte que nous pouvons passer au cycle suivant de la boucle.

  10. Tâche → Goto

    • Type : Numéro d'action
    • Numéro : 7
    • Si : %count < %AllPkgs(#)+1

    Cette étape met finalement en œuvre la boucle. Lorsque cette action est exécutée, elle vérifie si count est inférieur au nombre maximum d'éléments dans le tableau AllPkgs. Si oui, elle reste dans la boucle et crée un nouveau cycle, sinon, la boucle se termine et nous continuons avec le reste des actions en dessous.

  11. Fichier → Écrire un fichier

    • Dossier : /sdcard/unknown_sources.txt
    • Texte : %AllLabels

    Cette étape écrit toutes les lignes stockées dans la variable AllLabels dans un fichier nommé sources_inconnues.txt sous /sdcard . Si vous êtes faire du remplacement dans la première action, assurez-vous de changer le nom du fichier dans cette action pour que les résultats soient stockés séparément.

  12. Variables → Effacement de la variable → Nom : %Label

    Vous obtiendrez des résultats bizarres si vous n'effacez pas un tableau créé manuellement par l'utilisateur et que vous l'utilisez dans une tâche.

  13. Alerte → Flash → Texte : Task completed .

Exécuter la tâche en utilisant le bouton de lecture. Une fois la tâche terminée, vérifiez le fichier pour trouver le contenu que vous recherchez.


Ligne de commande

Je ne pouvais pas ignorer la ligne de commande qui rend l'objectif si facile à atteindre dans ce cas particulier.

Dépendances

  • Nécessite busybox outil. Si vous ne l'avez pas installé, reportez-vous à : Comment installer les outils de ligne de commande manquants sur un appareil Android ?
  • Nécessite aapt outil. Si vous utilisez une ROM CM ou une ROM dérivée, ignorez cette exigence. Sinon, pour Android 4.x, vous pouvez envisager de télécharger le binaire à partir de aquí . Pour l'installer sur votre appareil, suivez l'approche Root ou non-Root mentionnée. aquí de manière appropriée.

    Utilisateurs d'Android 5.x : demandez de l'aide à Google.

Mon petit script

#!/system/bin/sh
# Check if the busybox binary exists under /data/local/tmp/ or /system/xbin. 
# Set the detected binary's path into the variable busybox or exit if file 
# doesn't exist or executable permission is not set
if \[\[ -x /data/local/tmp/busybox \]\]; then 
    busybox=/data/local/tmp/busybox;
elif \[\[ -x /system/xbin/busybox \]\]; then 
     busybox=/system/xbin/busybox;
else 
     date +'busybox binary not found or executable permission is not set. Exiting';
     exit;
fi

# Check if the aapt binary exists under /data/local/tmp or /system/bin or /system/xbin. 
# Set the detected binary's path into the variable aapt or exit if file
# doesn't exist or executable permission is not set
if \[\[ -x /data/local/tmp/aapt \]\]; then 
    aapt=/data/local/tmp/aapt;
elif \[\[ -x /system/bin/aapt \]\]; then
    aapt=/system/bin/aapt;
elif \[\[ -x /system/xbin/aapt \]\]; then
     aapt=/system/xbin/aapt;
else  
     date +'aapt binary not found or executable permission is not set. Exiting';
     exit;
fi

# List third-party installed packages not installed from Play Store. Replace -ve with -e if you intend to list packages installed from Play Store.
pm list packages -3 -i | grep -ve "com.android.vending" -ve "com.google.android.feedback" | $busybox sed 's/package://g'| $busybox awk '{print$1}' > /sdcard/pkgs.txt
#$busybox printf "List of third-part installed apps not installed from Play Store:\\n\\n" 

# For each package, get its label and print it with package name on standard output
while read line; do
    path=$(pm path $line | $busybox sed 's/^package://g');          # retrieve path of package's APK. Required for finding app's label
    label=$($aapt d badging $path 2>&1 | $busybox sed -ne '/application: label=/p' | $busybox cut -d "'" -f2);   # Retrieve app's label using $path
    printf "$label - $line\\n";  
done < /sdcard/pkgs.txt

Enregistrez le script sous /sdcard dans un fichier nommé nonplay.sh et exécuter ce fichier depuis un émulateur de terminal de cette manière :

sh /sdcard/nonplay.sh

Sortie démo :

(Cliquez sur l'image pour l'agrandir)

IMG:

( <strong>Note </strong>Ces applications listées dans l'image ont été téléchargées depuis Play Store il y a quelques temps dans ma ROM primaire. Puisqu'elles ont été sideloadées dans cette ROM secondaire, elles sont apparues dans la sortie. Si je réussis à mettre à jour l'une des applications sideloadées depuis Play Store, il sera considéré que l'application est installée depuis Play Store).

0 votes

Tout cela peut être évité si vous avez un accès Root. Titanium Backup permet de filtrer les applications en fonction de leur "installateur" ("lié"). Je ne connais pas d'application alternative non rootée cependant.

0 votes

Mais une application ne devrait-elle pas être en mesure de voir la INSTALLER_NAME d'une autre application sans accès Root en premier lieu déjà ?

0 votes

@SarpSTA : Pourquoi pensez-vous cela ? Je ne vois aucun inconvénient à ce qu'une application connaisse le nom de l'application d'installation.

1voto

wbogacz Points 2593

Je constate que les quelques applications que j'ai installées et qui ne proviennent pas de Google Play ont leur apk original dans le dossier de téléchargement. Elles se retrouvent généralement là parce que j'ai cliqué sur un lien apk via un site Web ou un blog que je consultais. Après le téléchargement, la barre de notification indique que le téléchargement est terminé, et un clic à cet endroit lance le programme d'installation. Je commence par regarder dans le dossier

/storage/sdcard/Download

0voto

Zac Powell Points 280

A moins de passer en revue vos applications installées et de les comparer à celles de Google Play, je ne vois pas ce que vous pouvez faire d'autre que de tout désinstaller et de tout réinstaller via Google Play.

0 votes

C'est exactement la solution que j'espérais éviter :( Ce n'est pas vraiment la peine de faire cet effort juste pour décider si oui ou non je veux que Sky Go fonctionne.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X