apkanalyzer

APK Analiz Aracı'nın komut satırı sürümü, derleme işlemi tamamlandıktan sonra APK'nızın yapısı hakkında anında bilgi sağlar ve iki APK arasındaki farkları karşılaştırabilmenizi sağlar. APK Analiz Aracı'nı kullanmak, uygulamanızdaki DEX dosyaları ve kaynaklarıyla ilgili hataları ayıklamak için harcadığınız süreyi kısaltır ve APK'nızın boyutunu küçültür.

apkanalyzer, android_sdk/cmdline-tools/version/bin/apkanalyzer adresindeki Android SDK Komut Satırı Araçları paketine dahildir. Alternatif olarak, Derlemenizi APK Analiz Aracı ile analiz etme bölümünde açıklandığı gibi, Android Studio'dan APK Analiz Aracı'na da erişebilirsiniz.

Sözdizimi

apkanalyzer için söz dizimi şöyledir:

apkanalyzer [global-options] subject verb [options] apk-file [apk-file2]

subject, sorgulamak istediğiniz öğedir ve APK'nın tamamı veya APK'nın bir parçası olabilir. Konu, aşağıdakilerden herhangi biri olabilir:

  • apk: Uygulama kimliği, sürüm kodu ve sürüm adı gibi APK dosyası özelliklerini analiz edin.
  • files: APK dosyasındaki dosyaları analiz edin.
  • manifest: APK dosyasındaki manifestin içeriğini analiz edin.
  • dex: APK dosyasındaki DEX dosyalarını analiz edin.
  • resources: Metin, resim ve dize kaynaklarını görüntüleme.

verb, konu hakkında bilmek istediğiniz şeydir. Özneler, fiiller ve seçenekleri, aşağıdaki komutlar bölümünde açıklanmıştır.

Her komut, bir APK dosyası belirtmenizi gerektirir. Yalnızca apk compare komutu için ikinci bir APK belirtmeniz gerekir.

Seçenek açık olduğu sürece her seçeneği kısaltabilirsiniz. Örneğin, --human-readable genel seçeneği -h şeklinde kısaltılabilir.

Aşağıdaki örnekte, file-size (fiil) elde etmek için apk (konu) analiz edilir ve ardından dosya boyutu kullanıcılar tarafından okunabilir bir biçimde (-h seçeneği) yazdırılır:

apkanalyzer -h apk file-size myapk.apk

Komutlar

Aşağıdaki komut açıklamaları konuya göre düzenlenmiş ve her konu için mevcut fiil ve seçenek kombinasyonları sıralanmıştır:

APK dosyası özelliklerini görüntüleme Açıklama
apk summary apk-file Uygulama kimliğini, sürüm kodunu ve sürüm adını yazdırır.

Örnek çıkış:

com.myapp 5 1.1-beta

apk file-size apk-file APK'nın toplam dosya boyutunu yazdırır.
apk download-size apk-file APK'nın indirme boyutuna ilişkin bir tahmin yazdırır.
apk features [--not-required] apk-file APK tarafından kullanılan ve Play Store filtrelemesini tetikleyen özellikleri yazdırır. Gerekli değil olarak işaretlenen özellikleri çıkışa dahil etmek için --not-required seçeneğini ekleyin.

Örnek çıkış:

android.hardware.type.watch
android.hardware.microphone implied:
    requested android.permission.RECORD_AUDIO permission

apk compare [options] apk-file apk-file2 apk-file ve apk-file2 boyutlarını karşılaştırır. Aşağıdaki seçenekleri ekleyebilirsiniz:
  • --different-only: Dizinleri ve dosyaları farklı şekilde yazdırır.
  • --files-only: Dizin girişlerini yazdırmaz.
  • --patch-size: İşlenmemiş fark yerine dosya bazında yama tahminini gösterir.

Örnek çıkış (eski boyut / yeni boyut / boyut farkı / yol):

39086736 48855615 9768879 /
10678448 11039232 360784 /classes.dex
18968956 18968956 0 /lib/
110576 110100 -476 /AndroidManifest.xml
...

APK dosya sistemini görüntüleme Açıklama
files list apk-file APK'daki tüm dosyaları listeler.

Örnek çıkış:

/
/classes2.dex
/classes.dex
/assets/
/assets/asset.data
/AndroidManifest.xml
/resources.arsc
/res/
...

