Derlemenizi APK Analiz Aracı ile analiz etme

Android Studio, derleme işlemi tamamlandıktan sonra APK'nızın veya Android App Bundle'ınızın yapısı hakkında anında bilgi sağlayan bir APK Analiz Aracı içerir. APK Analiz Aracı'nı kullanmak, uygulamanızdaki DEX dosyaları ve kaynaklarıyla ilgili hataları ayıklamaya harcadığınız süreyi kısaltabilir ve APK boyutunu küçültmenize yardımcı olabilir. APK Analiz Aracı, apkanalyzer ile komut satırından da kullanılabilir.


APK Analiz Aracı ile şunları yapabilirsiniz:

  • Uygulamadaki DEX ve Android kaynak dosyaları gibi dosyaların mutlak ve göreli boyutunu görüntüleyin.
  • DEX dosyalarının bileşimini anlama.
  • Uygulamada, AndroidManifest.xml dosyası gibi dosyaların son sürümlerini hızlıca görüntüleyebilirsiniz.
  • İki APK veya uygulama paketinin yan yana karşılaştırmasını yapabilir.

Bir proje açıkken APK Analiz Aracı'na erişmenin üç yolu vardır:

  • Bir APK'yı veya uygulama paketini Android Studio'nun Düzenleyici penceresine sürükleyin.
  • Proje penceresinde Proje görünümüne geçin ve varsayılan build/output/apks/ dizininde APK'yı çift tıklayın.
  • Menü çubuğunda Oluştur > APK'yı analiz et'i ve ardından APK'nızı veya uygulama paketinizi seçin.

Dosya ve boyut bilgilerini görüntüleme

APK'lar, ZIP dosya biçimine uyan dosyalardır. APK Analiz Aracı, her bir dosyayı veya klasörü, klasörlerde gezinmek için genişletebileceğiniz bir varlık olarak görüntüler. Varlıkların hiyerarşisi, APK dosyasındaki dosyaların ve klasörlerin yapısını yansıtır.

APK Analiz Aracı, şekil 1'de gösterildiği gibi her bir varlık için sıkıştırılmış dosya boyutunu (veya "ham dosya boyutu") ve indirme dosya boyutu değerlerini gösterir. İşlenmemiş Dosya Boyutu, varlığın toplam APK boyutuna katkısını gösterir. İndirme Boyutu, varlığın Google Play tarafından yayınlanacak olan tahmini sıkıştırılmış boyutunu temsil eder. Toplam İndirme Boyutunun Yüzdesi, varlığın temsil ettiği APK'nın toplam indirme boyutunun yüzdesini gösterir.

Şekil 1. APK Analiz Aracı'ndaki dosya boyutları hakkında bilgi edinin.

AndroidManifest.xml dosyasını görüntüleyin

Projeniz, ürün çeşitleri gibi birden fazla AndroidManifest.xml dosyası veya manifest dosyası sağlayan kitaplıklar içeriyorsa bu dosyalar uygulamanızda tek bir dosya halinde birleştirilir. Bu manifest dosyası, normalde APK veya uygulama paketi içinde bulunan bir ikili program dosyasıdır, ancak APK Analiz Aracı'nda seçildiğinde bu varlığın XML biçimi yeniden oluşturulur ve sunulur.

Bu görüntüleyici, derleme sırasında uygulamanızda yapılmış olabilecek değişiklikleri anlamanıza yardımcı olur. Örneğin, uygulamanızın kullandığı bir kitaplıktaki AndroidManifest.xml dosyasının nihai AndroidManifest.xml dosyasıyla nasıl birleştirildiğini görebilirsiniz.

Ayrıca bu görüntüleyici bazı hata analizi özellikleri sunar. Uyarılar veya hatalar sağ üst köşede görünür. Şekil 2'de seçilen manifest dosyası için bildirilen bir hata gösterilmektedir.

Şekil 2. Seçilen manifest dosyası için sağ üst köşede bir hata simgesi görünür.

DEX dosyalarını görüntüle

APK Analiz Aracı'nın DEX dosyası görüntüleyicisi, uygulamanızdaki DEX dosyalarında bulunan temel bilgilere anında erişmenizi sağlar. Görüntüleyen, sınıf, paket, toplam referans ve bildirim sayılarını sağlar. Bunlar, multidex'i kullanıp kullanmayacağınıza veya 64.000 DEX sınırının altına inmek için bağımlılıkları nasıl kaldıracağınıza karar vermenize yardımcı olabilir.

Şekil 3'te 64K DEX sınırının altında olan orta boyutlu bir uygulama gösterilmektedir. DEX dosyasındaki her paket, sınıf ve yöntemin sayıları, Tanımlanan Yöntemler ve Referanslanan Yöntemler sütunlarında listelenir.

