Yunqi Konferansı'nda açık kaynak Atlas'ın kökeni nedir?

Kısa bir süre önce Yunqi Konferansı'nda Shoutao, mobil konteynerleştirme çerçevesi Atlas'ın 2017'nin başlarında açık kaynaklı olacağını duyurdu. Ekip, geçmişte bu çerçeveyi dış dünyayla paylaştı ve dış dünya şimdiye kadar bu çerçeveye yakından dikkat ediyordu. Sonunda kaynak açmak üzere.

Bu makale Atlas'ın tasarım fikirlerini ve Tao Tao'nun konteynırlaştırma, bileşenleştirme ve dinamikler hakkındaki düşüncelerini tanıtacak.Ana içerik Alibaba kıdemli teknik uzmanı Ni Shenghua'nın (Xuan Li) Yunqi Konferansı'ndaki paylaşımından geliyor.

Atlas nedir

2013 yılında, el-tao uçak gemisi stratejisinin formülasyonu, işletme ve geliştiricilerin iki katına çıkmasını sağladı. İnsan sayısı 100'ün altından dört veya beş kat arttı. Aynı zamanda, işletme sayısı büyük ölçüde arttı. Tüm müşterinin mimarisi ve sürüm ritmi büyük ölçüde zorlandı. Önceki el yapımı müşterinin temel çerçevesi olan Atlas, büyük bir yeniden yapılanma geçirdi ve oluştu. Atlas bugün.

Atlas, temel olarak bileşenleştirme, dinamikler ve ayırma desteği sağlayan bir Android istemci kapsayıcı çerçevesidir. Mühendislik kodlama dönemi, Apk çalıştırma süresi ve sonraki O&M onarım dönemi boyunca çeşitli sorunlar için mühendisleri destekleyin.

  • Proje döneminde bağımsız proje geliştirme ve hata ayıklama fonksiyonları gerçekleştirilir ve proje modülleri bağımsızdır.

  • Çalışma zamanında, tüm bileşen yaşam döngüsü eşlemesini, sınıf izolasyonunu ve diğer mekanizmaları gerçekleştirin.

  • İşletme ve bakım süresi boyunca, hızlı artan güncelleme ve onarım yetenekleri ve hızlı yükseltmeler sağlar.

Atlas, inşaat dönemi ve işletme dönemi boyunca birlikte çalışan bir çerçevedir.Karakteristik, işletme süresinin basitliğini ve istikrarını sağlamak için mümkün olduğunca inşaat sürecine bir miktar çalışma yapılmasıdır.

Şu anda Atlas, Tao Departmanı Uygulamasında geniş bir uygulama yelpazesine sahiptir. Hand Tao, Atlas üzerinde çalışan 60'tan fazla iş bileşeni, 20 işbirliği ekibi ve milyonlarca kod satırına sahiptir. Hızlı yineleme özelliği, uygulamaların yayın döngüsünün aydan aya değişmesine olanak tanır. Her hafta herhangi bir zamanda yayınlanmak üzere, son altı ayda 446 sürüm yayınlandı.

Ek olarak, Atlas, yalnızca 90'dan fazla kategoriyle çok hafiftir ve büyük ve küçük uygulamaların geliştirilmesini destekler.Bu çerçeve, büyük ölçekli el yapımından nispeten küçük ölçekli Ali Health'e kadar her şey için kullanılır. Kararlılığı da test edilmiştir ve Android 4.x ve üstü ile uyumludur. El alışverişinin genel Çökme oranı 10.000'de yaklaşık 5 olarak korunmuştur, çünkü konteynerlerin neden olduğu çökme oranı% 1'den azdır.

Bu anlamda, Atlas'ın çözülmesi gereken ilk problemi, büyük ölçekli ekip işbirliği problemidir.İtiraz, paralel geliştirme, hızlı yineleme ve mühendislik ayrıştırmayı içerir ve sonra çözülecek problem dinamik istemci güncelleme problemidir. Shoutao'nun iç düşünme çözümü bileşenleştirmedir.