files cat --file path apk-file Dosya içeriğini yazdırır. --file path seçeneğini kullanarak APK içinde bir yol belirtmeniz gerekir (ör. --file /AndroidManifest.xml)
Manifest'teki bilgileri görüntüleyin Açıklama
manifest print apk-file APK manifest dosyasını XML biçiminde yazdırır.
manifest application-id apk-file Uygulama kimliği değerini yazdırır.
manifest version-name apk-file Sürüm adı değerini yazdırır.
manifest version-code apk-file Sürüm kodu değerini yazdırır.
manifest min-sdk apk-file Minimum SDK sürümünü yazdırır.
manifest target-sdk apk-file Hedef SDK sürümünü yazdırır.
manifest permissions apk-file İzin listesini yazdırır.
manifest debuggable apk-file Uygulamanın hata ayıklamaya uygun olup olmadığını yazdırır.
DEX dosyası bilgilerine erişim Açıklama
dex list apk-file APK'daki DEX dosyalarının listesini yazdırır.
dex references [--files path] [--files path2] apk-file Belirtilen DEX dosyalarındaki yöntem başvurularının sayısını yazdırır. Varsayılan tüm DEX dosyalarıdır. Dahil etmek istediğiniz belirli dosyaları belirtmek için --files seçeneğini ekleyin.

Örnek çıkış:

classes.dex 59598
classes2.dex 8042

dex packages [option1 option2 ...] apk-file Sınıf ağacını DEX'ten yazdırır. Çıkışta P, C, M ve F sırasıyla paketleri, sınıfları, yöntemleri ve alanları gösterir. x, k, r ve d ise sırasıyla kaldırıldı, tutuldu, referans ve tanımlanan düğümleri belirtir.

Sonucu hassaslaştırmak için aşağıdaki seçenekleri ekleyin:

  • --defined-only: Yalnızca çıkışta APK'da tanımlanan sınıfları içerir.
  • --files: Dahil edilecek DEX dosyası adlarını belirtir. Varsayılan: tüm DEX dosyaları.
  • --proguard-folder file: Eşlemelerin aranacağı ProGuard çıkış klasörünü belirtir.
  • --proguard-mappings file: ProGuard eşleme dosyasını belirtir.
  • --proguard-seeds file: ProGuard tohum dosyasını belirtir.
  • --proguard-usages file: ProGuard kullanımları dosyasını belirtir.
  • --show-removed: ProGuard tarafından kaldırılan sınıf ve üyeleri gösterir.

Örnek çıkış (tür/durum/tanımlanmış yöntemler/başvurulan yöntemler/bayt boyutu/ad):

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] Bir sınıfın veya yöntemin bayt kodunu smali biçiminde yazdırır. Sınıf adı gereklidir ve derlemeyi çözmek için tam nitelikli sınıf adını yazdırır. Derlemenin ayrıştırılacağı yöntemi belirtmek için --method seçeneğini ekleyin.

Hata ayıklama yönteminin biçimi name(params)returnType şeklindedir (örneğin, someMethod(Ljava/lang/String;I)V).

res/ ve Resources.arsc'de depolanan kaynakları görüntüleyin Açıklama
resources packages Kaynaklar tablosunda tanımlanan paketlerin bir listesini yazdırır.
resources configs --type type [--package package] apk-file Belirtilen type için yapılandırma listesini yazdırır. type, string gibi bir kaynak türüdür. Kaynak tablosu paket adını belirtmek istiyorsanız --package seçeneğini ekleyin. Aksi takdirde ilk tanımlanan paket kullanılır.
resources value --config config --name name --type type [--package package] apk-file config, name ve type tarafından belirtilen kaynağın değerini yazdırır. type seçeneği, string gibi kaynak türüdür.

Kaynak tablosu paket adını belirtmek istiyorsanız --package seçeneğini ekleyin. Aksi takdirde ilk tanımlanan paket kullanılır.

resources names --config config --type type [--package package] apk-file Bir yapılandırma ve tür için kaynak adlarının listesini yazdırır. type seçeneği, string gibi kaynak türüdür. Kaynak tablosu paket adını belirtmek istiyorsanız --package seçeneğini ekleyin. Aksi takdirde ilk tanımlanan paket kullanılır.
resources xml --file path apk-file İkili XML dosyasının kullanıcılar tarafından okunabilen biçimini yazdırır. Dosyanın yolunu belirtmek için file seçeneğini ekleyin.