analizator apk

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:

Wyświetlanie atrybutów pliku APK 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:
  • --different-only: drukuje katalogi i pliki z różnicami.
  • --files-only: nie drukuje wpisów katalogu.
  • --patch-size: pokazuje szacunkową liczbę poprawek dla poszczególnych plików, a nie samą różnicę.

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:

  • --defined-only: uwzględnia w danych wyjściowych tylko klasy zdefiniowane w pliku APK.
  • --files: określa nazwy plików DEX do uwzględnienia. Domyślnie: wszystkie pliki DEX.
  • --proguard-folder file: określa folder wyjściowy Proguard, w którym ma być szukane mapowania.
  • --proguard-mappings file: określa plik mapowań ProGuard.
  • --proguard-seeds file: określa plik nasion Proguard.
  • --proguard-usages file: określa plik przypadków użycia Proguard.
  • --show-removed: pokazuje zajęcia i członków, którzy zostali usunięci przez Proguard.

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 name(params)returnType, np. someMethod(Ljava/lang/String;I)V.

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ę --package, jeśli chcesz określić nazwę pakietu tabeli zasobów. W przeciwnym razie zostanie użyty pierwszy zdefiniowany pakiet.

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.