Kod performansını ve ayar parametrelerini uzun zamandır okuyorum. Aslında, Android programları odak noktalarımızdan biri.
Önce bir çözüme ulaşmamıza yardımcı olan temel veya en önemli kavramları tanıtalım.
As Android Geliştirici ifade etti
modül bağımsız olarak oluşturulabilir, test edilebilir ve hata ayıklanabilir
Bu nedenle, Modüllerin kendi Gradle & Bağımlılıkları vardır ve bunu projede keşfedebilirsiniz Hierarchy Viewer
.
Nitekim, Modülerleştirme Bakım konusuna önem vermektedir . Performans Önemlidir aksine Modülerleştirmenin bu önemli etkisi vardır:
- Kalıtım Derinliğini Artırın
İşte bunu netleştirmek için çizdiğim bir diyagram. Gördüğünüz gibi, ayrık modül kullanırken, Yöntem A'yı çağırmak 2N micro secs
için N micro secs
ayrık modül olmadan karşılaştırılır .
Bu soru akla gelen Referanslı Yöntemler miras Derinliği ile ilgili ne sayar?
Cevap: Modülerleştirme kullanımı Referanslı Yöntemler'i artırmasına rağmen, aslında uygulama performansını etkilemez ve olası ana sorun, çoğu durumda cahil olan kalıtım derinliğidir .
Modülerleştirmede artan Referans Metodlarının her Modül Derecesi ve Bağımlılığına bağlı olduğunu vurguluyorum.
Uygulama modülerizasyonu başvurulan yöntem sayısını nasıl bu kadar yüksek bir şekilde artırabilir?
Etki APK analizörünün önemli olduğu koşullar
Ayrıca, küçültme ve kod küçültmenin her birinin, kaynak kod derlendikten sonra bir DEX dosyasının içeriğini de önemli ölçüde değiştirebileceğini unutmayın.
Yukarıdaki resmi açıklamaya ek olarak, etkisi APK analizörünün olduğu başka bir koşul eklemek istiyorum:
geliştirici modülerleştirme konusunda ne kadar deneyimlidir?
modülerleştirme, mimarinin (geliştirici) nerede mutfak ve nerede dinlenme odası ve nerede WC olması gerektiğini tanımladığı bir ev gibidir .
Mimari WC & Kitchen'ı birleştirmeye karar verirse ne olur? Evet bu bir felaket.
Bu, geliştirici çok deneyimli değilse modülerleştirme sırasında olabilir.
Ek bilgilere ek olarak OP sorularına cevap verme
Burada yorumlarda sorulan sorulara cevap veriyorum
Neden ayrı Gradle başvurulan yönteme eklenir? Ve ayrı bağımlılık için, nihai sonuç tek APK ise, o zaman 'app' ve özellik modülünde yinelenen bağımlılıkları başvurulan yöntem sayısına ekleyeceğini düşünmüyorum.
Modüller inşa edilebildiğinden, test edilebildiğinden ve hata ayıklanabildiğinden, kendi Gradle & Bağımlılıklarına sahip OLMALIDIR.
Çok modüllü projeye uyulurken, derleyici aşağıdakileri .dex
içeren çeşitli dosyalar oluşturur :
.dex
tümleşik bağımlılıklar için bir dosya
- modüller
.dex
s
bağımlılıklar .dex
dosya tüm modüllerin aşamaları bir entegre
Bir modül sınıfının nihai Referanslanan Mottod Sayısını nasıl etkilediğine bakalım ?!
orada 2 APK
Başvurulan Yöntemler sayımlarda aynı sonucu ancak farkla s.
Her ikisi de 1.7k
çok yüksek olan Referanslı Yöntemler Sayısında farklılığa sahip boş aktivitelerdir ve işlevselliğine bağlıdır. Temel fark Modülünün Gradle'sındadır .
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
}
Başka bir yapılandırılmış
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.2.0-alpha01'
implementation 'androidx.constraintlayout:constraintlayout:2.0.0-beta4'
}
Her ne kadar sadece boş aktiviteler olsa da Gradle'daki minimal bir fark 1.7k
Referanslanan Yöntem Sayımlarında farklılığa neden oldu .
Ve App Gradle
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation project(path: ':module')
}
büyük endişe neden bireysel olarak başvurulan yöntem sayısının eklenmesinin Apk Analyzer'da başvurulan toplam yöntem sayısından farklı olması?
Bu sadece IDE filtresi başka bir şey değil. Elbette, yalnızca bir .dex
dosya seçerseniz Referans Yöntem Sayısı her satırın TOPLA değerine eşittir Referanslanan Yöntem Sayıları, ancak .dex
dosyaları çoklu seçerseniz , Analizör tarafından tercih edilen Referanslardaki eşitlik nedeniyle TOPLA ve gerçek Sayı arasındaki farkı göreceksiniz filtreleyin.
ekran görüntülerinizde birden çok .dex
dosya seçtiniz ve ardından Analizör eşitliği filtrelendi.
projemizde merkezi versiyonlar kullanıyoruz. Farklı versiyon şansı yok. Öyleyse, özellik modüllerinde aynı / kesin bağımlılıklar ve sürümleri olsa bile, başvurulan yöntem sayısını artıracağını düşünüyor musunuz?
Teorik olarak gereken DEĞİL Başvurulan yöntem sayımlarını arttırmaktadır. ANCAK , açıkladığım gibi, Geliştirici Deneyimi nihai sonucu büyük ölçüde etkiler.
Team Analyzer , yayınlanmadan önce performans sorunlarını kontrol etmeli ve çözmelidir.
- koruma kuralları
- küçültülmüş ve küçültülmüş kaynaklar
- AndroidManifest.xml
- sınıf ayarları
Şimdi Geliştirici Deneyimi ve kod bakımının nihai sonucu nasıl etkilediğini açıklığa kavuşturmak istiyorum . APK'nız Merkezi Bağımlılıklar kullanıyorsa EVEN
Yukarıdaki örnekte, i'v artış 5.1k
Sayısı Başvurulan Yöntemler BİLE ben vardı Merkezi bağımlılıklar !!!!!
Nasıl mümkün olabilir ?
Cevap: ben sadece proje dizinine işe yaramaz ve gizli bir .jar
dosya ekledi libs
. gördüğünüz kadar kolay son sonucu etkiledim.
Gördüğünüz gibi Geliştirici Deneyimi nihai result.as bir sonuç etkiler, Pratik o başvurulan yöntemler sayar rağmen artırılması mümkündür Teorik Should DEĞİL .
Paralel derlemeyi devre dışı bırakarak yalnızca 'app' modülünü derlediğimde referans alınan yöntem sayımında neden bir fark yok? Sadece 'app' modülünün bağımlılıkları kullanılacak gibi azalmış olmalı, değil mi?
derlemenin başvurulan yöntemlerle hiçbir ilişkisi yoktur counts.it, geliştiricinin uymak istediği şeyleri karşılar.
Sonuç
Konunun etrafındaki tüm olasılıkları ele aldım. Gerçekten de, farklı durumlardan ortaya çıkabilir ve bu kılavuzu kullanarak bir geliştirici sorunu çözebilir.
- Umarım Referanslanan Yöntemlerin neden arttığını ve bazı durumlarda neden büyük ölçüde artabileceğini bulmuşsunuzdur.
- Modüllerin Gradle & Bağımlılıkları ve modülerleştirme modülleri vardır. bu nedenle, bu Yöntem Referansları.
- Modülerleştirme aslında uygulama performansını cahil kılar, ancak uygulamanızın Bakımını daha iyi hale getirir.
- Modülerleştirmede geliştirici deneyimi de nihai sonucu büyük ölçüde etkiler.
ÖNEMLİ NOT: ifadelerin neredeyse tamamı benim araştırma ve araştırmalarımdır. aslında, hatalar ve hatalar olabilir ve gelecekte daha fazla bilgi eklemek için güncellenecektir.