Lea el nombre del paquete de una APK de Android

Necesito obtener el nombre del paquete de una APK de Android. Intenté descomprimir la APK y leer el contenido de AndroidManifest.xml , pero parece que no es un archivo de texto.

¿Cómo puedo extraer el nombre del paquete del APK?

 aapt dump badging  | grep package:\ name 

Puede instalar el apk en su teléfono, luego

Conéctese con adb, puede ejecutar adb shell y ejecutar pm list packages -f, que muestra el nombre del paquete para cada apk instalado.

Esto tomado del nombre del paquete Find para las aplicaciones de Android para usar Intent para lanzar la aplicación Market desde la web

Si abre AndroidManifest.xml con MS Notepad, busque el package frases y encontrará lo siguiente:

 package manifest $xxx.xxxxxxx.xxxxxxx | 

donde xxx.xxxxxxx.xxxxxxx es el nombre de su paquete, acaba de escribir con un espacio después de cada carácter.

Es útil cuando no tienes herramientas específicas instaladas.

Si estás buscando en google play y quieres saber su nombre de paquete, entonces puedes mirar la url o la barra de direcciones. Obtendrás el nombre del paquete. Aquí com.landshark.yaum es el nombre del paquete

  https://play.google.com/store/apps/details?id=com.landshark.yaum&feature=search_result#?t=W251bGwsMSwyLDEsImNvbS5sYW5kc2hhcmsueWF1bSJd 

El siguiente script bash mostrará el nombre del paquete y el nombre de la actividad principal:

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" 

ejecútelo así:

 apk_package.sh /path/to/my.apk 

Basado en la respuesta @hackbod … pero relacionado con Windows.

aapt comando aapt se encuentra en Android\SDK\build-tools\version . Si necesita más información sobre qué es el appt command (Herramienta de empaquetado de activos de Android) lea esto https://stackoverflow.com/a/28234956/812915

El subcomando dump de aapt se usa para mostrar los valores de elementos individuales o partes de un paquete:

aapt dump badging

Si desea ver solo la línea con el package: name información del package: name , use findstr

aapt dump badging | findstr -n "package: name" | findstr "1:"

Espero que ayude a otros usuarios de Windows!

Una respuesta programática

Si necesita hacer esto programáticamente, es un poco más complicado que solo obtener la respuesta en su cerebro. Tengo un script que uso para firmar todas nuestras aplicaciones, pero cada una usa una clave diferente. Aquí hay 2 formas de obtener solo el Nombre del paquete como salida para que pueda ponerlo en una variable o hacer lo que necesite con él.

Ejemplo de salida: com.example.appname (y nada más)

Requisitos

aapt – Android Asset Packaging Tool, parte de la descarga de SDK Tools

Solución 1

Usando awk especifique ' como Separador de campo, busque una línea con package: name= , e imprima solo el segundo “campo” en la línea:

 aapt dump badging /path/to/file.apk | awk -v FS="'" '/package: name=/{print $2}' 

Una debilidad de este método es que se basa en aapt para mostrar los campos de información del paquete en el mismo orden:

 package: name='com.example.appname' versionCode='3461' versionName='2.2.4' platformBuildVersionName='4.2.2-1425461' 

No tenemos compromisos de los desarrolladores para mantener este formato.

Solución 2

Usando awk especifique " como Separador de campo, busque una línea con package= e imprima solo el segundo” campo “en la línea:

 aapt list -a /path/to/file.apk | awk -v FS='"' '/package=/{print $2}' 

Una debilidad de este método es que depende de aapt para generar package= solo en la sección Android Manifest: de la salida. No tenemos compromisos de los desarrolladores para mantener este formato.

Solución 3

Expanda el archivo apk con apktool d y lea el archivo AndroidManifest.xml.

Este sería el mejor método, pero AndroidManifest.xml es un archivo binario y todas las respuestas SO que veo para convertirlo a texto no funcionan. (Se apktool d uso de apktool d lugar de un simple unzip lo hace por usted, pero no es así). Comente si tiene alguna solución a este problema.

Si solo quiere saber el nombre del paquete, ejecute adb logcat, inicie la actividad que desea, obtendrá una pista sobre el nombre del paquete.

Otra solución es usar una lista aapt y usar sed para analizar eso:

aapt list -a $PATH_TO_YOUR_APK | sed -n "/^Package Group[^s]/s/.*name=//p"

