Réponses:
aapt dump badging <path-to-apk> | grep package:\ name
|
, appuyez sur Entrée, puis recherchez simplement la sortie pour le paramètre souhaité. N'oubliez pas que cela aapt
doit être sur votre chemin
aapt
se trouve sous Android\SDK\build-tools\version
. sur la commande windows peut être aapt dump badging <path-to-apk> | findstr -i "package: name"
ouaapt dump badging <path-to-apk>
Vous pouvez installer l'apk sur votre téléphone, puis
connectez-vous en utilisant adb, vous pouvez lancer le shell adb et exécuter pm list packages -f, qui affiche le nom du package pour chaque apk installé.
su
commande.
pm list packages -f | grep term-to-search-for
Basé sur la réponse @hackbod ... mais lié aux fenêtres.
aapt
se trouve sur Android\SDK\build-tools\version
. Si vous avez besoin de plus d'informations sur ce qu'est appt command
(Outil de création de package d'actifs Android), lisez ce https://stackoverflow.com/a/28234956/812915
La dump
sous-commande de aapt
est utilisée pour afficher les valeurs des éléments individuels ou des parties d'un package:
aapt dump badging <path-to-apk>
Si vous souhaitez voir uniquement la ligne contenant les package: name
informations, utilisezfindstr
aapt dump badging <path-to-apk> | findstr -n "package: name" | findstr "1:"
J'espère que cela aidera les autres utilisateurs de Windows!
Si vous regardez Google Play et que vous souhaitez connaître le nom de son package, vous pouvez consulter l'URL ou la barre d'adresse. Vous obtiendrez le nom du package. Voici com.landshark.yaum
le nom du package
https://play.google.com/store/apps/details?id=com.landshark.yaum&feature=search_result#?t=W251bGwsMSwyLDEsImNvbS5sYW5kc2hhcmsueWF1bSJd
Si vous ouvrez le fichier AndroidManifest.xml à l'aide du bloc-notes MS, recherchez l'expression package
et vous trouverez ce qui suit:
package manifest $xxx.xxxxxxx.xxxxxxx |
où xxx.xxxxxxx.xxxxxxx est le nom de votre package, juste écrit avec un espace après chaque caractère.
C'est un moyen utile lorsque vous n'avez aucun outil spécifique installé.
Le script bash suivant affichera le nom du package et le nom de l'activité principale:
apk_package.sh
package=$(aapt dump badging "$*" | awk '/package/{gsub("name=|'"'"'",""); print $2}')
activity=$(aapt dump badging "$*" | awk '/activity/{gsub("name=|'"'"'",""); print $2}')
echo
echo " file : $1"
echo "package : $package"
echo "activity: $activity"
lancez-le comme ceci:
apk_package.sh /path/to/my.apk
Si vous devez le faire par programme, c'est un peu plus compliqué que de simplement obtenir la réponse dans votre cerveau. J'ai un script que j'utilise pour signer toutes nos applications, mais chacune utilise une clé différente. Voici 2 façons d'obtenir uniquement le nom du package en sortie afin que vous puissiez le mettre dans une variable ou faire tout ce dont vous avez besoin avec.
Exemple de sortie: com.example.appname
(et rien de plus)
aapt
- Android Asset Packaging Tool, partie de la téléchargement des outils SDK
En utilisant awk
spécifier '
comme séparateur de champ, recherchez une ligne avec package: name=
et imprimez uniquement le 2ème "champ" de la ligne:
aapt dump badging /path/to/file.apk | awk -v FS="'" '/package: name=/{print $2}'
Une faiblesse de cette méthode est qu'elle s'appuie sur aapt pour sortir les champs d'informations du package 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 des développeurs pour maintenir ce format.
En utilisant awk
spécifier "
comme séparateur de champ, recherchez une ligne avec package=
et imprimez uniquement le 2ème "champ" de la ligne:
aapt list -a /path/to/file.apk | awk -v FS='"' '/package=/{print $2}'
Une faiblesse de cette méthode est qu'elle repose sur aapt pour sortir package=
uniquement dans la Android Manifest:
section de la sortie. Nous n'avons aucun engagement des développeurs pour maintenir ce format.
Développez le fichier apktool d
apk avec et lisez le fichier AndroidManifest.xml.
Ce serait la meilleure méthode, mais AndroidManifest.xml est un fichier binaire et toutes les réponses SO que je vois pour le convertir en texte ne fonctionnent pas. (Utiliser apktool d
au lieu d'un simple unzip
est censé faire cela pour vous, mais ce n'est pas le cas.) Veuillez commenter si vous avez une solution à ce problème
Une autre solution consiste à utiliser aapt list et à utiliser sed pour analyser cela:
aapt list -a $PATH_TO_YOUR_APK | sed -n "/^Package Group[^s]/s/.*name=//p"
A:package="com.example.appname"
dans la Android Manifest:
section si vous le faitesaapt list -a
Il existe un moyen très simple si vous avez déjà votre fichier APK sur votre smartphone. Utilisez simplement l'une de ces applications:
Une méthode très simple consiste à utiliser apkanalyzer.
apkanalyzer manifest application-id "${_path_to_apk}"
Je pense que la façon la meilleure et la plus simple d'extraire uniquement le nom du package sous Linux est
aapt dump badging <APK_path> | grep package | sed -r "s/package: name='([a-z0-9.]*)'.*/\1/"
Explication:
package: name='([a-z0-9.]*)'.*
et remplace par le premier (et le seul) groupe correspondant.Vous pouvez extraire AndroidManifest.xml de l'APK, supprimer tous les octets NULL, ignorer tout jusqu'à la chaîne `` manifest '', puis vous êtes à un octet de longueur suivi du nom du package (et de ce qui vient après). Pour la tâche difficile, j'utilise le grand outil GEMA , donc la commande ressemble à ceci:
7z e -so MyApp.apk AndroidManifest.xml | gema '\x00=' | gema -match 'manifest<U1><U>=@substring{0;@char-int{$1};$2}'
Bien sûr, vous pouvez utiliser n'importe quel autre outil pour effectuer le filtrage.
Si vous n'avez pas installé le SDK Android, comme dans certains scénarios de test, vous pouvez obtenir le nom du package en utilisant la méthode bash suivante:
getAppIdFromApk() {
local apk_path="$1"
# regular expression (required)
local re="^\"L.*/MainActivity;"
# sed substitute expression
local se="s:^\"L\(.*\)/MainActivity;:\1:p"
# tr expression
local te=' / .';
local app_id="$(unzip -p $apk_path classes.dex | strings | grep -Eo $re | sed -n -e $se | tr $te)"
echo "$app_id"
}
Testé sur un mac. 'strings' et 'unzip' sont standard sur la plupart des linux, donc devraient également fonctionner sur linux.
J'ai aussi essayé la décompilation, ça marche mais récemment j'ai trouvé le moyen le plus simple:
Téléchargez et installez Appium à partir du site Web Appium
Ouvrez Appium-> Paramètres Android, choisissez le fichier apk cible. Et puis vous obtenez tout ce que vous voulez, les informations sur le package, les informations sur l'activité.
Pour l'utiliser dans les scripts par lots, il est pratique que le script renvoie uniquement le nom du package (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 "$1" | 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
Vous pouvez donc écrire:
adb désinstaller `./getPackageName.sh file.apk`
Pour Windows, les éléments suivants ont fonctionné 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\22.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
Remarque
Veuillez modifier les chemins d’adb, aapt, APKPath en fonction des chemins d’adb, aapt et de l’emplacement apk de votre système.
Travail:
%adb% install %apk%
installe l'application si le périphérique est connecté.%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 stocke dans un fichier temp.txt au même emplacement que celui de l'apk.extracts the package name and assigns to
pkgName` variable%adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1
Lance enfin l'application.En substance, le code ci-dessus installe l'apk à partir d'un emplacement donné dans le bureau "Desktop \ APK \ Instant_Instal \" sur l'appareil et lance l'application.
Comme je n'ai pas pu trouver le nom du package dans le fichier .apk avec l'éditeur (comme suggéré ci-dessus), j'ai vérifié les fonctions de l'application "ES Datei Explorer" / "ES File Explorer" (version gratuite) que j'ai avait déjà installé. Dans cet outil, le nom du package s'affiche 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 devez connaître le nom du package).
Comme il est mentionné dans la documentation Android qu'AAPT est obsolète , obtenir le nom du package à l'aide de la commande AAPT2 sous Linux est le suivant:
./aapt2 dump packagename <path_to_apk>
Comme j'utilise une ancienne version de Gradle build, j'ai dû télécharger une version plus récente d'AAPT2 comme mentionné ici:
Téléchargez AAPT2 depuis Google Maven
En utilisant les outils de build de mon sdk - 25.0.3, 26.0.1 et 27.0.3, l'exécution de la commande aapt2 affiche une erreur: Impossible d'ouvrir 'packagename': Aucun fichier ou répertoire de ce type. C'est pourquoi j'ai opté pour les nouvelles versions d'AAPT2.
J'ai utilisé 3.3.0-5013011 pour linux.
Vous pouvez utiliser Analyze APK...
dans le menu Construire dans Android Studio, il affichera le nom du package en haut de la nouvelle fenêtre.