Atlas bileşenli uygulama

Endüstride bileşenleştirme, eklenti olarak adlandırılır, ancak Atlas bileşenleştirme ile mevcut eklenti oluşturma arasında bazı farklılıklar vardır. Bileşenleştirme, bileşenin işlevini bilmektir ve tasarım daha standart hale getirilmiştir.

(Hand Tao APK paket dizin yapısı)

Bu bir mobil Taobao APK paketidir. İlk seviye dizini standart APK ile tamamen aynıdır. Uygulamada çok sayıda dosya olacaktır. Eğer onu açarsanız, yapısı tam bir APK'ye benzer, ancak kendisi Bağımsız olarak çalışamaz.Birçok eklenti ile arasındaki fark, tüm kapsayıcıda çalışması ve her bileşenin bağımsız bir Paket olmasıdır.

Modüller açısından hand-tao APK iki katmana ayrılabilir.Üst katman bölünmüş, tarama kodu, değerlendirme ve detaylar içeren bir servis paketidir.Her servis arasında fonksiyonlar çağrılabilir ve yönlendirme yoluyla diğer iş partilerine gönderilebilir. Alt katman, ağ kitaplıkları, görüntü kitaplıkları vb. Gibi, kapsayıcıda tek tip olarak kontrol edilecek olan iş tarafına çeşitli yetenekler açan, paylaşılan temel ara yazılımdır. Bunun avantajı, paketin olabildiğince küçük olmasıdır. İkincisi, performans iyi.

Bu parça, Atlas'ın beş katmana ayrılmış genel tasarımıdır:

OS Hack araç seti ve doğrulayıcı dahil olmak üzere Hack katmanı olarak adlandırdığımız ilk katman, burada sistem yeteneklerinde bazı genişletmeler yapıyor ve ardından bazı güvenlik kontrolleri yapıyoruz.

İkinci katman, paket yönetimi, yükleme, yaşam döngüsü ve güvenliğin en temel özelliklerinden bazılarını sağlayan, kapsayıcı temel çerçevemiz olan Bundle Franework'dür.

Üçüncü katman, liste de dahil olmak üzere çalışma zamanı yönetim katmanıdır.Tüm Paketleri ve yeteneklerini bir listede listeleyeceğiz, bu arama sırasında bulunması uygun, diğeri ise tüm Bundle sürümlerini yönetecek olan sürüm yönetimi; Proxy, burada endüstrideki bazı eklenti çerçeve mekanizmalarına benzer.Sistemin işletim ortamını proxy yapacağız ve Bundle'ın konteyner çerçevemizde çalışmasına izin vereceğiz; daha sonra proje süresince geliştirme ve hata ayıklamayı kolaylaştırmak için hata ayıklama ve izleme araçları var.

Dördüncü katman, iş katmanıdır Burada, iş tarafı için çerçeve yaşam döngüsü, yapılandırma dosyaları, araç kitaplıkları vb. Gibi bazı arayüzleri açığa çıkarıyoruz.

En üst katman, iş kodumuz olan uygulama erişim katmanıdır.

Bu nedenle, bir çerçeve olarak Atlas, nispeten eksiksiz yetenekler sağlar.İş katmanının geliştirilmesi, çerçevenin yaşam döngüsünün her bir bağlantısında bazı özel eylemler gerçekleştirebilir ve ayrıca sistemi, çerçeveyi ve diğer bileşenler tarafından serbest bırakılan yetenekleri serbestçe çağırabilir.

Bileşen teknolojisi ayrıntıları

Bahsettiğim şey, kapsayıcı düzeyinde daha genel şeyler ve aşağıda bazı özel ayrıntılardan bahsedeceğiz.

