Wersja Analizatora plików APK dostępna w wierszu poleceń zapewnia natychmiastowy wgląd w strukturę pliku APK po zakończeniu procesu kompilacji i umożliwia porównywanie różnic między dwoma plikami APK. Narzędzie do analizowania plików APK skraca czas potrzebny na debugowanie problemów z plikami i zasobami DEX w aplikacji oraz zmniejsza rozmiar pliku APK.
apkanalyzer
znajdziesz w pakiecie narzędzi wiersza poleceń pakietu Android SDK na stronie android_sdk/cmdline-tools/version/bin/apkanalyzer
.
Możesz też skorzystać z narzędzia do Analizatora plików APK w Android Studio. Instrukcje znajdziesz w artykule Analizowanie kompilacji za pomocą Analizatora plików APK.
Składnia
Składnia instrukcji apkanalyzer
to:
apkanalyzer [global-options] subject verb [options] apk-file [apk-file2]
Zapytanie subject
może być całym plikiem APK lub jego częścią. Tematem może być:
apk
: analizowanie atrybutów plików APK, takich jak identyfikator aplikacji, kod wersji i nazwa wersji.files
: analiza plików w pliku APK.manifest
: przeanalizuj zawartość pliku manifestu w pliku APK.dex
: przeanalizuj pliki DEX w pliku APK.resources
: umożliwia wyświetlanie zasobów tekstowych, graficznych i ciągów tekstowych.
verb
to wszystko, co chcesz wiedzieć na dany temat. Tematy, czasowniki i ich opcje zostały opisane w sekcji polecenia.
Każde polecenie wymaga określenia pliku APK. Tylko polecenie apk compare
wymaga określenia drugiego pakietu APK.
Możesz skrócić każdą opcję, o ile opcja jest jednoznaczna. Na przykład opcję globalną --human-readable
można skrócić do -h
.
W tym przykładzie analizujemy obiekt apk
(temat), aby uzyskać jego file-size
(czasownik), a następnie wyświetlam rozmiar pliku w formacie zrozumiałym dla człowieka (opcja -h
):
apkanalyzer -h apk file-size myapk.apk
Polecenia
Poniższe opisy poleceń są uporządkowane według tematu i zawierają listę dostępnych kombinacji czasowników oraz opcji w przypadku poszczególnych tematów:
|
Opis |
---|---|
apk summary apk-file
|
Drukuje identyfikator aplikacji, kod wersji i nazwę wersji.
Przykładowe dane wyjściowe: com.myapp 5 1.1-beta |
apk file-size apk-file
|
Drukuje całkowity rozmiar pliku APK. |
apk download-size apk-file
|
Drukuje szacunkowy rozmiar pobieranego pliku APK. |
apk features [--not-required] apk-file
|
Wyświetla funkcje używane przez plik APK, które uruchamiają filtrowanie w Sklepie Play
. Dodaj opcję --not-required , aby uwzględnić w danych wyjściowych cechy oznaczone jako niewymagane.
Przykładowe dane wyjściowe: android.hardware.type.watch android.hardware.microphone implied: requested android.permission.RECORD_AUDIO permission |
apk compare [options] apk-file
apk-file2
|
Porównuje rozmiary elementów apk-file i apk-file2 .
Możesz dołączyć te opcje:
Przykładowe dane wyjściowe (stary rozmiar / nowy rozmiar / różnica rozmiaru / ścieżka): 39086736 48855615 9768879 / 10678448 11039232 360784 /classes.dex 18968956 18968956 0 /lib/ 110576 110100 -476 /AndroidManifest.xml ... |
Wyświetlanie systemu plików APK | Opis |
files list apk-file
|
Wyświetla listę wszystkich plików w pakiecie APK.
Przykładowe dane wyjściowe: / /classes2.dex /classes.dex /assets/ /assets/asset.data /AndroidManifest.xml /resources.arsc /res/ ... |
files cat --file path apk-file
|
Wydrukuje zawartość pliku. Musisz określić ścieżkę wewnątrz pliku APK za pomocą opcji --file path , np. --file
/AndroidManifest.xml
|
Wyświetl informacje w pliku manifestu | Opis |
manifest print apk-file
|
Drukuje plik manifestu pakietu APK w formacie XML. |
manifest application-id apk-file
|
Drukuje wartość identyfikatora aplikacji. |
manifest version-name apk-file
|
Drukuje wartość nazwy wersji. |
manifest version-code apk-file
|
Drukuje wartość kodu wersji. |
manifest min-sdk apk-file
| Drukuje minimalną wersję pakietu SDK. |
manifest target-sdk apk-file
|
Drukuje docelową wersję pakietu SDK. |
manifest permissions apk-file
|
Drukuje listę uprawnień. |
manifest debuggable apk-file
|
Wskazuje, czy aplikację można debugować. |
Dostęp do informacji o pliku DEX | Opis |
dex list apk-file
|
Drukuje listę plików DEX w pakiecie APK. |
dex references [--files path] [--files path2]
apk-file
|
Drukuje liczbę odwołań do metod w określonych plikach DEX.
Domyślnie wszystkie pliki DEX. Dodaj opcję --files , aby wskazać pliki, które chcesz uwzględnić.
Przykładowe dane wyjściowe: classes.dex 59598 classes2.dex 8042 |
dex packages [option1 option2 ...] apk-file
|
Drukuje drzewo zajęć z pliku DEX. W danych wyjściowych P , C , M i F wskazują odpowiednio pakiety, klasy, metody i pola. Z kolei x , k , r i d wskazują odpowiednio węzły usunięte, zachowane, do których odwołuje się i zdefiniowane.
Aby zawęzić wynik, dodaj te opcje:
Przykładowe dane wyjściowe (typ/stan/zdefiniowane metody/metody odniesienia /rozmiar bajtów/nazwa): P d 1 1 85 g P d 1 1 85 g.a C d 1 1 85 g.a.a M d 1 1 45 g.a.a java.lang.Object get() C r 0 1 40 byte[] M r 0 1 40 byte[] java.lang.Object clone() |
dex code --class class [--method method]
|
Drukuje kod bajtowy klasy lub metody w formacie smali. Nazwa klasy jest wymagana. Wyświetla w pełni kwalifikowaną nazwę klasy do dekompilowania. Dodaj opcję --method , aby określić metodę dekompilowania.
Format dekompilowania metody to |
Wyświetl zasoby przechowywane w res/ i resource.arsc | Opis |
resources packages
|
Drukuje listę pakietów zdefiniowanych w tabeli zasobów. |
resources configs --type type [--package package] apk-file
|
Drukuje listę konfiguracji usługi type .
type to typ zasobu, taki jak string .
Dodaj opcję --package , jeśli chcesz określić nazwę pakietu tabeli zasobów. W przeciwnym razie zostanie użyty pierwszy zdefiniowany pakiet.
|
resources value --config config --name name
--type type [--package package] apk-file
|
Drukuje wartość zasobu określonego przez config , name i type . Opcja type określa typ zasobu, na przykład string .
Dodaj opcję |
resources names --config config --type type
[--package package] apk-file
|
Drukuje listę nazw zasobów dla konfiguracji i typu. Opcja type określa typ zasobu, na przykład string .
Dodaj opcję --package , jeśli chcesz określić nazwę pakietu tabeli zasobów. W przeciwnym razie zostanie użyty pierwszy zdefiniowany pakiet.
|
resources xml --file path apk-file
|
Drukuje zrozumiałą dla człowieka postać binarnego pliku XML.
Dodaj opcję file , aby określić ścieżkę do pliku.
|