Referanslanan Yöntemler sütunu, DEX dosyasının başvuruda bulunduğu tüm yöntemleri sayar. Bu genellikle kodunuzda tanımlanan yöntemleri, bağımlılık kitaplıklarını ve kodun kullandığı standart Java ve Android paketlerinde tanımlanan yöntemleri içerir. Bunlar, her DEX dosyasında 64.000 yöntem sınırı için sayılan yöntemlerdir.

Tanımlanan Yöntemler sütunu yalnızca DEX dosyalarınızın birinde tanımlanan yöntemleri sayar. Bu nedenle bu sayı, Referans Verilen Yöntemler'in bir alt kümesidir.

Şekil 3. Orta boyutlu bir uygulama.

DEX dosya ağaç görünümünü filtreleme

Sınıf listesinin hemen üstünde, APK Analiz Aracı, Şekil 4'te gösterildiği gibi, seçilen DEX dosyasının içeriğini görüntülemek için filtreler sağlar.

Şekil 4. DEX filtreleri, BuildConfig için alanları ve yöntemleri görüntüleyecek şekilde ayarlandı.

Bir sınıftaki tüm yöntemleri ve alanları görüntülemek üzere filtreleri kullanmak için aşağıdakileri yapın:

  1. Dosya listesinden classes.dex dosyasını seçin.
  2. Sınıf listesinde, bir sınıfa gidin ve seçin.
  3. Seçtiğiniz sınıfı genişletin.
  4. Sınıf alanlarını göstermek veya gizlemek için Alanları göster ayarını açık duruma getirin.
  5. Sınıf yöntemlerini göstermek veya gizlemek için Yöntemleri göster özelliğini açın.
  6. Başvurulan paketleri, sınıfları, yöntemleri ve alanları göstermek veya gizlemek için Başvurulan tüm yöntemleri veya alanları göster ayarını açık duruma getirin.

    Ağaç görünümünde, italik düğümler seçilen DEX dosyasında bir tanımı olmayan referanslardır. DEX dosyası, farklı bir dosyada tanımlanan yöntemlere ve alanlara referans verebilir. Örneğin System.out.println(), Android çerçevesindeki println() yöntemine referanstır.

ProGuard eşlemelerini yükleme

Filtreleme simgelerinin yanında ProGuard eşleme simgeleri bulunur. Adların gizlemesini kaldırma (mapping.txt), kaldırılan düğümleri gösterme (usage.txt) ve kaldırılamayan düğümleri belirtme (seeds.txt) gibi işlevler sağlayan bir dizi ProGuard eşleme dosyası yüklenene kadar ProGuard simgeleri devre dışı kalır.

İçe aktardığınız ProGuard eşleme dosyası, kod küçültme özelliği etkin halde DEX dosyalarını oluşturan aynı derlemeden oluşmalıdır.

Şekil 5. ProGuard eşlemelerini yükleyin...

ProGuard eşleme dosyalarını yüklemek için aşağıdakileri yapın:

  1. ProGuard eşlemelerini yükle... seçeneğini tıklayın.
  2. Eşleme dosyalarını içeren proje klasörüne gidin ve tüm dosyaları, tüm dosya kombinasyonlarını veya dosyaları içeren klasörü yükleyin.

    Eşleme dosyaları normalde project/app/build/outputs/mappings/release/ konumundadır. Dosya seçici, bu proje yapısını algılarsa varsayılan olarak release klasörünü ayarlar.

    Dosya seçici öncelikle mapping.txt, seeds.txt ve usage.txt ile tam olarak eşleşen dosya adlarını kontrol eder. Ardından, dosya seçici başka bir yerde mapping, usage veya seeds metnini içeren ve .txt ile biten dosya adlarını kontrol eder. Örneğin, release-seeds-1.10.15.txt bir eşleşmedir.

Aşağıdaki listede eşleme dosyaları açıklanmaktadır:

  • seeds.txt: ProGuard yapılandırmasının daraltma sırasında kaldırılmasını engellediği düğümler kalın karakterlerle gösterilmiştir.
  • mapping.txt: R8 tarafından kodu karartılan düğümlerin orijinal adlarını geri yükleyebilmeniz için Adların gizlemesini kaldır özelliğini etkinleştirir. Örneğin, a, b, c gibi karartılmış düğüm adlarını MyClass, MainActivity ve myMethod() biçimine geri yükleyebilirsiniz.
  • usage.txt: Daraltma sırasında R8 tarafından kaldırılan sınıfları, yöntemleri ve alanları gösterebilmeniz için Kaldırılan düğümleri göster seçeneğini etkinleştirir. Geri yüklenen düğümler üstü çizili olarak gösterilir.

    Kodunuzu karartmak ve en aza indirmek amacıyla R8'i kullanma hakkında daha fazla bilgi için Uygulamanızı küçültme, gizleme ve optimize etme bölümüne bakın.

