studio - Lea el nombre del paquete de una APK de Android
ejemplos android studio codigo fuente (17)
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.
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?
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.
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://.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 <path-to-apk>
Si desea ver solo la línea con el package: name
información del package: name
, use findstr
aapt dump badging <path-to-apk> | findstr -n "package: name" | findstr "1:"
Espero que ayude a otros usuarios de Windows!
Creo que la mejor y más simple forma de extraer solo el nombre del paquete en Linux es
aapt dump badging <APK_path> | grep package | sed -r "s/package: name=''([a-z0-9.]*)''.*//1/"
Explicación:
- AAPT extrae la información del APK
- Grep "paquete" para mantener solo la línea sobre la información del paquete
- 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.
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
Hay una manera muy simple si tienes tu APK listo en tu teléfono inteligente. Solo usa una de estas aplicaciones:
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"
Para Windows, lo siguiente funcionó para mí:
:: // 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
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.
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 <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
Entonces podrías escribir:
adb uninstall `./getPackageName.sh file.apk`
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 | gema ''/x00='' | gema -match ''manifest<U1><U>=@substring{0;@char-int{$1};$2}''
Por supuesto, puede usar cualquier otra herramienta para hacer el filtrado.
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
Si solo quiere saber el nombre del paquete, ejecute adb logcat, inicie la actividad que desea, obtendrá una pista sobre el nombre del paquete.
También probé la descomplicación, funciona, pero recientemente encontré la manera más fácil:
Descargue e instale Appium desde el sitio web de Appium
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.
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.
aapt dump badging <path-to-apk> | grep package:/ name