Creo que la mejor y más simple forma de extraer solo el nombre del paquete en Linux es

 aapt dump badging  | grep package | sed -r "s/package: name='([a-z0-9.]*)'.*/\1/" 

Explicación:

  1. AAPT extrae la información del APK
  2. Grep “paquete” para mantener solo la línea sobre la información del paquete
  3. Make sed reemplaza toda la línea con el nombre del paquete solo con la siguiente expresión regular: package: name='([a-z0-9.]*)'.* Y reemplazando con el primer (y único) grupo coincidente.

Puede extraer AndroidManifest.xml del APK, eliminar todos los bytes NULL, omitir todo hasta después de la cadena ‘manifest’, y luego se encuentra en un byte de longitud seguido del nombre del paquete (y lo que viene después). Para la tarea difícil, utilizo la gran herramienta GEMA , por lo que el comando se ve así:

 7z e -so MyApp.apk AndroidManifest.xml | gem '\x00=' | gem -match 'manifest=@substring{0;@char-int{$1};$2}' 

Por supuesto, puede usar cualquier otra herramienta para hacer el filtrado.

Hay una manera muy simple si tienes tu APK listo en tu teléfono inteligente. Solo usa una de estas aplicaciones:

Aplicaciones del visor de nombre de paquete

Una solución simple sería Open Android Studio -> Build -> Analyze Apk … explore y seleccione el APK ahora puede encontrar el nombre del paquete y prácticamente puede leerlo.

puedes instalar Package_Name_Viewer.apk en tu emulador y luego puedes ver el nombre del paquete de todas las aplicaciones instaladas en tu emulador.

También probé la descomplicación, funciona, pero recientemente encontré la manera más fácil:

  1. Descargue e instale Appium desde el sitio web de Appium

  2. Abra la configuración de Appium-> Android, elija el archivo apk de destino. Y luego obtienes todo lo que deseas, la información del paquete, la información de la actividad.

Para utilizar esto en scripts por lotes, es útil que el script devuelva solo el nombre del paquete (por ejemplo, para desinstalar una aplicación cuando tienes el APK).

Aquí está el script que uso:

 # extract the android package id from a built apk file # usage ./getPackageName.sh  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 

disponible en la esencia

Entonces podrías escribir:

adb uninstall `./getPackageName.sh file.apk`

Para Windows, lo siguiente funcionó para mí:

 :: // Initializing variables SET adb="C:\Users\\AppData\Local\Android\Sdk\platform-tools\adb" SET aapt="C:\Users\\AppData\Local\Android\Sdk\build-tools\22.0.0\aapt" SET APKPath=C:\Users\\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 

Nota

Edite las rutas de adb, aapt, APKPath de acuerdo con las rutas de acceso de adb, aapt y la ubicación apk de su sistema.

Trabajando:

  • Aquí he agregado el apk en una carpeta en el escritorio “\ Desktop \ APK \ Instant_Instal \”.
  • El comando %adb% install %apk% instala la aplicación si el dispositivo está conectado.
  • Este %aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txt %aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txt obtiene el nombre del paquete y algunos otros detalles como la versión, etc. de la aplicación y las almacena en un archivo temp.txt en la misma ubicación que la de la aplicación.
  • FOR / F “tokens = 2 delims = ‘” %% s IN (temp.txt) DO SET pkgName = %% s extracts the package name and assigns to variable pkgName`
  • Finalmente %adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1 inicia la aplicación.

Básicamente, el código anterior instala el apk desde una ubicación determinada en el escritorio “Desktop \ APK \ Instant_Instal \” en el dispositivo y lo inicia.

Como no pude encontrar el nombre del paquete en el archivo .apk con editor (como se sugirió anteriormente), he comprobado las funciones en la aplicación “ES Datei Explorer” / “ES File Explorer” (versión gratuita) que ya había instalado En esta herramienta, el nombre del paquete se muestra correctamente.
Como creo que un buen explorador de archivos no debería faltar en un teléfono, sugiero usar esta herramienta (si ya has instalado el apk en un móvil y tienes que saber el nombre del paquete).

aapt list -a “path_to_apk”

Te recomiendo que lo guardes en .txt, porque puede ser muy largo. Asi que:

aapt list -a “path_to_apk”> file.txt

Luego vea el archivo.txt en su directorio actual.