Android Studio, derleme işlemi tamamlandıktan sonra APK'nızın veya Android App Bundle'ınızın yapısıyla ilgili 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ıklamak için harcadığınız süreyi kısaltabilir ve APK boyutunu küçültmenize yardımcı olabilir. APK Analiz Aracı'na apkanalyzer
ile komut satırından da ulaşabilirsiniz.
APK Analiz Aracı ile şunları yapabilirsiniz:
- Uygulamadaki DEX ve Android kaynak dosyaları gibi dosyaların mutlak ve göreli boyutunu görüntüleme.
- DEX dosyalarının yapısını anlayın.
- Uygulamadaki dosyaların (ör.
AndroidManifest.xml
dosyası) son sürümlerini hızlıca görüntüleyebilirsiniz. - İki APK veya uygulama paketini yan yana karşılaştırın.
Bir proje açıkken APK Analiz Aracı'na erişmenin üç yolu vardır:
- Bir APK 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 seçin, 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 ham dosya boyutunu ve indirme dosyası boyutu değerlerini gösterir. Raw File Size (Ham Dosya Boyutu) diskteki varlığın sıkıştırılmamış boyutunu temsil eder. İndirme Boyutu, varlığın Google Play tarafından teslim edileceği şekilde tahmini sıkıştırılmış boyutunu temsil eder. Toplam İndirme Boyutunun Yüzdesi, APK'nın temsil ettiği toplam indirme boyutunun yüzdesini belirtir.
AndroidManifest.xml dosyasını görüntüleyin
Projeniz ürün çeşitleri gibi birden fazla AndroidManifest.xml
dosyası içeriyorsa veya manifest dosyası sağlayan kitaplıklar içeriyorsa bunlar uygulamanızda tek bir dosya halinde birleştirilir. Bu manifest dosyası, normalde APK veya uygulama paketi içindeki bir ikili dosyadı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ığı kitaplıktaki AndroidManifest.xml
dosyasının son 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.
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. Bu bilgiler, multidex'in kullanılıp kullanılmayacağına veya 64K DEX sınırının altına inmek için bağımlılıkların nasıl kaldırılacağına 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ı içindeki her paket, sınıf ve yöntemin sayıları, Tanımlanan Yöntemler ve Referans Verilen Yöntemler sütunlarında listelenir.
Referans Yöntemler sütunu, DEX dosyasının atıfta bulunduğu tüm yöntemleri sayar. Buna genellikle kodunuzda tanımlanan yöntemler, bağımlılık kitaplıkları ve kodun kullandığı standart Java ve Android paketlerinde tanımlanan yöntemler dahildir. Bunlar, her DEX dosyasında 64K yöntem sınırı için sayılan yöntemlerdir.
Tanımlanan Yöntemler sütunu yalnızca DEX dosyalarınızdan birinde tanımlanan yöntemleri sayar. Bu nedenle bu sayı, Referans Verilen Yöntemler'in bir alt kümesidir.
DEX dosyası ağaç görünümünü filtreleme
Sınıf listesinin hemen üzerindeki 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.
Filtreleri bir sınıftaki tüm yöntemleri ve alanları görüntülemek üzere kullanmak için aşağıdakileri yapın:
- Dosya listesinden
classes.dex
dosyasını seçin. - Sınıf listesinde, bir sınıfa gidin ve seçin.
- Seçtiğiniz sınıfı genişletin.
- Sınıf alanlarını göstermek veya gizlemek için Alanları göster ayarını açık duruma getirin.
- Sınıf yöntemlerini göstermek veya gizlemek için Yöntemleri göster ayarını açık duruma getirin.
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 tanımı olmayan referanslardır. Bir DEX dosyası, farklı bir dosyada tanımlanan yöntemlere ve alanlara referans verebilir. Örneğin
System.out.println()
, Android çerçevesindekiprintln()
yöntemine referanstır.
ProGuard eşlemelerini yükle
Filtreleme simgelerinin yanında ProGuard eşleme simgeleri bulunur. Adların kod kararmasını gösterme (mapping.txt
), kaldırılan düğümleri (usage.txt
) ve kaldırılamayan düğümleri (seeds.txt
) belirtme 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 daraltma özelliğini etkinleştirerek DEX dosyalarını oluşturan aynı derlemeden oluşmalıdır.
ProGuard eşleme dosyalarını yüklemek için aşağıdakileri yapın:
- Load ProGuard eşlemes... (ProGuard eşlemelerini yükle...) seçeneğini tıklayın.
Eşleme dosyalarını içeren proje klasörüne gidin ve tüm dosyaları, 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 sürüm klasörünü açar.Dosya seçici öncelikle
mapping.txt
,seeds.txt
veusage.txt
ile tam olarak eşleşen dosya adlarını kontrol eder. Ardından, dosya seçici bir yerdemapping
,usage
veyaseeds
metnini içeren ve.txt
ile biten dosya adlarını kontrol eder. Örneğin,release-seeds-1.10.15.txt
bir eşlemedir.
Eşleme dosyaları aşağıdaki listede açıklanmıştır:
seeds.txt
: ProGuard yapılandırmasının daraltma sırasında kaldırılmasını önlediği düğümler kalın karakterlerle gösterilmiştir.mapping.txt
: R8 tarafından kod karartılan düğümlerin orijinal adlarını geri yükleyebilmeniz için Adların kod kararmasını göster özelliğini etkinleştirir. Örneğin,a
,b
,c
gibi karartılmış düğüm adlarınıMyClass
,MainActivity
vemyMethod()
konumuna geri yükleyebilirsiniz.usage.txt
: Kaldırılan düğümleri göster seçeneğini etkinleştirir. Böylece küçültme sırasında R8 tarafından kaldırılan sınıf, yöntem ve alanları gösterebilirsiniz. Geri yüklenen düğümler üstü çizili olarak gösterilir.Kodunuzu karartmak ve simge durumuna küçültmek için R8'i kullanma hakkında daha fazla bilgi edinmek üzere Uygulamanızı küçültme, gizleme ve optimize etme konusunu inceleyin.
Bayt kodunu gösterin, kullanımları bulun ve Keep kuralını oluşturun
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 kopyalayı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öntemi veya alanı çözer ve smali bayt kodu gösterimini bir iletişim kutusunda aşağıdaki gibi görüntüler:
Kullanımları bulma: DEX kodunun diğer hangi bölümlerinin seçili sınıfa veya yönteme referans içerdiğini Şekil 7'de gösterildiği gibi gösterir.
seeds.txt
yüklüyse kalın yazı tipiyle gösterilen düğümler, ProGuard yapılandırmasının küçültme sırasında kaldırılmalarını önlediğini gösterir:
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 başlıklı makaleyi inceleyin.
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ı ü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 önizlemesi için ilgili varlığı tıklayın.
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.
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 önceki bir sürüme kıyasla neden büyüdüğünü anlamanız gerektiğinde faydalıdır.
Güncellenmiş bir uygulamayı yayınlamadan önce aşağıdakileri yapın:
- Yayınlamak üzere olduğunuz uygulamanın sürümünü APK Analiz Aracı'na yükleyin.
- APK Analiz Aracı'nın sağ üst köşesindeki Önceki APK ile karşılaştır...'ı tıklayın.
Seçim iletişim kutusunda kullanıcılarınıza en son yayınlanan yapıyı bulun ve Tamam'ı tıklayın.
Şekil 11'dekine benzer bir iletişim kutusu, güncellemenin kullanıcılar üzerindeki olası etkisini değerlendirmenize yardımcı olacaktır.
Şekil 11'de, belirli bir uygulamanın hata ayıklama ile sürüm derlemeleri arasındaki fark gösterilmektedir. Bu derleme türleri arasında farklı derleme seçenekleri kullanılır ve bu durum, temel varlıkları farklı şekilde değiştirir.