Leggi il nome del pacchetto di un APK Android


200

Devo ottenere il nome del pacchetto di un APK Android. Ho provato a decomprimere l'APK e leggere il contenuto diAndroidManifest.xml , ma sembra che non sia un file di testo.

Come posso estrarre il nome del pacchetto dell'APK?

Risposte:


320
aapt dump badging <path-to-apk> | grep package:\ name

1
C'è un modo per chiamarlo dal codice Android? Voglio essere in grado di lanciare un pacchetto di un apk che scarico attraverso la mia app.
Matt Wear,

7
badge di scarico appt <percorso-apk> | pacchetto grep: \ name
herbertD

2
@Campiador puoi semplicemente digitare fino alla pipe |, premere invio e quindi cercare nell'output il parametro desiderato. Ricorda solo che aaptdeve essere sulla tua strada
Patrick

Vedi la mia risposta di seguito se è necessario ottenerlo a livello di codice (per uno script).
Bruno Bronosky,

15
aaptil 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>
equiman,

75

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.

Tratto da Trova il nome del pacchetto per le app Android per utilizzare Intent per avviare l'app Market dal Web


1
Inoltre, dovrai assicurarti di eseguire privilegi elevati. Fondamentalmente, nel terminale, utilizzare suprima il comando.
Palswim,

4
per cercare il nome specifico del pacchettopm list packages -f | grep term-to-search-for
Patrick Favre

14

Basato sulla risposta di @hackbod ... ma relativo a Windows.

aaptil 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 dumpcomando secondario di aaptviene 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: nameinformazioni, usafindstr

aapt dump badging <path-to-apk> | findstr -n "package: name" | findstr "1:"

Spero che aiuti altri utenti di Windows!


13

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.yaumil nome del pacchetto

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

12

Se apri AndroidManifest.xml usando MS Notepad, cerca la frase packagee 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.


Ciò è particolarmente utile se il codice per l'app è su github! Molto più facile degli altri metodi, grazie!
sarink,

1
Ho decompresso l'APK, ma AndroidManifest.xml era un file binario. Strano ma vero.
Phatmann,

12

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

Non combinare mai grep e sed con awk. Usare awk è abbastanza.
Bruno Bronosky,

8

Una risposta programmatica

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ù)

Requisiti

aapt- Android Asset Packaging Tool, parte del download di SDK Tools

Soluzione 1

Utilizzando awkspecificare '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.

Soluzione 2

Utilizzando awkspecificare "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.

Soluzione 3

Espandi il file apk con apktool de 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 dposto di un semplice unzipdovrebbe fare questo per te, ma non lo fa.) Commenta se hai una soluzione a questo problema


1
Grazie per aver dato più informazioni da capire piuttosto che dare una sola riga di comando da copiare.
Ali Zeynali,

4

Una soluzione semplice sarebbe Open Android Studio -> Build -> Analizza Apk ... sfoglia e seleziona l'APK ora puoi trovare il nome del pacchetto e praticamente puoi leggere.


2

Se vuoi solo sapere il nome del pacchetto, esegui adb logcat, avvia l'attività che desideri, otterrai un suggerimento sul nome del pacchetto.


2

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"


Il nome del gruppo di pacchetti è solo per coincidenza lo stesso del nome del pacchetto in alcune app. Se lo fai, devi davvero utilizzare il A:package="com.example.appname"nella Android Manifest:sezioneaapt list -a
Bruno Bronosky,


2

Un metodo molto semplice è usare apkanalyzer.

apkanalyzer manifest application-id "${_path_to_apk}"

1

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:

  1. AAPT estrae le informazioni APK
  2. Grep "pacchetto" per mantenere solo la riga relativa alle informazioni sul pacchetto
  3. Fai in modo che sed sostituisca l'intera riga con il nome del pacchetto usando solo la seguente regex: package: name='([a-z0-9.]*)'.*e sostituendo con il primo (e unico) gruppo corrispondente.

1

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.


1

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.


0

puoi installare Package_Name_Viewer.apk sul tuo emulatore e successivamente puoi vedere il nome del pacchetto di tutte le app installate sul tuo emulatore.


0

Ho anche provato la de-compilation, funziona ma recentemente ho trovato il modo più semplice:

  1. Scarica e installa Appium dal sito Web Appium

  2. 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à.


0

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

disponibile su gist

Quindi potresti scrivere:

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


0

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:

  • Qui ho aggiunto l'apk in una cartella sul desktop "\ Desktop \ APK \ Instant_Instal \".
  • Il comando %adb% install %apk% installa l'applicazione se il dispositivo è collegato.
  • Questo %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.
  • FOR / F "token = 2 delims = '" %% s IN (temp.txt) SET SET pkgName = %% sextracts the package name and assigns to pkgName` variabile
  • Finalmente %adb% shell monkey -p %pkgName% -c android.intent.category.LAUNCHER 1avvia 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.


0

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).


0

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:

Scarica AAPT2 da Google Maven

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.


0

È possibile utilizzare Analyze APK...dal menu Genera in Android Studio, verrà visualizzato il nome del pacchetto nella parte superiore della nuova finestra.


-1

aapt list -a "path_to_apk"

Ti consiglio di salvarlo in un .txt, perché può essere molto lungo. Così:

aapt list -a "path_to_apk"> file.txt

Quindi vedere il file.txt nella directory corrente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.