Paketin yaşam döngüsü ayrıntılı düğümler sağlayacaktır. Örneğin, bir Paketin yüklemeden çalıştırmaya kadar olan döngüsü aşağıdadır:

  • startInstall: Yüklemeye başlayın. Şu anda çerçeve, dosyaları kopyalamak, kitaplığı serbest bırakmak ve Bundle'ı yüklemek için bazı şeyler yapacak;

  • Yüklendi: Yükleme tamamlandı. Şu anda çerçeve, kaynak yolunu enjekte edecek ve bir sınıf yükleyici oluşturacaktır;

  • çözüldü: Çözüm tamamlandıktan sonra çerçeve, bileşen yapılandırmasının yasal olup olmadığını ve çözülüp çözülemeyeceğini kontrol edecek;

  • active: Bileşeni çalıştırın, yani bileşen Paketini çalıştırmaya başlayın;

  • başladı: İşlem başarılı oldu.

Bileşenleştirmeyle ilgili ilk sorun Manifest işlemedir.Birincisi, ana makine Manifest, Aar Manifest ve bileşen Manifest'i de dahil olmak üzere birçok kaynağın olmasıdır.Ayrıca, farklı bileşenlerin Manifest'i sık sık değişir ve bununla esnek bir şekilde ilgilenmemizi gerektirir.

Buradaki yaklaşım, proje süresi boyunca tüm Manifestler üzerinde Birleştirme işlemleri gerçekleştirmektir.Burada belirtilmesi gereken şey, Paketin tek bir Birleştirmeye bağlı olduğudur, çünkü bu, tahkime dayanma konusunu içerir. Son olarak, her bir Paketin Birleştirme Manifest'i ayrıştırılır ve yukarıda bahsettiğimiz Paket bilgi listesi olan tüm paketin BundleInfoList'i elde edilir.

İkincisi sınıf yüklemesidir Burada, Delegate ClassLoader bileşen sınıflarını dinamik olarak yüklemek için kullanılır. Delege ClassLoader önce ana bilgisayar Bundle'ın PathClassLoader'ını bulur ve ardından önceki BundleList'e göre karşılık gelen BundleClassLoader'ı bulur.

Üçüncüsü kaynaklardır. Sistem kaynaklarını kendi DeleteResources ile değiştireceğiz. Paket kaynakları, kurulum sırasında AssertPath'e tek tek eklenecektir. Paket ekleme sırası sabit olmadığından, bölümlememe kaynak arama karışıklığına neden olacaktır.

Ek olarak, Dalvik ve ART üzerindeki kaynak arama sürecinin sırası farklıdır.Ayrıca, Xiaomi gibi sistemler kendi kaynaklarını yeniden yazacak, bu nedenle farklı modellere adapte olacağız, AssetsPath'i daha sonra ekleyeceğiz veya ileriye ekleyeceğiz, AssetManager sistemi bir Singleton, varsayılan olarak geriye doğru eklenir. İleri eklerseniz, AssetsManager nesnesini yeniden oluşturmanız gerekir. Benzer şekilde, ana dex dinamik olarak dağıtıldığında, orijinal kaynağı değiştirmek için, ekleme siparişinin arama emriyle tutarlı olduğundan emin olmalısınız.

Ayrıca resourceTable her güncellendiğinde, web görünümü ve paket kaynakları gibi apk kaynağı ve çalışma zamanı sistem kaynaklarının başarıyla eklendiğinden, benzersiz ve doğru sırada olduğundan emin olunmalıdır.

Farklı Paketlerin kaynaklarında ad çakışmaları olabilir. Tüm iş kaynaklarının çakışmamasını sağlamak için ilgili Paketleri farklı kimliklere atamak için nispeten basit bir yöntem kullandık ve mühendislik döneminde sorunu çözmeye çalıştık. . Pek çok kodda, kaynağın tamamı yansıma yoluyla çağrılır. 5.0'ın üzerindeki sistemde herhangi bir sorun yoktur.Sadece ilkini bulur.İşletme kodu için başlangıçta nasıl yazıldığı bugün hala nasıl yazılacağıdır.

