Respuestas:
aapt dump badging <path-to-apk> | grep package:\ name
|
, presionar enter y luego simplemente buscar en la salida el parámetro deseado. Solo recuerda que aapt
debe estar en tu camino
aapt
El comando se encuentra debajo Android\SDK\build-tools\version
. en el comando de Windows puede ser aapt dump badging <path-to-apk> | findstr -i "package: name"
oaapt dump badging <path-to-apk>
Puede instalar el apk en su teléfono, luego
Conéctese usando adb, puede iniciar adb shell y ejecutar pm list packages -f, que muestra el nombre del paquete para cada apk instalado.
Esto se tomó del nombre del paquete Buscar para que las aplicaciones de Android utilicen Intención para iniciar la aplicación Market desde la web
su
comando primero.
pm list packages -f | grep term-to-search-for
Basado en la respuesta @hackbod ... pero relacionado con Windows.
aapt
El comando se encuentra en Android\SDK\build-tools\version
. Si necesita más información sobre qué es appt command
(Herramienta de empaquetado de activos de Android), lea este https://stackoverflow.com/a/28234956/812915
El dump
subcomando 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 package: name
información, usefindstr
aapt dump badging <path-to-apk> | findstr -n "package: name" | findstr "1:"
Espero que ayude a otros usuarios de Windows!
Si está buscando en Google Play y quiere saber el nombre del paquete, puede consultar la URL o la barra de direcciones. Obtendrá el nombre del paquete. Aquí com.landshark.yaum
está el nombre del paquete
https://play.google.com/store/apps/details?id=com.landshark.yaum&feature=search_result#?t=W251bGwsMSwyLDEsImNvbS5sYW5kc2hhcmsueWF1bSJd
Si abre AndroidManifest.xml con MS Notepad, busque la frase package
y encontrará lo siguiente:
package manifest $xxx.xxxxxxx.xxxxxxx |
donde xxx.xxxxxxx.xxxxxxx es el nombre de su paquete, simplemente escrito con un espacio después de cada carácter.
Es útil cuando no tienes ninguna herramienta específica instalada.
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"
ejecutarlo así:
apk_package.sh /path/to/my.apk
Si necesita hacer esto mediante programación, es un poco más complicado que simplemente obtener la respuesta en su cerebro. Tengo un script que utilizo 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.
Salida de ejemplo: com.example.appname
(y nada más)
aapt
- Android Asset Packaging Tool, parte de la descarga de SDK Tools
Usando awk
especificar '
como el 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 generar 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.
Usando awk
especificar "
como el 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 se basa en aapt para generar package=
solo en la Android Manifest:
sección de la salida. No tenemos compromisos de los desarrolladores para mantener este formato.
Expanda el archivo apk con apktool d
y lea 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 supone que usarlo en apktool d
lugar de un simple unzip
lo hace por usted, pero no es así). Por favor comente si tiene una solución a este problema
Otra solución es usar una lista de apt y usar sed para analizar eso:
aapt list -a $PATH_TO_YOUR_APK | sed -n "/^Package Group[^s]/s/.*name=//p"
A:package="com.example.appname"
de la Android Manifest:
sección siaapt list -a
Hay una manera muy simple si ya tienes tu APK en tu teléfono inteligente. Simplemente use una de estas aplicaciones:
Un método muy simple es usar apkanalyzer.
apkanalyzer manifest application-id "${_path_to_apk}"
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:
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 del 'manifiesto' de la cadena, y luego está en un byte de longitud seguido del nombre del paquete (y lo que viene después). Para la tarea difícil, uso 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.
Si no tiene instalado el SDK de Android, como en algunos escenarios de prueba, puede obtener el nombre del paquete utilizando el siguiente método bash:
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"
}
Probado en una mac. 'cadenas' y 'descomprimir' son estándar en la mayoría de los Linux, por lo que también deberían funcionar en Linux.
También probé lo de la compilación, funciona, pero recientemente encontré la forma más fácil:
Descargue e instale Appium desde el sitio web de Appium
Abra Appium-> configuración de Android, elija el archivo apk objetivo. Y luego obtienes todo lo que quieres, la información del paquete, la información de la actividad.
Para usar esto en las secuencias de comandos por lotes, es útil que la secuencia de comandos devuelva solo el nombre del paquete (por ejemplo, para desinstalar una aplicación cuando tiene 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:
desinstalar adb `./getPackageName.sh file.apk`
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 adb, aapt y la ubicación de apk en su sistema.
Trabajando:
%adb% install %apk%
instala la aplicación si el dispositivo está conectado.%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 apk y se almacena en un archivo temp.txt en la misma ubicación que la de la apk.extracts the package name and assigns to
pkgName` variable%adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1
lanza la aplicación.En esencia, el código anterior instala la aplicación desde la ubicación dada en el escritorio "Desktop \ APK \ Instant_Instal \" en el dispositivo e inicia la aplicación.
Como no pude encontrar el nombre del paquete en el archivo .apk con el editor (como se sugirió anteriormente), he verificado las funciones en la aplicación "ES Datei Explorer" / "ES File Explorer" (versión gratuita) que yo ya lo había instalado. En esta herramienta, el nombre del paquete se muestra correctamente.
Como creo que no debería faltar un buen explorador de archivos en un teléfono, sugiero usar esta herramienta (si ya ha instalado el apk en un dispositivo móvil y tiene que conocer el nombre del paquete).
Como se menciona en la documentación de Android que AAPT ha quedado en desuso , obtener el nombre del paquete con el comando AAPT2 en Linux es el siguiente:
./aapt2 dump packagename <path_to_apk>
Como estoy usando una versión anterior de Gradle build, tuve que descargar una versión más nueva de AAPT2 como se menciona aquí:
Descargar AAPT2 de Google Maven
Al usar las herramientas de compilación en mi sdk - 25.0.3, 26.0.1 y 27.0.3, la ejecución del comando aapt2 muestra un error: No se puede abrir 'packagename': No existe tal archivo o directorio. Es por eso que elegí las versiones más nuevas de AAPT2.
Usé 3.3.0-5013011 para Linux.
Puede usar Analyze APK...
desde el menú Generar en Android Studio, mostrará el nombre del paquete en la parte superior de la nueva ventana.