Respostas:
aapt dump badging <path-to-apk> | grep package:\ name
|
, pressionar enter e, em seguida, basta pesquisar a saída para o parâmetro desejado. Basta lembrar que aapt
precisa estar em seu trajeto
aapt
O comando está localizado em Android\SDK\build-tools\version
. em janelas de comando pode ser aapt dump badging <path-to-apk> | findstr -i "package: name"
ouaapt dump badging <path-to-apk>
Você pode instalar o apk no seu telefone e, em seguida,
conectar usando adb, você pode iniciar o adb shell e executar pm list packages -f, que mostra o nome do pacote para cada apk instalado.
Retirado de Localizar nome do pacote para aplicativos Android usar Intent para iniciar o aplicativo Market da Web
su
comando primeiro.
pm list packages -f | grep term-to-search-for
Com base na resposta @hackbod ... mas relacionada ao Windows.
aapt
comando está localizado em Android\SDK\build-tools\version
. Se precisar de mais informações sobre o que é appt command
(Android Asset Packaging Tool), leia este https://stackoverflow.com/a/28234956/812915
O dump
subcomando de aapt
é usado para exibir os valores de elementos individuais ou partes de um pacote:
aapt dump badging <path-to-apk>
Se você quiser ver apenas a linha com package: name
informações, usefindstr
aapt dump badging <path-to-apk> | findstr -n "package: name" | findstr "1:"
Espero que ajude outro usuário do Windows!
Se você está vendo o google play e quer saber o nome do pacote, pode consultar a barra de URL ou endereço. Você receberá o nome do pacote. Aqui com.landshark.yaum
está o nome do pacote
https://play.google.com/store/apps/details?id=com.landshark.yaum&feature=search_result#?t=W251bGwsMSwyLDEsImNvbS5sYW5kc2hhcmsueWF1bSJd
Se você abrir o AndroidManifest.xml usando o MS Notepad, procure por frase package
e encontrará o seguinte:
package manifest $xxx.xxxxxxx.xxxxxxx |
onde xxx.xxxxxxx.xxxxxxx é o nome do seu pacote, apenas escrito com um espaço após cada caractere.
É uma maneira útil quando você não possui nenhuma ferramenta específica instalada.
O seguinte script bash exibirá o nome do pacote e o nome da atividade 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"
execute assim:
apk_package.sh /path/to/my.apk
Se você precisar fazer isso programaticamente, é um pouco mais complicado do que apenas colocar a resposta em seu cérebro. Eu tenho um script que eu uso para assinar todos os nossos aplicativos, mas cada um usa uma chave diferente. Aqui estão duas maneiras de obter apenas o Nome do Pacote como saída, para que você possa colocá-lo em uma variável ou fazer o que for necessário.
Exemplo de saída: com.example.appname
(e nada mais)
aapt
- Ferramenta de empacotamento de ativos Android, parte do download das ferramentas do SDK
Usando awk
especificar '
como o separador de campos, procure uma linha com package: name=
e imprima apenas o segundo "campo" na linha:
aapt dump badging /path/to/file.apk | awk -v FS="'" '/package: name=/{print $2}'
Um ponto fraco desse método é que ele depende do aapt para gerar os campos de informações do pacote na mesma ordem:
package: name='com.example.appname' versionCode='3461' versionName='2.2.4' platformBuildVersionName='4.2.2-1425461'
Não temos compromissos dos desenvolvedores em manter esse formato.
Usando awk
especificar "
como o separador de campos, procure uma linha com package=
e imprima apenas o segundo "campo" na linha:
aapt list -a /path/to/file.apk | awk -v FS='"' '/package=/{print $2}'
Uma fraqueza desse método é que ele depende do aapt para produzir package=
apenas na Android Manifest:
seção da saída. Não temos compromissos dos desenvolvedores em manter esse formato.
Expanda o arquivo apk com apktool d
e leia o AndroidManifest.xml.
Esse seria o melhor método, mas o AndroidManifest.xml é um arquivo binário e todas as respostas de SO que vejo para convertê-lo em texto não funcionam. (Usar em apktool d
vez de um simples unzip
deve fazer isso por você, mas não o faz.) Por favor, comente se você tem uma solução para esse problema
Outra solução é usar aapt list e use sed para analisar isso:
aapt list -a $PATH_TO_YOUR_APK | sed -n "/^Package Group[^s]/s/.*name=//p"
A:package="com.example.appname"
na Android Manifest:
seção se você fazaapt list -a
Existe uma maneira muito simples se você já tiver o APK no seu smartphone. Basta usar um desses aplicativos:
Um método muito simples é usar o apkanalyzer.
apkanalyzer manifest application-id "${_path_to_apk}"
Eu acho que a melhor e mais simples maneira de extrair apenas o nome do pacote no Linux é
aapt dump badging <APK_path> | grep package | sed -r "s/package: name='([a-z0-9.]*)'.*/\1/"
Explicação:
package: name='([a-z0-9.]*)'.*
e substituindo pelo primeiro (e único) grupo correspondente.Você pode extrair o AndroidManifest.xml do APK, remover todos os bytes NULL, pular tudo até depois da string 'manifest' e, em seguida, encontrar um byte de comprimento seguido pelo nome do pacote (e o que vem depois). Para a tarefa difícil, uso a ótima ferramenta GEMA , portanto, o comando se parece com o seguinte:
7z e -so MyApp.apk AndroidManifest.xml | gema '\x00=' | gema -match 'manifest<U1><U>=@substring{0;@char-int{$1};$2}'
Obviamente, você pode usar qualquer outra ferramenta para fazer a filtragem.
Se você não tiver o SDK do Android instalado, como em alguns cenários de teste, poderá obter o nome do pacote usando o seguinte 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"
}
Testado em um mac. 'strings' e 'unzip' são padrão na maioria dos Linux, portanto, também devem funcionar no Linux.
Eu também tentei a coisa de descompilação, funciona, mas recentemente encontrei a maneira mais fácil:
Para usar isso em scripts em lote, é conveniente que o script retorne apenas o nome do pacote (por exemplo, para desinstalar um aplicativo quando você tiver o APK).
Aqui está o script que eu 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
Então você pode escrever:
desinstalação adb `./getPackageName.sh file.apk`
Para o Windows a seguir funcionou para mim:
:: // 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 os caminhos do adb, aapt, APKPath de acordo com os caminhos do adb, aapt e o local do apk no seu sistema.
Trabalhando:
%adb% install %apk%
instala o aplicativo se o dispositivo estiver conectado.%aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txt
busca o nome do pacote e alguns outros detalhes, como a versão etc. do apk, e é armazenado em um arquivo temp.txt no mesmo local que o apk.extracts the package name and assigns to
variável %% s pkgName`%adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1
inicia o aplicativo.Em essência, o código acima instala o apk a partir de um determinado local na área de trabalho "Desktop \ APK \ Instant_Instal \" no dispositivo e inicia o aplicativo.
Como não consegui encontrar o nome do pacote no arquivo .apk com o editor (como sugerido acima), verifiquei as funções no aplicativo "ES Datei Explorer" / "ES File Explorer" (versão gratuita) que eu já havia instalado. Nesta ferramenta, o nome do pacote é mostrado corretamente.
Como acho que um bom explorador de arquivos não deve faltar em um telefone, sugiro usar essa ferramenta (se você já instalou o apk em um celular e precisa saber o nome do pacote).
Como foi mencionado na documentação do Android que o AAPT foi descontinuado , obter o nome do pacote usando o comando AAPT2 no Linux é o seguinte:
./aapt2 dump packagename <path_to_apk>
Como estou usando uma versão mais antiga do Gradle build, tive que baixar uma versão mais recente do AAPT2, conforme mencionado aqui:
Faça o download do AAPT2 no Google Maven
Usando as ferramentas de compilação no meu sdk - 25.0.3, 26.0.1 e 27.0.3, a execução do comando aapt2 mostra um erro: Não é possível abrir 'packagename': Não existe esse arquivo ou diretório. Por isso, fui para as versões mais recentes do AAPT2.
Eu usei 3.3.0-5013011 para linux.
Você pode usar Analyze APK...
no menu Build no Android Studio; ele exibirá o nome do pacote na parte superior da nova janela.