Bileşenleştirilmiş performansla ilgili olarak, isteğe bağlı yüklemeyi başlattık, çünkü hand-tao APK'sinde 70'den fazla paket var ve her kullanıcı gerçekten kullanıldığında yalnızca 5 veya 10'a ihtiyaç duyuyor, bu nedenle tüm paketleri yüklemeye gerek yok. Paketleri izole edin ve dört yerel Android bileşeni aracılığıyla etkileşime geçin, böylece paketler daha iyi ayrılabilir.

Çağırdığımız tüm girişler BundleInfolist'e dayanmaktadır.Bu liste bilgisine göre bileşenin bulunduğu Bundle'ı alıyoruz, yüklenmesi gerekiyorsa install ve dexopt gibi işlemleri yapacağız.

Ek olarak, bileşen bağımlılığı sorununu çözmek için, Awb (Business Bundle) ve solib (yani kütüphane) olmak üzere iki yeni bileşen formatı tanımlanmıştır. Birincisi, AAR ile tutarlıdır, ancak hiçbir yerel kütüphane eklenmez ve kurulum sırasında bağımlılık tahkimi ayırt edilir ve ikincisi Bu, Native kitaplığının bir bağımlılığıdır. Awb aslında AAR'dir, ancak son ek değiştirilir. Paketiniz ana bilgisayar Paketine yerleştirilmişse, AAR ve bir bileşen Paketi ise Awb'yi kullanın.

İş paketinin bağımlılığı için, ana bilgisayar paketini ve iş paketini ve bağımlılıklarını inşaat süresi boyunca ayrı ayrı paketleyeceğiz ve ardından her paketin gerektirdiği bağımlılıkları elde etmek için en kısa yol ve ilk bildirim ilkesine göre ağaç tahkimi gerçekleştireceğiz. Bağımlı kitaplıkları ilgili Paketlere koyun.

Son olarak, APK yapısında nispeten büyük bir ayarlama yaptık. Yukarıdaki şekilde, soldaki kısım aslında işleme, derleme ve imzalama dahil standart bir APK oluşturma sürecidir.

Farkımız, özel işlem gerektiren daha fazla Awb'nin olmasıdır.Avb kaynakları, ana bilgisayarın resource.ap_'sine ve paketteki kaynaklara göre oluşturulur. R dosyası, Bundle R kaynağı ve ana bilgisayar R kaynağından birleştirilir ve ardından Aapt gerçekleştirdik Değiştirin, her bir awb'ye farklı bir packageId atayın ve ardından tekdüze bir şekilde gizleyin, her AWB Dex'i üretin, APK'ye paketleyin, imzaladıktan sonra lib'lere kopyalayın, bu dosyaya yeniden adlandırın ve sonra taobao APK'sinde birleştirin. süreç.

Atlas dinamik

Bir konteyner çerçevesi içinde, bileşenleştirme ve dinamizasyon birbirini tamamlayıcı niteliktedir.Bileşenler yalnızca ayrıştırma sorununu çözmek içindir, ancak herhangi bir zamanda paketleri göndermek istiyorsak, konteyner çerçevesinin dinamik yeteneklere sahip olmasını sağlamalıyız. Atlas'ın komponentizasyonunu tamamladıktan sonra dinamik destek verdik. Dinamizasyonun faydalarından biri paket boyutunun küçültülmesidir.Bazı paketleri çalıştırdıktan sonra uygulamaya indirebiliriz, diğeri ise dinamik olarak yayınlayıp onarabiliriz.

Artımlı dinamik şema

Atlas, dinamik dağıtım yeteneği sağlar. Asıl amaç, dinamik iş sürümü ve sorun giderme işlemidir. El yapımı ve kendi geliştirdiği diferansiyel algoritmaya dayanır, ana Paket, ClassLoader mekanizmasına dayanır ve iş Paketi, her tür hizmeti destekleyen farklı birleştirmeye dayanır.

