Sıcak yama onarım teknolojisi Android çevresinde çok popüler ve çok sayıda sıcak yama çözümü çok sayıda ortaya çıkmaya başladı
Bu makale size sıcak yama ile ilgili bilgilere kapsamlı bir giriş verecektir (prensip, ana kütüphane kullanımı), umarım beğenirsiniz
Sıcak yama ilkesi temel olarak şunlara dayanmaktadır: Android Dex taşeronluk şeması ve Android'in sınıf yükleme mekanizması (ClassLoader)
Bu nedenle, sıcak yama prensibinden bahsetmeden önce, önce yukarıdaki iki rezerv bilgisini anlayın.
2.1 Android Dex taşeronluk planı
Giriş
Şematik diyagram
2.2 Android sınıfı yükleme mekanizması (ClassLoader)
Giriş
İşlem açıklaması yükleniyor
Şematik diyagram
Not: 2 Dex dosyasında yinelenen sınıflar varsa, yükleme sırasında, önce daha yüksek bir sıraya sahip Dex dosyasının sınıfı yüklenecektir.
Gerekli yük sınıfı = class3 ise, son yük Dex1 dosyasında daha yüksek bir siparişle class3'tür.
Kaynak kod analizi
Belirli uygulama sınıfları PathClassLoader ve DexClassLoader BaseDexClassLoader sınıfından miras alındığından, burada temel olarak BaseDexClassLoader sınıfındaki sınıf yüklemesiyle ilgili findClass () yöntemlerini açıklıyoruz.
/ ** * Yükleme işleminin açıklaması ** / // 1. Yüklenecek sınıfın adını iletin (sınıf adı) // 2. Dex dosyası aracılığıyla gerekli sınıfı (findClass) bulun // a. ClassLoader'ın tüm Dex dosyalarını, yani dexElements koleksiyonunu sırayla gezinin // b. Bir Dex dosyası her geçiş yaptığında, Dex dosyasına yüklenecek sınıfı arayın // c. Sınıf, Dex dosyasında bulunursa, geri dönecektir; bulunamazsa, sonraki Dex dosyasını geçmeye devam edecektir. // 3. Gerekli sınıfları yükleyin / ** * BaseDexClassLoader öğesinin findClass () 'ın kaynak kodu analizi ** / @Override korumalı Sınıf < ? > findClass (Dize adı) ClassNotFoundException { // pathList nesnesinden bulun- > > Analiz 1 Sınıf clazz = pathList.findClass (name); eğer (clazz == null) { yeni ClassNotFoundException (ad) oluştur; } dönüş clazz; } / ** * Analiz 1: DexPathList'in FindClass () kaynak kodu analizi ** / public Sınıf findClass (Dize adı) { // 1. ClassLoader'ın tüm Dex dosyalarını, yani dexElements koleksiyonunu sırayla gezinin for (Element element: dexElements) { DexFile dex = element.dexFile; // 2. Bir Dex dosyası her geçiş yaptığında, Dex dosyasına yüklenecek sınıfı arayın. > > Analiz 2 eğer (dex! = null) { Class clazz = dex.loadClassBinaryName (name, definingContext); // 3. Sınıf, Dex dosyasında bulunursa, geri dönecek; bulunamazsa, bir sonraki Dex dosyasını geçmeye devam edecek eğer (clazz! = null) { dönüş clazz; } } } boş döndür; } / ** * Analiz 2: DexFile'ın loadClassBinaryName () kaynak kodu analizi ** / public Class loadClassBinaryName (Dize adı, ClassLoader yükleyici) { return defineClass (isim, yükleyici, mCookie); } / ** * Analiz 3: DexFile'ın defineClass () kaynak kodu analizi ** / özel yerel statik Sınıf defineClass (Dize adı, ClassLoader yükleyici, int çerez);3.1 Ayrıntılı açıklama
Onarılması gereken ve hataları içeren sınıfları bir Dex dosyasına (patch.dex olarak gösterilir) paketleyin
Dex dosyasını ClassLoader'da dexElements koleksiyonunun önüne ekleyin
3.2 Şematik
3.3 Özel dikkat: CLASS_ISPREVERIFIED işareti
özel açıklama
Çözüme özel açıklama
Şematik diyagram
Not: Yukarıdaki adımları tamamlamanız (sınıfın CLASS_ISPREVERIFIED işaretiyle işaretlenmesini önlemek için) ve ardından yamayı uygulamanız gerekir.
2015'in ikinci yarısından itibaren, sıcak yama onarım teknolojisi Android çevresinde çok popüler ve sıcak yama çözümleri çok sayıda ortaya çıkmaya başladı
Aşağıda, temel olarak mevcut ana akım düzeltme açık kaynak kitaplıklarını tanıtacağım
4.1 Ana akım düzeltme açık kaynak kitaplığı
4.2 Karşılaştırma
Bu makale temel olarak Android'deki yeni yama ile ilgili bilgileri açıklamaktadır.
Bunlar sadece kişisel görüşlerim ve deneyimlerim, umarım aktif olarak tartışır, değerli deneyimlerinizi paylaşır ve birbirinizi geliştirirsiniz!
Ek bilgi:
Android gelişmiş
Mobil mimar
Bu Android eğitim materyallerine ve röportaj materyallerine ihtiyaç duyan herkesin ilgiye ihtiyacı var + özel mesaj "Android materyallerini" ücretsiz olarak yanıtlıyor!
Ayrıca grupta, ileri düzey kullanıcı arayüzü, performans optimizasyonu, mimar kursları, NDK, hibrit geliştirme: ReactNative + Weex ve diğer Android teknik bilgi mimarisi video materyalleri ve kariyer planlaması dahil olmak üzere üst düzey Android hakkında birçok ücretsiz öğrenme materyali bulunmaktadır. Ve röportaj rehberliği.