Bayt kodunu gösterme, kullanımları bulma ve Keep kuralı oluşturma

Sınıf liste görünümündeki düğümlerde bayt kodunu görmenize, kullanımları bulmanıza ve seçili düğüm için kopyalanıp yapıştırılacak ProGuard kurallarını gösteren bir iletişim kutusu görüntülemenize olanak tanıyan aşağıdaki seçenekleri içeren bir içerik menüsü bulunur. Sınıf liste görünümünde herhangi bir düğümü sağ tıklayarak içerik menüsünü görüntüleyin.

Bayt kodunu göster: Seçilen sınıf, yöntem veya alanın derlenmesini sağlar ve küçük bayt kodu gösterimini bir iletişim kutusunda aşağıdaki gibi görüntüler:

Şekil 6. init yöntemi için DEX bayt kodu.

Kullanımları bulma: Şekil 7'de gösterildiği gibi, DEX kodunun diğer hangi bölümlerinin seçili sınıfa veya yönteme referans verdiğini gösterir. seeds.txt yüklendiyse kalın harflerle gösterilen düğümler, ProGuard yapılandırmasının daraltma sırasında kaldırılmalarını önlediğini gösterir:

Şekil 7. MyClass ile ilgili referanslar.

ProGuard Keep kuralı oluştur: Şekil 8'de gösterildiği gibi kopyalayıp projenizin ProGuard yapılandırma dosyasına yapıştırabileceğiniz ProGuard kurallarını gösterir. Bu, belirli bir paketin, sınıfın, yöntemin veya alanın kod daraltma aşamasında kaldırılmasını önler. Daha fazla bilgi için Hangi kodun saklanacağını özelleştirme bölümüne bakın.

Şekil 8. İletişim kutusundan ProGuard yapılandırma dosyanıza kopyalayabileceğiniz ProGuard kuralları sağlar.

Kod ve kaynak varlıklarını görüntüle

Çeşitli derleme görevleri bir uygulamadaki nihai varlıkları değiştirir. Örneğin, ProGuard daraltma kuralları nihai kodunuzu değiştirebilir ve resim kaynakları, bir ürün türündeki kaynaklar tarafından geçersiz kılınabilir.

APK Analiz Aracı'nda dosyalarınızın son sürümünü görüntülemek için Şekil 9'da gösterildiği gibi metin veya resim varlığının önizlemesine tıklayın.

Şekil 9. Nihai resim kaynağının önizlemesi.

APK Analiz Aracı, çeşitli metin ve ikili dosyaları da görüntüleyebilir. Örneğin, resources.arsc varlık görüntüleyicisi, bir dize kaynağı için dil çevirileri gibi yapılandırmaya özgü değerleri görmenize olanak tanır. Şekil 10'da, her bir dize kaynağının çevirilerini görebilirsiniz.

Şekil 10. Çevrilmiş dize kaynaklarının önizlemesi.

Dosyaları karşılaştırma

APK Analiz Aracı, iki farklı APK veya uygulama paketi dosyasındaki varlıkların boyutunu karşılaştırabilir. Bu, uygulamanızın boyutunun önceki bir sürüme kıyasla neden arttığını anlamanız gerektiğinde faydalıdır.

Güncellenmiş bir uygulamayı yayınlamadan önce aşağıdakileri yapın:

  1. Yayınlamak üzere olduğunuz uygulamanın sürümünü APK Analiz Aracı'na yükleyin.
  2. APK Analiz Aracı'nın sağ üst köşesindeki Önceki APK ile karşılaştır...'ı tıklayın.
  3. Seçim iletişim kutusunda kullanıcılarınıza en son yayınlanan yapıyı bulun ve Tamam'ı tıklayın.

    Güncellemenin kullanıcılar üzerindeki etkisini değerlendirmenize yardımcı olmak için Şekil 11'dekine benzer bir iletişim kutusu görünür.

Şekil 11'de, belirli bir uygulamanın hata ayıklama ve sürüm derlemeleri arasındaki fark gösterilmektedir. Bu derleme türleri arasında farklı derleme seçenekleri kullanılır ve bu da temel varlıkları farklı şekilde değiştirir.

Şekil 11. Hata ayıklama ile APK yayınlama arasındaki fark.