Ek olarak, Atlas, Andfix'in eklenti olarak kullanılmasını da destekler. Amaç, hataları hızlı bir şekilde onarmaktır. Prensibi, esas olarak yöntemi değiştiren Native hook'a dayanmaktadır. Uygulamada, ikisi birlikte kullanılabilir. Proje inşaatı süresince uyarlamadan sonra, bir set kod ve iki set çözüm kullanılabilir.

Kendi geliştirdiğimiz dinamik konuşlandırma fonksiyonunun uygulama prensibi.Öncelikle Dex Patch'in oluşturulması için bunu Dex'in bytecode'unu değiştirerek, Dex dosyasını Smali'ye çevirerek ve içindeki ClassDef ve ClassDataMethod yapılarını analiz ederek silip ekleyerek gerçekleştiriyoruz. , Sınıfı değiştirin ve ardından Diff işleme aracılığıyla fark dosyasını elde edin ve ardından Birleştirme işlemiyle yamayı oluşturun.

İkincisi, iki kısma bölünmüş tüm kaynak yamasının üretilmesidir. Biri, başlangıçta sürekli bir yükleme süreci olan iş paketidir. Uygulanması nispeten basit olacaktır ve Md5 diff / BSDiff aracılığıyla elde edilebilir. Ana Paket için, Android'in kendisinin bir sınırlaması olduğundan, tüm kaynakların temel pakette olması gerekir ve yeni bir kaynak eklemek etkili olmaz. Yani bir yaklaşım, paketleme sırasında çok fazla boş kaynak ayırmaktır. Ek olarak, mevcut kaynakların güncellenmesi, kaynak kapsamı yoluyla gerçekleştirilir.

Son olarak, yeni bir işletme eklenirse, yeni bir etkinlik eklenecektir. Yaklaşımımız önce Manifest'e bir StubActivity yerleştirir ve ardından bunu Instrumentation.execStartActivity aşamasında değiştirir ve aynı zamanda Etkinlik başlatma modunu simüle etmek ve startActivity'ye devam etmek için Intent setFlag ile işbirliği yapar ve ardından işlem için System_server işlemi , ActivityStack'i güncelleyin, bağlayıcı oluşturun ve bir örnek oluşturmak için ActivityThread'i bilgilendirin.Son olarak, ActivityThread işleyicisine müdahale eder, ActivityInfo ve diğer bilgileri günceller ve hedef Activity'i oluştururuz.

Ek olarak, mühendislik uygulamasında, yamanın oluşturulması Dex ve kaynakları temel alacağından, AP'yi (temel paket), dağıtım sırasında APK paketi her yayımlandığında Maven'e yayınlayacağız.AP temel paketi, temeli etkileyen her şeyi içerir. Dosyalar, ilki Android APK, ikincisi Mapping.txt ve sonuncusu Dependency.txt, bu nedenle tüm yapı çok hızlı olacaktır.

Yani bizim yöntemimizde, sürüm yükseltmesi farklı bir yol. Örneğin, bugün el satışının ayrıntıları güncellenecek ve bir sürüm yayınlanacaktır Bu sürüm, uygulama pazarının bir sürümü değil, bir Yama paketi olabilir. İş sürümünün dinamik dağıtımı, 5.3.0'dan 5.3.1'e 5.3.2'ye senkronize edildiğimiz gibi, böyle bir avantaj, kapsayıcı sürümü yükseltilmediği sürece, bir talep olduğu sürece yama sürekli olarak yükseltilebilir ve algısal bir fark yoktur. Yükselt.

Çevreleyen optimizasyon noktaları

Son olarak periferik optimizasyon noktalarımızdan bahsedelim.Bugüne kadar neden açık kaynak yapmak istediğimizi söyledik, süreç boyunca birçok sorunla karşılaşıldı.

