Lire le nom du paquet D'un APK Android
je dois obtenir le nom de paquet D'un apk Android. J'ai essayé de décompresser L'APK et de lire le contenu de AndroidManifest.xml
, mais il semble que ce n'est pas un fichier texte.
Comment puis-je extraire le nom du paquet APK?
19 réponses
Vous pouvez installer l'apk sur votre téléphone, puis
connect en utilisant adb, vous pouvez lancer adb shell et exécuter pm liste packages-F, qui affiche le nom du paquet pour chaque apk installé.
si vous ouvrez L'AndroidManifest.xml à L'aide de MS Notepad, rechercher l'expression package
et vous trouverez ce qui suit:
package manifest $xxx.xxxxxxx.xxxxxxx |
où xxx.xxxxxxx.xxxxxxx est votre nom de paquet, juste écrit avec un espace après chaque caractère.
C'est utile quand vous n'avez pas les outils installés.
si vous êtes à la recherche de google play et que vous voulez connaître le nom de son paquet, alors vous pouvez consulter la barre d'url ou d'adresse. Vous obtiendrez le nom du paquet. Ici com.landshark.yaum
est le nom du paquet
https://play.google.com/store/apps/details?id=com.landshark.yaum&feature=search_result#?t=W251bGwsMSwyLDEsImNvbS5sYW5kc2hhcmsueWF1bSJd
le script bash suivant affichera le nom du paquet et le nom de l'activité principale:
apk_package.sh
package=$(aapt dump badging "$*" | awk '/package/{gsub("name=|'"'"'",""); print }')
activity=$(aapt dump badging "$*" | awk '/activity/{gsub("name=|'"'"'",""); print }')
echo
echo " file : "
echo "package : $package"
echo "activity: $activity"
exécuter comme suit:
apk_package.sh /path/to/my.apk
D'après la réponse de @hackbod ... mais lié à windows.
aapt
la commande est située sur Android\SDK\build-tools\version
.
Si vous avez besoin de plus d'informations sur ce qui est appt command
(Android Asset Packaging Tool) lire ce https://stackoverflow.com/a/28234956/812915
la sous-commande dump
de aapt
est utilisée pour afficher les valeurs d'éléments individuels ou de parties d'un paquet:
aapt dump badging <path-to-apk>
si vous voulez voir seulement la ligne avec package: name
info, utilisez findstr
aapt dump badging <path-to-apk> | findstr -n "package: name" | findstr "1:"
Espère que ça aidera d'autres utilisateurs windows!
Une Réponse Programmatique
si vous avez besoin de faire cela programmatiquement, c'est un peu plus impliqué que juste obtenir la réponse dans votre cerveau. J'ai un script que j'utilise pour signer toutes nos applications, mais chaque utilisation d'une clé différente. Voici 2 façons d'obtenir juste le nom du paquet comme sortie de sorte que vous pouvez le mettre dans une variable ou faire tout ce dont vous avez besoin avec elle.
exemple de sortie: com.example.appname
(et rien de plus)
exigences
aapt
- Android Asset Outil de Conditionnement, une partie de la SDK Tools télécharger
Solution 1
utiliser awk
spécifier '
comme séparateur de champ, Rechercher une ligne avec package: name=
, et imprimer seulement le 2ème "champ" dans la ligne:
aapt dump badging /path/to/file.apk | awk -v FS="'" '/package: name=/{print }'
Une faiblesse de cette méthode est qu'elle repose sur aapt de sortie les champs d'information du paquet dans le même ordre:
package: name='com.example.appname' versionCode='3461' versionName='2.2.4' platformBuildVersionName='4.2.2-1425461'
nous n'avons aucun engagement de la part des développeurs pour maintenir ce format.
Solution 2
en utilisant awk
spécifier "
comme séparateur de champ, Rechercher une ligne avec package=
, et imprimer seulement le 2ème "champ" dans la ligne:
aapt list -a /path/to/file.apk | awk -v FS='"' '/package=/{print }'
Une faiblesse de cette méthode est qu'elle repose sur aapt de sortie package=
uniquement dans la section Android Manifest:
de la sortie. Nous n'avons aucun engagement de la part des développeurs pour maintenir ce format.
Solution 3
développez le fichier apk avec apktool d
et lisez le AndroidManifest.XML.
ce serait la meilleure méthode, mais L'AndroidManifest.xml est un fichier binaire et toutes les réponses que je vois pour le convertir en texte ne fonctionnent pas. (En utilisant apktool d
au lieu d'un simple unzip
est censé le faire pour vous, mais il ne le fait pas.) s'il vous Plaît commentaire si vous avez une solution à ce problème
si vous voulez juste connaître le nom du paquet, exécuter ADB logcat, lancer l'activité que vous voulez , vous obtiendrez un indice sur le nom du paquet.
une autre solution consiste à utiliser la liste aapt et à utiliser sed pour analyser cela:
aapt list -a $PATH_TO_YOUR_APK | sed -n "/^Package Group[^s]/s/.*name=//p"
je pense que la meilleure et la plus simple façon d'extraire seulement le nom du paquet sous Linux est
aapt dump badging <APK_path> | grep package | sed -r "s/package: name='([a-z0-9.]*)'.*//"
explication:
- AAPT extraits de l'APK de l'information
- Grep "package" pour ne garder que la ligne sur le paquet l'information
- fait sed remplacer la ligne entière par le nom du colis en utilisant seulement le regex suivant:
package: name='([a-z0-9.]*)'.*
et en remplaçant par le premier (et seulement) groupe correspondant.
vous pouvez extraire AndroidManifest.xml à partir de L'APK, supprimez tous les octets nuls, sautez tout jusqu'après la chaîne de caractères 'manifest', puis vous êtes à un octet long suivi du nom du paquet (et ce qui vient après lui). Pour la tâche difficile j'utilise le grand Gema outil, de sorte que la commande ressemble à ceci:
7z e -so MyApp.apk AndroidManifest.xml | gema '\x00=' | gema -match 'manifest<U1><U>=@substring{0;@char-int{};}'
bien sûr, vous pouvez utiliser un autre outil pour faire le filtrage.
il y a un moyen très simple si vous avez déjà votre APK sur votre Smartphone. Il suffit d'utiliser une de ces applications:
une solution simple serait Open Android Studio -> Build -> Analyze Apk... parcourir et sélectionner L'APK maintenant, vous pouvez trouver le nom du paquet et à peu près tout ce que vous pouvez lire.
, vous pouvez installer Package_Name_Viewer.apk sur votre émulateur et ensuite vous pouvez voir le nom du paquet de toutes les applications installées sur votre émulateur.
j'ai aussi essayé la dé-compilation, ça marche mais récemment j'ai trouvé le moyen le plus simple:
-
Télécharger et installer Appium de Appium site
-
ouvrir Appium->mise Android, choisissez le fichier apk cible. Et vous obtenez tout ce que vous voulez, les informations sur le paquet, l'activité.
pour utiliser ceci dans les scripts par lot, il est pratique que le script renvoie juste le nom du paquet (par exemple pour désinstaller une application lorsque vous avez L'APK).
voici le script que j'utilise:
# extract the android package id from a built apk file
# usage ./getPackageName.sh <path-to-apk>
line=`aapt dump badging "" | grep package:\ name`
# above returns:
# package: name='com.calvium.myapp' versionCode='1' versionName='1.0'
if [[ $line =~ name=\'(.+)\'\ versionCode ]]; then
echo ${BASH_REMATCH[1]}
else
echo "Failed to find package name"
exit 1
fi
pour que tu puisses écrire:
bad désinstaller `./getPackageName.sh fichier.apk '
pour fenêtres suivant travaillé pour moi:
:: // Initializing variables
SET adb="C:\Users\<User name>\AppData\Local\Android\Sdk\platform-tools\adb"
SET aapt="C:\Users\<User name>\AppData\Local\Android\Sdk\build-tools.0.0\aapt"
SET APKPath=C:\Users\<User name>\Desktop\APK\Instant_Instal\
CD %APKPath%
:: // Searching for apk file and storing it
FOR /F "delims=" %%f IN ('dir /S /B *.apk') DO SET "APKFullPath=%%f"
SET apk=%APKFullPath%
:: // Command adb install apk, run apk
%adb% install %apk%
:: // Fetching package name from apk
%aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txt
FOR /F "tokens=2 delims='" %%s IN (temp.txt) DO SET pkgName=%%s
del temp.txt
:: // Launching apk
%adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1
pause
Note
veuillez modifier les chemins de adb, aapt, APKPath selon les chemins de adb, aapt, et l'emplacement apk dans votre système.
"151980920 de Travail":
- ici, j'ai ajouté l'apk dans un dossier sur le bureau" \Desktop\APK\Instant_Instal\".
- la commande
%adb% install %apk%
installe l'application si le périphérique est connecté. - ce
%aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txt
récupère le nom du paquet et quelques autres détails comme la version, etc. de l'apk et des magasins dans une intérimaire.fichier txt dans le même emplacement que celui de l'apk. - FOR /F" tokens=2 delims=' " % % s IN (temp.txt) DO SET pkgName=%%s
extracts the package name and assigns to
pkgName` variable - Enfin
%adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1
lance l'application.
en essence le code ci-dessus installe l'apk de l'emplacement donné dans le bureau "Desktop\APK\Instant_Instal\" à l'appareil et lance l'application.
comme je n'ai pas pu trouver le nom du paquet dans le .fichier apk Avec éditeur (comme suggéré ci-dessus), j'ai vérifié les fonctions de L'application "ES Datei Explorer" / "ES File Explorer" (version libre) que j'avais déjà installée.
Dans cet outil, le nom du paquet est affiché correctement.
Comme je pense qu'un bon explorateur de fichiers ne devrait pas manquer sur un téléphone, je suggère d'utiliser cet outil (si vous avez déjà installé l'apk sur un mobile et que vous devez connaître le nom du paquet).
aapt liste -un "path_to_apk"
je vous recommande de le sauvegarder dans un .txt, parce que ça peut être très long. So:
aapt liste -un "path_to_apk" > fichier.txt
alors voir le dossier.txt dans votre répertoire courant.