9 votes

Puis-je obtenir le fichier .apk d'une application installée ?

J'ai déployé le fichier .apk de mon application sur un appareil Qualcomm. Par malchance, l'ordinateur portable sur lequel l'application a été développée a été volé, et je n'ai donc pas le code de l'application avec moi. Cependant, j'ai l'appareil sur lequel j'avais installé mon application.

Ma question est donc la suivante : puis-je obtenir le fichier .apk de mes applications depuis cet appareil ? Si oui, dites-moi comment l'obtenir.

Toute aide est appréciable.

Merci, Gaurav

10voto

Matthew Read Points 50150

Il devrait être situé à /data/app/ . Vous pouvez y accéder directement si vous disposez de Root. Sinon, vous devrez utiliser adb pull . Par exemple :

adb pull /data/app/myapp.apk C:\backup\myapp.apk

Plus d'informations sur adb : http://developer.Android.com/guide/developing/tools/adb.html

4voto

Chris Stratton Points 1639

Si vous connaissez le installé le nom de fichier de l'apk (qui sur certains appareils peut être myapp-1.apk ou myapp-2.apk plutôt que juste myapp.apk), vous pouvez y accéder directement en tant qu'utilisateur ordinaire, y compris celui sous lequel adb s'exécute sur un appareil sécurisé, donc vous devriez être capable de le tirer avec adb. Mais si vous ne connaissez pas le installé apk, vous ne pouvez pas parcourir le répertoire /data/app sans être Root ou aid_system.

Cela peut valoir la peine de deviner le nom installé - essayez-le sans rien, essayez-le avec le -1.apk, et le -2.apk, etc.

Il y a peut-être un autre moyen : Je pense que ce qui suit fonctionnera sur un appareil sécurisé, mais je n'en ai pas un sous les yeux pour le tester.

EDIT : Nouvelle idée pour déterminer le nom exact du fichier APK

1) adb pull /data/system/packages.xml

2) Recherchez dans ce document l'entrée codePath de votre application.

3) adb pull that

EDIT : En ce qui concerne l'ancienne idée ci-dessous, Matthew a découvert que si les fichiers per-process sous /proc ont le droit de lecture sur un périphérique sécurisé, ils sont vides lorsqu'ils sont lus par un uid non privilégié autre que celui de leur propriétaire. Cela ne fonctionnera donc pas.


1) Faites fonctionner votre application. Vous aurez également besoin d'une machine avec adb.

2) type

adb shell ps 

et cherchez la ligne avec le nom de votre application :

app_1     11959 907   112984 27580 ffffffff afd0c5bc S com.clevername.myapp

3) prenez le numéro de la deuxième colonne qui est l'identifiant du processus, et affichez sa carte de mémoire virtuelle, dans ce cas je taperais

adb shell cat /proc/11959/maps

et cherchez une ligne où il a mappé son propre fichier apk en mémoire

43e9c000-43ea3000 r--s 001f4000 b3:06 15393      /data/app/com.clevername.myapp-1.apk

4) C'est le nom du fichier que vous devez utiliser pour adb pull.

adb pull /data/app/com.clevername.myapp-1.apk .

L'examen des permissions du répertoire /proc suggère que cela devrait fonctionner pour un utilisateur non privilégié, mes excuses si ce n'est pas le cas. Si vous êtes familier avec l'utilisation de 'grep', vous pouvez l'utiliser pour éviter de scanner manuellement la sortie.

Addendum : Je ne suis pas vraiment sûr de l'histoire des applications installées sur la carte SD.

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