İlk nokta, yinelenen kaynakların Bundle'da birleştirilmesidir. Ana bilgisayar sorunu nedeniyle, görüntü kaynakları da dahil olmak üzere kaçınılmaz olarak çatışmalar olacağını bulduğumuz için, onu tüm ana bilgisayar kategorisine koyacağız.

İkincisi, Bundle'ın bağımlılık kontrolü, daha önce kod olsaydı, derlendi, ancak bugün ikili olduğu için bu sorun sahneye bırakılacak, bu yüzden API'nin Bundle'ı etkileyip etkilemeyeceğini göreceğiz.

Üçüncüsü, sınıf kitaplığının "inceliğidir". Handtao'nun dayandığı çok sayıda ara katman sınıfı kitaplığı olduğundan, Handtao'nun kendisi çok şişirilmiş ve yöntemlerin sayısı büyük; bu nedenle, paketleme ve optimizasyon sırasında sınıf kitaplığı için bir özelleştirme süreci var. Yöntem sayısı.

Dördüncüsü, sorgu kitaplığına bağlı olan bağımlılıktan kaynaklanır.

Beşincisi, karışıklık haritalaması için Dex Dosyası vb. Yapmaktır.

Son olarak, açık kaynak için hazırlanıyoruz.Mühendislik dönemi ve işletme döneminde açık kaynak yapacağız ve mekanizmayı bulut hizmetleri aracılığıyla sağlayacağız. Alibaba, Atlas'ın hızlı üretim, sürüm, geri alma ve izleme dahil olmak üzere Ar-Ge destek yeteneklerini sağlayacak. Ve diğer yetenekler.

Daha fazla Baichuan ürünü için lütfen tıklayın Orijinali okuyun Görünüm

Bizi sevenler bundan hoşlanacak, bizi sevenler paylaşacak!

Meng Tingwei ve eski kocası, boşandıktan 5 yıl sonra birbirlerini parçalamaktan çok utanıyorlar ve birbirlerini derinden seviyorlar ama şimdi çok yaralanıyorlar!
önceki
"Fotoğraf Yolu" O gün çektiğim fotoğrafın adını hâlâ bilmiyorum
Sonraki
"Havva'yı öldür": Gerçeğe en yakın şey ölümdür
Meng Tingwei'nin boşanma draması birçok kez tersine döndü ve stüdyo, Meng Tingweinin eski kocasının oğlunu borç para almak için kullandığını kanıtlamak için resimler gösteriyor.
"Sessiz Bir Yer": Övgü biraz yanlış
Zhang Jiani'nin dört kişilik ailesi ilk kez aynı karede açığa çıktı ve çıplak yüzünde küçük oğluyla parlak bir şekilde gülümsüyor.
"Kılıç ve Peri Efsanesi: Yeni Bir Klasik Kaçış", çok alanlı düzeni genişletmek için sahnede piyasaya sürülmek üzere
Mercedes-Benz "petrol sızıntısı" araba olayı fermente edildi ve araç sahipleri 15.000 mali hizmet ücreti ödemek zorunda kaldı mı?
DG'nin kurucusu Çince özür diledi, ancak netizenler bunu kabul etmedi, ancak Di Lieba bu nedenle çok sayıda hayran kazandı.
"Onyedi" "Haber" 190322 Ne kadar çok çalışırsanız, o kadar iyi, cennetimizin en güzel çizgimiz ~
"Time in the Fallen City" çalışmaları değişti ama büyük kitap hayranı bunun Zhao Liying ve Jinhan'ın iyi oyunculuğu sayesinde olduğunu söyleyerek umursamadı mı?
Başka bir yerli dev daha düştü: bir zamanlar egemen yerli otomobil, şimdi kan nakli için mal satarak 5 milyarlık büyük bir kayıp yaşadı.
Dosya parçaları, belgesel film
"Saf Cariye" Wang Yuan bir aile portresi çekebiliyor. İkizler sevimli ve sevimli. Kocası Yu Zhengxin'i filme aldı.
To Top