Risposte:
aapt dump badging <path-to-apk> | grep package:\ name
|
, premere invio e quindi cercare nell'output il parametro desiderato. Ricorda solo che aapt
deve essere sulla tua strada
aapt
il comando si trova sotto Android\SDK\build-tools\version
. il comando su windows può essere aapt dump badging <path-to-apk> | findstr -i "package: name"
oaapt dump badging <path-to-apk>
Quindi puoi installare l'apk sul tuo telefono
connettiti usando adb, puoi avviare la shell adb ed eseguire pm list pacchetti -f, che mostra il nome del pacchetto per ogni apk installato.
su
prima il comando.
pm list packages -f | grep term-to-search-for
Basato sulla risposta di @hackbod ... ma relativo a Windows.
aapt
il comando si trova su Android\SDK\build-tools\version
. Se hai bisogno di maggiori informazioni su ciò che è appt command
(Android Asset Packaging Tool) leggi questo https://stackoverflow.com/a/28234956/812915
Il dump
comando secondario di aapt
viene utilizzato per visualizzare i valori di singoli elementi o parti di un pacchetto:
aapt dump badging <path-to-apk>
Se vuoi vedere solo la riga con le package: name
informazioni, usafindstr
aapt dump badging <path-to-apk> | findstr -n "package: name" | findstr "1:"
Spero che aiuti altri utenti di Windows!
Se stai guardando google play e vuoi conoscere il nome del suo pacchetto, puoi guardare l'URL o la barra degli indirizzi. Otterrai il nome del pacchetto. Ecco com.landshark.yaum
il nome del pacchetto
https://play.google.com/store/apps/details?id=com.landshark.yaum&feature=search_result#?t=W251bGwsMSwyLDEsImNvbS5sYW5kc2hhcmsueWF1bSJd
Se apri AndroidManifest.xml usando MS Notepad, cerca la frase package
e troverai quanto segue:
package manifest $xxx.xxxxxxx.xxxxxxx |
dove xxx.xxxxxxx.xxxxxxx è il nome del pacchetto, scritto con uno spazio dopo ogni carattere.
È utile quando non hai strumenti specifici installati.
Il seguente script bash mostrerà il nome del pacchetto e il nome dell'attività 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"
eseguilo in questo modo:
apk_package.sh /path/to/my.apk
Se hai bisogno di farlo a livello di codice, è un po 'più coinvolto che ottenere la risposta nel tuo cervello. Ho uno script che uso per firmare tutte le nostre app, ma ognuna usa una chiave diversa. Ecco 2 modi per ottenere solo il nome del pacchetto come output in modo da poterlo inserire in una variabile o fare tutto ciò di cui hai bisogno.
Esempio di output: com.example.appname
(e niente di più)
aapt
- Android Asset Packaging Tool, parte del download di SDK Tools
Utilizzando awk
specificare '
come separatore di campo, cercare una riga con package: name=
e stampare solo il secondo "campo" nella riga:
aapt dump badging /path/to/file.apk | awk -v FS="'" '/package: name=/{print $2}'
Un punto debole di questo metodo è che si basa su aapt per generare i campi delle informazioni sul pacchetto nello stesso ordine:
package: name='com.example.appname' versionCode='3461' versionName='2.2.4' platformBuildVersionName='4.2.2-1425461'
Non abbiamo impegni da parte degli sviluppatori per mantenere questo formato.
Utilizzando awk
specificare "
come separatore di campo, cercare una riga con package=
e stampare solo il secondo "campo" nella riga:
aapt list -a /path/to/file.apk | awk -v FS='"' '/package=/{print $2}'
Un punto debole di questo metodo è che si basa su aapt per l'output package=
solo nella Android Manifest:
sezione dell'output. Non abbiamo impegni da parte degli sviluppatori per mantenere questo formato.
Espandi il file apk con apktool d
e leggi AndroidManifest.xml.
Questo sarebbe il metodo migliore, ma AndroidManifest.xml è un file binario e tutte le risposte SO che vedo per convertirlo in testo non funzionano. (L'utilizzo al apktool d
posto di un semplice unzip
dovrebbe fare questo per te, ma non lo fa.) Commenta se hai una soluzione a questo problema
Un'altra soluzione è quella di utilizzare un elenco di aapt e utilizzare sed per analizzare ciò:
aapt list -a $PATH_TO_YOUR_APK | sed -n "/^Package Group[^s]/s/.*name=//p"
A:package="com.example.appname"
nella Android Manifest:
sezioneaapt list -a
C'è un modo molto semplice se hai già il tuo APK sul tuo smartphone. Basta usare una di queste APP:
Un metodo molto semplice è usare apkanalyzer.
apkanalyzer manifest application-id "${_path_to_apk}"
Penso che il modo migliore e più semplice per estrarre solo il nome del pacchetto in Linux sia
aapt dump badging <APK_path> | grep package | sed -r "s/package: name='([a-z0-9.]*)'.*/\1/"
Spiegazione:
package: name='([a-z0-9.]*)'.*
e sostituendo con il primo (e unico) gruppo corrispondente.Puoi estrarre AndroidManifest.xml dall'APK, rimuovere tutti i byte NULL, saltare tutto fino a dopo la stringa 'manifest', e quindi sei a un byte di lunghezza seguito dal nome del pacchetto (e da ciò che ne deriva). Per il difficile compito utilizzo l'ottimo strumento GEMA , quindi il comando è simile al seguente:
7z e -so MyApp.apk AndroidManifest.xml | gema '\x00=' | gema -match 'manifest<U1><U>=@substring{0;@char-int{$1};$2}'
Ovviamente, puoi utilizzare qualsiasi altro strumento per eseguire il filtro.
Se non hai Android SDK installato, come in alcuni scenari di test, puoi ottenere il nome del pacchetto usando il seguente metodo 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"
}
Testato su un mac. 'strings' e 'unzip' sono standard sulla maggior parte dei Linux, quindi dovrebbero funzionare anche su Linux.
Ho anche provato la de-compilation, funziona ma recentemente ho trovato il modo più semplice:
Scarica e installa Appium dal sito Web Appium
Apri Appium-> Impostazioni Android, scegli il file apk di destinazione. E poi ottieni tutto quello che vuoi, le informazioni sul pacchetto, le informazioni sull'attività.
Per utilizzarlo negli script batch è utile che lo script restituisca solo il nome del pacchetto (ad esempio per disinstallare un'app quando si dispone dell'APK).
Ecco lo script che 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
Quindi potresti scrivere:
adb disinstallare `./getPackageName.sh file.apk`
Per Windows seguire ha funzionato per me:
:: // 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
Modifica i percorsi di adb, aapt, APKPath in base ai percorsi di adb, aapt e alla posizione dell'apk nel tuo sistema.
Lavorando:
%adb% install %apk%
installa l'applicazione se il dispositivo è collegato.%aapt% dump badging %APKFullPath% | FIND "package: name=" > temp.txt
recupera il nome del pacchetto e alcuni altri dettagli come la versione ecc. Dell'apk e memorizza in un file temp.txt nella stessa posizione di quello dell'apk.extracts the package name and assigns to
pkgName` variabile%adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1
avvia l'app.In sostanza il codice sopra installa l'apk da una determinata posizione nel desktop "Desktop \ APK \ Instant_Instal \" sul dispositivo e avvia l'applicazione.
Poiché non sono stato in grado di trovare il nome del pacchetto nel file .apk con l'editor (come suggerito sopra), ho verificato le funzioni nell'app "ES Datei Explorer" / "ES File Explorer" (versione gratuita) che ho aveva già installato. In questo strumento, il nome del pacchetto viene mostrato correttamente.
Poiché penso che un buon esploratore di file non dovrebbe mancare su un telefono, suggerisco di usare questo strumento (se hai già installato l'apk su un cellulare e devi conoscere il nome del pacchetto).
Dal momento che è menzionato nella documentazione Android che AAPT è stato deprecato , ottenere il nome del pacchetto usando il comando AAPT2 in Linux è il seguente:
./aapt2 dump packagename <path_to_apk>
Dato che sto usando una versione precedente di Gradle build, ho dovuto scaricare una versione più recente di AAPT2 come indicato qui:
Usando gli strumenti di build in my sdk - 25.0.3, 26.0.1 e 27.0.3, l'esecuzione del comando aapt2 mostra un errore: Impossibile aprire "nomepacchetto": nessun file o directory. Ecco perché ho scelto le versioni più recenti di AAPT2.
Ho usato 3.3.0-5013011 per Linux.
È possibile utilizzare Analyze APK...
dal menu Genera in Android Studio, verrà visualizzato il nome del pacchetto nella parte superiore della nuova finestra.