Google Play'in APK değişimi neden bazı güvenlik uzmanlarını korkutuyor?

Google Play yakında geliştiricileri APK'lar yerine Uygulama Paketleri yüklemeye zorlayacak ve bu da gereksinimle ilgili rahatsız edici güvenlik sorularını gündeme getirecek.

Geçen Kasım, Google duyurdu geliştiricilerin Play Store'da yeni uygulamaları APK yerine Android App Bundle (AAB) biçimini kullanarak yayınlamaları gerekecek. Daha geçen gün Google geliştiricilere yaklaşan bu zorunluluğu hatırlattı ve bir tartışma fırtınası başlattı Google'ın APK'ları sonlandırdığına, dışarıdan yüklemeyi ortadan kaldırdığına, üçüncü taraf uygulama mağazalarını engellediğine ve ıvır zıvır.

Android App Bundle'ların, hem kullanıcı hem de geliştirici olarak alışık olabileceğiniz klasik APK formatından oldukça büyük bir sapma olduğu doğrudur. App Bundle'ları kullanmanın pek çok avantajı olsa da, bunları uygulamanın bazı geliştiricileri ve güvenlik uzmanlarını haklı olarak endişelendiren önemli bir yönü vardır.

Bu yazımızda Android App Bundles'a geçiş konusunda gördüğümüz eleştirilere ve önerilen bazı çözümlere değinecek, ayrıca Google'ın bu sorunlara yönelik önerdiği çözümden de bahsedeceğiz.

Arka plan

Ancak bu gerçekleşmeden önce genel olarak Android'de uygulama dağıtımının nasıl çalıştığı hakkında biraz konuşmamız gerekiyor. Uygulama imzalamanın ve Uygulama Paketlerinin nasıl çalıştığını zaten biliyorsanız bu bölümü atlayabilirsiniz.

APK'lar

Çoğunlukla, Android'deki uygulamalar APK dosyalarının içinde dağıtılır. APK, imzalama bildirimi gibi bazı güvenlik özelliklerinin yanı sıra bir uygulamanın tüm kodunu ve kaynaklarını içerir. Bir APK yüklendiğinde, temel olarak belirli bir klasöre kopyalanır ve yüklü uygulamaların dahili veritabanına eklenir.

Bir APK dosyasının içeriği, tıpkı .zip gibi arşiv dosyası formatları gibi araştırılabilir.

İmzalar

Yükleme sırasında, geçerli olduğundan emin olmak için söz konusu uygulamanın imzası da doğrulanır. Uygulama zaten yüklüyse Android, yeni uygulamanın imzasını önceden yüklü olan imzayla karşılaştırır. İmza geçerli değilse veya eşleşmiyorsa Android uygulamayı yüklemeyi reddeder.

Bu imza kontrolü Android'deki güvenliğin önemli bir parçasıdır. Yüklediğiniz uygulamanın geçerli olduğundan ve en azından önceden yüklediğiniz kaynakla aynı kaynaktan geldiğinden emin olmanızı sağlar. Örneğin, yüklerseniz şunu söyleyin: Play Store'daki Kilit Ekranı Widget'larım uygulaması, imzalayanın ben olduğumdan ve gerçek olduğundan oldukça emin olabilirsiniz. Daha sonra şüpheli bir üçüncü taraf siteden Kilit Ekranı Widget'ları için bir güncelleme yüklemeye çalışırsanız ve başarısız olursa, birisinin muhtemelen kötü amaçlı yazılım eklemek için bu APK'yı kurcaladığını bilirsiniz.

Bir uygulamayı imzalamak için kullanılan anahtar (ideal olarak) Asla kamuya açıklandı. Bu, özel anahtar olarak bilinir. Özel anahtar daha sonra uygulamanın imzasında gösterilen ve genel anahtar olarak bilinen anahtarı oluşturmak için kullanılır. Bu, Android ve uygulama mağazalarının bir uygulamanın geçerliliğini doğrulamak için kullandığı şeydir. Çok fazla şifreleme matematiği içerdiğinden, özel anahtarı açığa çıkarmadan genel anahtarı tam olarak nasıl oluşturabileceğinize girmeyeceğim. Daha fazla ayrıntı istiyorsanız, göz atın Google'ın APK'ları imzalamaya ilişkin belgeleri veya tek yönlü matematik fonksiyonları hakkında biraz araştırma yapın.

Kendi uygulama imzalama anahtarınızı yönetirken bir uygulamayı imzalama. Kaynak: Google.

Uygulama imzalarının başka bir özelliği de izinleri yalnızca eşleşen imzalara sahip uygulamalarla sınırlandırma yeteneğidir. Android, yalnızca çerçeveyle aynı anahtarla imzalanan uygulamaların belirli özelliklere erişebildiği birçok işlev için bunu dahili olarak yapar.

Uygulama Paketleri

Artık APK'lara ve imzalara hızlı bir genel bakış sunduğumuza göre, App Bundle'lardan bahsedelim. APK kaynaklarının devreye girdiği yer burasıdır. Kaynaklar düzenler, resimler, ses vb. şeylerdir. Temel olarak kod olmayan her şeydirler. Farklı ekran yapılandırmalarını ve farklı dilleri daha iyi desteklemek için geliştiriciler, cihaza ve dile bağlı olarak aynı kaynağın birden çok sürümünü oluşturabilir.

Ancak bir APK'da hangisini kullanırsanız kullanın bu kaynakların tümü mevcuttur. Ve yer kaplıyorlar. Uygulamanızın karmaşıklığına bağlı olarak birçok cihazda kullanılmayan çok sayıda kaynak olabilir. Uygulama Paketleri bunu çözmek için tasarlandı. Geliştiriciler tıpkı bir APK gibi bir App Bundle oluşturabilir ve bu App Bundle daha sonra tıpkı bir APK gibi Play Store'a yüklenebilir.

Bir temel modülü, iki dinamik özellik modülünü ve iki varlık paketini gösteren örnek Android App Bundle'ın içeriği. Kaynak: Google.

Google daha sonra bu App Bundle'ı farklı cihaz yapılandırmaları için bir sürü farklı APK oluşturmak için kullanır. Her App Bundle yalnızca söz konusu yapılandırma için gereken kaynakları içerir. Bir kullanıcı bu uygulamayı indirmeye gittiğinde, kendisine yapılandırmalarıyla eşleşen oluşturulan APK sunulur. Bu, hem uygulama indirme hem de yükleme boyutlarının azaltılmasına yardımcı olarak bant genişliğinden ve depolama alanından tasarruf sağlar.

Dinamik dağıtımın bir cihaza nasıl daha az kaynak yüklenmesine yol açabileceğini gösteren bir grafik. Kaynak: Google.

Elbette, cihazınıza özel bir APK yüklemek, onu başka bir cihaza kopyalayıp sorunsuz bir şekilde kurmanızın daha zor olduğu anlamına gelir. Bakış açınıza bağlı olarak bu iyi ya da kötü bir şey olabilir. Bir yandan, kullanıcılar artık uygulamanın tamamına sahip olmadığından korsanlığı daha da zorlaştırıyor. Öte yandan, aynı nedenden dolayı uygulamaların yasal olarak arşivlenmesini de zorlaştırır.

Uygulama İmzalama

Android App Bundle'lar APK olmadığından, bir AAB dosyasını açıp doğrudan bir cihaza yükleyemezsiniz. Play Store'a bir tane yüklediğinizde Google, farklı (imzasız) APK dosyaları oluşturmak için paketi kullanır. Bu APK'ların kurulabilmesi için önce imzalanması gerekir.

Google, geliştiriciden oluşturulan APK'ları imzalayıp yeniden yüklemesini istemek yerine imzalama işlemini kendisi yönetir. Play Store ya kendi oluşturduğu yeni bir anahtar kullanır ya da geliştiriciden imzalamak için kullandığı anahtarı ister APK'lar. Her iki seçenekte de Google, geliştirici için herkese açık imzalama işlemini gerçekleştirir ve bir yükleme sağlar anahtar. Google, dahili doğrulama için yükleme anahtarını kullanır ve geliştiricinin yüklediği App Bundle'ın (veya bazı durumlarda APK'nın) doğru olduğundan emin olur.

Play Uygulama İmzalama ile bir uygulamayı imzalama. Kaynak: Google

Bir yükleme anahtarının güvenliği ihlal edilirse veya kaybolursa geliştiriciler yeni bir anahtar talep edebilir ve uygulamayı dağıtmak için kullanılan imzalama anahtarı değişmeden kalır.

Uygulama İmzalama ile ilgili çok daha fazlası var, ancak bu makaleyle alakalı olan budur. İsterseniz Uygulama Paketleri ve Uygulama İmzalama hakkında daha fazla bilgiyi şu adreste bulabilirsiniz: Wojtek Kaliciński'nin bu Medium makalesi.

Eleştiri

Teoride ve pratikte Uygulama Paketleri oldukça harikadır. Kullanıcının hiçbir şey yapmasına gerek kalmadan veri kullanımını ve yükleme boyutunu azaltırlar. Ancak uygulanma şekli nedeniyle bazı geliştiriciler ve güvenlik araştırmacıları son birkaç ayda endişelerini dile getirdi. Bu endişeleri özetlemeden önce, aşağıda yazılanların çoğunun doğrudan olduğunu söylemek istiyorum. bir dizi makaleye dayanarak geliştirici Mark Murphy tarafından CommonsWare. Bir geliştiricinin bakış açısıyla daha fazla ayrıntı ve eleştiri sunduğu için makalelerine mutlaka göz atmalısınız.

Güvenlik

Klasik dağıtım modelinde geliştirici, bir APK'yı imzalamak için kullandığı anahtarı gizli tutar. Hiçbir zaman kamuyla paylaşılmaz ve yalnızca yetkili kişilerin erişimi olmalıdır. Bu, yalnızca bu kişilerin geçerli bir APK oluşturabilmesini sağlar.

Ancak Play Store'da App Bundle'ları kullanıyorsanız, kullanıcıların aldığı APK'ları imzalayan anahtarı yöneten kişi Google'dır. varsayılan Google Play'e yüklenen yeni uygulamalara ilişkin davranış Ağustos 2021'den itibaren Google'ın, geliştiriciden gizli tuttuğu kendi dağıtım anahtarını oluşturmasıdır.

Ağustos 2021'den itibaren Google Play geliştiricileri için nelerin değişeceğinin özeti. Kaynak: Google

Gönderen geliştiriciler yeni uygulamalar geliştiriciler güncellemeleri gönderse de Google'ın varsayılan olarak özel anahtarlarını yönetmesini sağlayacak mevcut uygulamalar APK'ları kullanmaya devam edebilir veya Google'ın yeni kullanıcılar için kullanması için yeni bir anahtar oluşturarak AAB dağıtımına geçebilirler. Mevcut uygulamalar gerekli değil APK dağıtımından Android App Bundle'lara geçmek için; ancak bu seçeneği seçmeleri durumunda kullanabilirler. Bir süre geri çevrildikten sonra Google hatta bunu mümkün kılacak Hem yeni hem de mevcut uygulamalar için Google'ın oturum açması amacıyla kendi özel anahtarınızı yüklemek için. Bu durumların hiçbiri ideal değildir; ne olursa olsun, isterseniz Google özel anahtarınıza erişebilir. Android App Bundle'ları kullanın (ve geliştiricilerin Ağustos ayından sonra yeni bir uygulama göndermek isterlerse bu konuda başka seçeneği yoktur) 2021!)

Google'ın güvenliği çok ciddiye aldığından emin olsak da, Dünya üzerinde veri ihlallerine karşı bağışıklığı olan hiçbir şirket yok. Google'ın uygulamanızı dağıtım için imzalamak için kullandığı anahtar bu ihlallerden birindeyse, herkes uygulamanızın bir sürümünü imzalayabilir ve sizin tarafınızdan imzalanmış gibi görünmesini sağlayabilir. Bazı geliştiriciler ve güvenlik uzmanları da bu olasılıktan pek memnun değil. Bu çok çok zayıf bir olasılık, evet, ancak bunun bir olasılık olduğu gerçeği bilgi güvenliği topluluğundaki bazılarını korkutuyor.

Geliştiricilerin Android APK'larını imzalaması, herkesin APK'ları Google Play'den doğrulayabileceği anlamına gelir; körü körüne güven gerekli değildir. Doğrulanabilir güvenlik sağlayan zarif bir tasarımdır. Uygulama Paketleri bu durumu tersine çeviriyor ve satıcıya bağlılığı teşvik edecek şekilde yapılandırılmış görünüyor. Hala geliştiriciler tarafından imzalanmış küçük APK'lar sağlayacak birçok alternatif teknik yaklaşım vardır, ancak bunlar Play'i tercih etmez. Örneğin, APK varyantlarının tümü geliştirici tarafından oluşturulup imzalanabilir ve ardından herhangi bir uygulama mağazasına yüklenebilir.

Özel anahtarların güvenli bir şekilde saklanmasını Google'ın veya bireysel geliştiricilerin ellerine bırakmanın daha iyi olup olmadığı konusunda kesinlikle tartışılması gereken argümanlar vardır. Ancak bu geliştiriciler (muhtemelen) genellikle anahtarları için merkezi bir depo kullanmıyorlar. Geliştiricileri Play Uygulama İmzalama'yı kullanmaya zorlayan kötü niyetli bir saldırganın, binlerce veya milyonlarca anahtarı almak için Google'ın güvenliğini yalnızca bir kez ihlal etmesi yeterlidir.

Ne olursa olsun, Google'ın kendi altyapısında imzalama anahtarınızı nasıl koruduğu hakkında söyledikleri:

[blockquote Author = "Wojtek Kaliciński, Google'da Android Geliştirici Avukatı"]Play Uygulama İmzalama'yı kullandığınızda anahtarlarınız, Google'ın kendi anahtarlarını depolamak için kullandığı altyapının aynısında depolanır.

Anahtar erişimi, tüm operasyonlar için sıkı ACL'ler ve kurcalanmaya karşı korumalı denetim izleri tarafından yönetilir.

Geliştiricinin anahtarıyla oluşturulan ve imzalanan tüm yapılar, inceleme/onay için Google Play Console'da kullanımınıza sunulur.

Ayrıca anahtar kaybını önlemek için birincil depolama alanımızı çok sık yedekliyoruz. Bu yedekler güçlü bir şekilde şifrelenir ve bu yedeklerden geri yüklemeyi düzenli olarak test ederiz.

Google’ın teknik altyapısı hakkında bilgi edinmek istiyorsanız, Google Bulut Güvenliği Teknik İncelemeleri.[/blockquote]

Ne kadar büyük olursa olsun, tüm sesler, kayıp ve hırsızlık hala mümkündür. Ve denetim izleri yalnızca gelecekteki saldırıların önlenmesine yardımcı olur; ihlal edilen anahtarları geri alamayacaklar.

Yetkisiz Değişiklik Potansiyeli

Google'ın App Bundle'ları ayarlama şekliyle ilgili büyük sorunlardan biri, bir uygulamaya yetkisiz değişikliklerin eklenmesi potansiyelidir. Google'ın her APK'yı manuel olarak oluşturması gerektiğinden, APK'ları bir App Bundle'dan çıkarma süreci doğası gereği değişiklikleri içerir. Sırasında Google, kod eklemeyeceğinin veya değiştirmeyeceğinin sözünü verdiApp Bundle sürecinin sorunu bunu yapabilecek güce sahip olmasıdır.

İşte Google'ın konumundaki bir şirketin yapabileceklerine dair birkaç örnek:

İnsanların devlet gözetimi riski olmadan iletişim kurmak için kullandıkları güvenli bir mesajlaşma uygulaması olduğunu varsayalım. Bu, otoriter bir hükümeti protesto eden insanlar, hatta sadece mahremiyetlerini korumak isteyenler için inanılmaz derecede yararlı bir araç olabilir. Uygulama kullanıcılarının ne söylediğini görmek isteyen bu hükümet, Google'ı uygulamanın koduna bir gözetim arka kapısı eklemeye zorlamaya çalışabilir.

Bu örnek biraz daha zararsız ama aynı zamanda bazı insanları da ilgilendiren bir örnek. Diyelim ki günde milyonlarca kez indirilen bir uygulama var ama içinde hiçbir reklam ya da analiz yok. Bu, verilere erişmenin hiçbir yolu olmayan çok büyük bir veri kaynağı. Bir reklam şirketi olan Google bu verilere erişmek isteyebilir.

Uygulama dağıtımının klasik APK modelinde Google, imzayı değiştirmeden uygulamalarda değişiklik yapamaz. Google, özellikle popüler bir uygulamada imzayı değiştirirse, güncelleme yüklenmeyeceğinden insanlar bunu fark edecektir. Ancak Uygulama Paketleri ve Uygulama İmzalama sayesinde Google, uygulamaları dağıtmadan önce sessizce kendi kodunu uygulamalara enjekte edebilir. İmza anahtarı Google'a ait olacağı için imza değişmeyecektir.

Klasik APK dağıtım şemasında güncellenmiş bir APK dosyasının, orijinal APK'yı imzalamak için kullanılan anahtarla imzalanması gerekir. Bu anahtar ideal olarak yalnızca bireysel geliştirici tarafından tutulur. Kaynak: Zachary Wander.

Açık olmak gerekirse, bu örneklerin gerçekleşmesi inanılmaz derecede olası değil. Google basitçe şunları yapma eğilimindedir: Sorunlu pazarlardan tamamen çekilmekuyum sağlamak yerine. Ancak pek olası olmasa da yine de mümkün. Bir şirketin bir şeyin olmayacağına dair söz vermesi, o şeyin garantisini vermez.

Kod Şeffaflığı

Bu endişeleri duyan Google, bu hafta yeni bir özelliği tanıttı. Uygulama Paketleri için Kod Şeffaflığı. Kod Şeffaflığı, geliştiricinin esas olarak uygulamayla birlikte kullanıcılara gönderilen ikinci bir imza oluşturmasına olanak tanır. Bu ekstra imza, yalnızca geliştiricinin erişebildiği ayrı bir özel anahtardan oluşturulmalıdır. Ancak bu yöntemin bazı sınırlamaları vardır.

Android App Bundle'lar için kod şeffaflığı nasıl çalışır? Kaynak: Google

Kod Şeffaflığı yalnızca kodu kapsar. Adı göz önüne alındığında bu açık görünebilir, ancak aynı zamanda kullanıcıların kaynakları, bildirimi veya DEX dosyası veya yerel kitaplık olmayan herhangi bir şeyi doğrulamasına izin vermediği anlamına da gelir. Kod dışı dosyalar üzerinde yapılan kötü amaçlı değişiklikler genellikle çok daha az etkiye sahip olsa da, bu durum hâlâ uygulamanın güvenliğinde bir açık teşkil etmektedir.

Kod Şeffaflığıyla ilgili diğer bir sorun da doğal bir doğrulamanın olmamasıdır. Bir kişi için, bu isteğe bağlı bir özelliktirBu nedenle geliştiricilerin yükledikleri her yeni APK'ya bunu eklemeyi hatırlamaları gerekir. Şu anda bunun komut satırından ve bir sürümüyle yapılması gerekiyor. bundletool bu Android Studio ile birlikte gelmiyor. Bir geliştirici bunu eklese bile Android'de, Kod Şeffaflığı bildiriminin uygulamadaki kodla eşleşip eşleşmediğini kontrol edecek herhangi bir yerleşik doğrulama bulunmuyor.

Manifest'i geliştiricinin sağlayabileceği ortak anahtarla karşılaştırarak veya doğrulama için APK'yı geliştiriciye göndererek bunu kendisi kontrol etmek son kullanıcıya kalmıştır.

Kod Şeffaflığı, bir uygulamadaki hiçbir kodun değiştirilmediğinin doğrulanmasına olanak tanırken, uygulamanın diğer bölümleri için herhangi bir doğrulama içermez. Ayrıca sürece doğal bir güven de yoktur. Google'a güvenmiyorsanız, muhtemelen bağımsız olarak doğrulama görevine sahip olduğunuzu iddia edebilirsiniz, ancak neden buna mecbur kalmalısınız?

Kod Şeffaflığı özelliğiyle ilgili başka sorunlar da var: işaret etti Mark Murphy tarafından CommonsWare. Özelliğin daha derinlemesine analizi için makalesini okumanızı tavsiye ederim.

Geliştirici Kolaylığı ve Seçimi

Bazı geliştiricilerin App Bundle'larla ilgili sorun yaşamasının üçüncü (ve bu makale için son) nedeni, rahatlığın ve seçeneğin azalmasıdır.

Bir geliştirici, Google Uygulama Paketlerini zorunlu kılmaya başladıktan sonra Play Store'da yeni bir uygulama oluşturursa ve Google'ın imzalama anahtarını yönetmesine izin verme varsayılan seçeneği, söz konusu imzalamaya hiçbir zaman erişemezler anahtar. Aynı geliştirici daha sonra bu uygulamayı başka bir uygulama mağazasına dağıtmak isterse kendi anahtarını kullanmak zorunda kalacak ve bu da Google'ınkiyle eşleşmeyecek.

Bu, kullanıcıların Google Play'den veya üçüncü taraf kaynaklardan yükleme ve güncelleme yapması gerektiği anlamına gelir. Kaynağı değiştirmek isterlerse uygulamayı tamamen kaldırmaları, potansiyel olarak veri kaybı yaşamaları ve yeniden yüklemeleri gerekir. APK toplayıcılar şunun gibi APKAyna daha sonra aynı uygulama için birden fazla resmi imzayla da uğraşmak zorunda kalacak. (Teknik olarak bunu zaten yapmak zorundalar çünkü Uygulama İmzalama yeni kullanıcılar için yeni, daha güvenli bir anahtar oluşturmanıza olanak tanıyor, ancak herkes bunu yaptığında durum hem onlar hem de diğer siteler için daha kötü olacak. sahip olmak yapmak için.)

Google'ın bu soruna yanıtı, yüklenen paketten elde edilen APK'ları indirmek için Play Console'daki App Bundle gezginini veya Artifact gezginini kullanmaktır. Kod Şeffaflığına benzer şekilde bu da tam bir çözüm değildir. Play Console'dan indirilen APK'lar farklı cihaz profillerine göre bölünecektir. Play Console, bir uygulamanın bir sürümü için birden fazla APK'nın yüklenmesini desteklese de diğer birçok dağıtım kanalı desteklemez.

Bu nedenle, geliştiriciler birden fazla mağazayı yönetirken App Bundle kullanmanın pek çok avantajı ortadan kalkıyor ve dağıtımı daha da zorlaştırıyor. Şu haberle Windows 11 dır-dir Android uygulama desteği kazanıyor Amazon Appstore sayesinde, bazıları App Bundle gerekliliğinin geliştiricileri Amazon'da dağıtım yapmaktan caydıracağına inanıyor. Elbette Google'ın öncelikli endişesi kendi uygulama mağazasıdır, ancak tam da bu onları rakiplerle sıcak suya indirdi onları yapmaya yönlendiriyor küçük, uzlaştırıcı değişiklikler üçüncü taraf uygulama mağazalarının Android'de nasıl çalıştığı hakkında.

Birden fazla mağazayla ilgili birkaç sorun, uygulama ara bağlantısı ve hızlı testtir.

Uygulama ara bağlantısıyla başlayalım. Özellikleri bir ödeme duvarının arkasına kilitleyen bir uygulamayı hiç indirdiniz mi? Neredeyse kesinlikle. Bazı geliştiriciler özellikleri uygulama içi satın almanın arkasına koyar, ancak diğerleri ayrı, ücretli bir uygulama yapmayı seçebilir. Bu eklenti uygulaması yüklendiğinde ana uygulamanın özelliklerinin kilidi açılır.

Peki birisinin eklentiyi korsan bir kaynaktan yüklemesini engelleyen şey nedir? Geliştiriciler için pek çok seçenek var, ancak en azından biri imza korumalı izinlerin kullanılmasını içeriyor. Ana uygulamanın imza korumalı bir izin bildirdiğini varsayalım. Eklenti uygulaması daha sonra bu izni kullanmak istediğini bildirir. İdeal olarak eklenti uygulamasında, kullanıcının meşru olduğundan emin olmak için internete bağlanan bir tür lisans doğrulama işlevi de bulunacaktır.

Her iki uygulama da aynı imzaya sahipse Android, eklenti uygulamaya izin verecek ve korsanlığa karşı koruma kontrolleri geçecektir. Eklenti uygulamasının doğru imzası yoksa izin verilmeyecek ve doğrulama başarısız olacaktır.

Klasik APK dağıtım modeliyle, kullanıcı herhangi bir meşru kaynaktan herhangi bir uygulamayı alabilir ve işini bitirebilir. Geçerli varsayılan App Bundle modeliyle, ana uygulamalardaki ve eklenti uygulamalardaki imzalar eşleşmeyecektir. Google her uygulama için benzersiz bir anahtar oluşturacak. Geliştirici her zaman imza korumalı izni ortadan kaldırabilir ve doğrudan imza karma doğrulamasını kullanabilir, ancak bu çok daha az güvenlidir.

Ve sonra hızlı ateş testi var. Kullanıcılar, uygulamalarındaki sorunlar hakkında geliştiricilere her zaman e-posta gönderir. Bazen bu sorunlar basit düzeltmelerdir: Sorunu yeniden oluşturun, sorunu bulun, düzeltin ve yeni bir sürüm yükleyin. Ama bazen değiller. Bazen geliştiriciler bir sorunu yeniden oluşturamazlar. Sorun olduğunu düşündükleri şeyi düzeltebilirler, ancak daha sonra kullanıcının bunu test etmesi gerekir. Şimdi kullanıcının uygulamayı Google Play aracılığıyla yüklediğini varsayalım.

APK modeliyle geliştirici bazı kodları değiştirebilir, yeni bir APK oluşturup imzalayabilir ve bunu test için kullanıcıya gönderebilir. Test APK'sının imzası kullanıcının yüklediği imzayla eşleştiğinden güncelleme, test etme ve geri raporlama basit bir işlemdir. App Bundle'larda bu durum tamamen ortadan kalkıyor. Google, kullanıcının orijinal olarak yüklediği APK'yı imzaladığı için geliştiricinin gönderdiği APK'nın imzasıyla eşleşmeyecektir. Bu uygulama, App Bundle'ın son tarihinden sonra yayınlanırsa geliştirici, Google'ın kullandığı anahtara bile erişemez. Test etmek için kullanıcının test sürümünü yüklemeden önce mevcut uygulamayı kaldırması gerekir.

Burada bir sürü sorun var. Birincisi, hem geliştirici hem de kullanıcı tarafında rahatsızlık var. Sadece bir düzeltmeyi test etmek için uygulamayı kaldırmak zorunda kalmak eğlenceli değil. Peki ya sorun ortadan kalkarsa? Geliştiricinin yaptığı değişiklikler mi, yoksa kullanıcının uygulama verilerini etkili bir şekilde temizlemesi mi? Play Store'da, geliştiricilerin hızlı derleme ve dağıtım yapmasına izin vermesi beklenen Dahili Test vardır, ancak bu, kullanıcının önce yayın sürümünü kaldırmasını gerektirir. Aslında hiçbir şeyi düzeltmiyor.

Bunların hepsinin varsayımsal bir saçmalık gibi görünmesi durumunda, Google'ın kendisi için özel bir anahtar oluşturmasına izin verirse bu sorunları yaşayacak bir geliştiricinin çok gerçek bir örneğini burada bulabilirsiniz: João Dias. Kendisi, AutoApps paketi de dahil olmak üzere bir dizi eklenti uygulamasının yanı sıra Tasker'ın geliştiricisidir. Yeni Uygulama Paketleri gereksinimiyle birlikte João'nun geliştirme döngüsü, en azından yeni uygulamalar için çok daha zorlu hale gelebilir. Test sürümlerini doğrudan göndermek daha az kullanışlı olacaktır. Lisansların doğrulanması daha az etkili olacaktır.

João Dias, tamamı paylaşılan bir lisansa dayanan birçok uygulamaya sahiptir. İşin içinde iki imzalama anahtarı varsa işler onun için gerçekten karmaşık hale gelebilir.

Bu biraz uç bir durum gibi görünebilir ancak João'nun küçük bir geliştirici olduğu söylenemez ve muhtemelen yalnız da değildir. Play Store'da gayri meşru kullanıcıları tespit etmek için imza doğrulamaya dayanan birçok uygulama var.

Elbette geliştiricilerin kendi imzalama anahtarlarını Google'a yüklemelerine yönelik yeni seçenek sayesinde bu sorunlar en azından bir miktar hafifletildi. Ancak geliştiricilerin her uygulama için seçeneği etkinleştirmek üzere kaydolmaları gerekir. Aksi takdirde, ara bağlantılar başarısız olacak ve hızlı destek desteği, kullanıcıya doğru olanı göndermeden önce Google'a bir Paket yüklemeyi ve APK'ların oluşturulmasını beklemeyi gerektirecektir. Ayrıca, bu yine de özel anahtarlarını paylaşmaları gerektiği anlamına geliyor ve bu da bizi daha önce tartıştığımız endişelere geri getiriyor.

Çözümler

App Bundle gereksinimlerinin aylar önce duyurulduğu göz önüne alındığında bu eski bir sorundur, dolayısıyla bu arada çok sayıda çözüm önerilmiştir.

Çözümlerden biri Play Uygulama İmzalama ihtiyacını ortadan kaldırmaktır. Google'ın daha sonra APK'lara ve imzalara dönüştüreceği bir App Bundle oluşturmak yerine, bu işlem Android Studio tarafından yapılabilir. Daha sonra geliştiriciler, Google'ın oluşturacağı her yapılandırma için yerel olarak imzalanmış APK'larla dolu bir ZIP yükleyebilir.

Bu çözüm sayesinde Google'ın geliştiricilerin anahtarlarına erişmesine hiç gerek kalmayacak. Süreç, klasik APK dağıtım modeline çok benzeyecek ancak yalnızca bir tane yerine birden fazla, daha küçük APK içerecektir.

Uygulamanızı Android Studio'da kendi yükleme anahtarınızla imzalama. Kaynak: Google

Diğer bir çözüm ise App Bundle'ların kullanılmasını gerektirmemek ve geliştiricilerin yerel olarak imzalanmış APK'lar yüklemesine izin vermeye devam etmektir. Uygulama Paketleri ise çoğu durumda kullanıcı için daha iyi bir deneyim olsa da, bazı uygulamalar minimum boyutla yapılandırmaya göre bölünmenin aslında faydasını görmez kesinti.

Google bu çözümlerin her ikisini de uyguladıysa App Bundle'ı kullanmak isteyen bir geliştiricinin Google'a imza attığınızda uygulaması bu formattan pek yararlanamayacak bir geliştiricinin bu formatı kullanmasına gerek kalmayacak. Tümü.

Google'ın Yanıtları

Kendiliğinden İmzalama

Geliştiricilerin App Bundle imzalarını yönetmesine izin verilmesi konusunda ilk kez sorulduğunda Google'ın yanıtı oldukça tarafsızdı:

[blockquote yazar = ""]Önümüzdeki yıl yeni uygulamaların uygulama paketlerini kullanması gerekliliğinden kısaca bahsettim ve bununla birlikte gelen şeylerden biri de, buna ek olarak Play Uygulama İmzalama'ya ihtiyaç duyacağımızdır. Bu nedenle geliştiricilerin Play'de Uygulama İmzalama anahtarını oluşturmaları veya kendi anahtarlarını Play'e yüklemeleri gerekecek. Çünkü bu, uygulama paketleri için bir ön koşuldur. Geliştiricilerden bazılarının bunu yapmak istemediğini duyduk. Anahtarların Play tarafından yönetilmesini istemiyorlar. Uygulama paketlerini kullanmak istiyorsanız şu anda bu mümkün değildir.

Ancak bu geri bildirimi duyduk ve… Şu anda hiçbir şey hakkında konuşamam, açıklayacak bir şeyimiz yok ancak bu endişelerden bazılarını nasıl hafifletebileceğimizi araştırıyoruz. Paketleri yüklerken mutlaka kendi anahtarınızı saklamanıza izin vermesi gerekmez. Farklı seçeneklere bakıyoruz. Şu anda açıklayacak bir çözümümüz yok. Ancak gereksinimin karşılanmasına hâlâ yaklaşık bir yılımız var, bu nedenle geliştiricilere bu konuda bir yanıt bulacağımızdan gerçekten umutluyum.[/blockquote]

Bu geçen yılın Kasım ayı sonlarındaydı ve hiçbir şey olmamış gibi görünüyor. Seçime yalnızca birkaç ay kala App Bundle zorunluluğu yürürlüğe giriyor, geliştiricilerin kendi uygulamalarını imzalamayı halletmeleri için hâlâ bir yol yok. Google artık bunu mümkün kıldı yüklemek hem yeni hem de mevcut uygulamalar için kendi anahtarınız olmasına rağmen, bu, imzalama kısmını yine de geliştiricinin elinden alır.

Kod Değişiklikleri

Google, Play Store'un uygulama kodunu değiştirmeyeceğine dair özellikle söz vermiş olsa da, verilen söz bir garanti değildir. Uygulama Paketleri ve Uygulama İmzalama sayesinde, Google'ın yüklenen uygulamaları dağıtımdan önce değiştirmesini engellediğini bildiğimiz herhangi bir teknik sınırlama yoktur.

Google tanıttı Kod Şeffaflığı isteğe bağlı bir özellik olarak ve bu biraz yardımcı olsa da, daha önce tartıştığımız gibi, bazı sorunlar da içeriyor.

Kendi Yaptığınız Paketler

Google'a, geliştiricilerin kendi uygulama "paketlerini" (bölünmüş APK'lar içeren ZIP'ler) oluşturmalarına izin verilmesi sorulduğunda, yanıt temelde "bunu yapmayacağız" oldu:

Muhtemelen soruda anlatıldığı gibi değil, çünkü bu, geliştiriciler için yayınlama sürecini daha da zorlaştıracaktır ve biz aslında bunu daha basit ve daha güvenli hale getirmek istiyoruz. Ancak yine de bu geri bildirimi duyduk ve bunu nasıl mümkün kılabileceğimize dair seçenekleri araştıracağız, ancak muhtemelen burada anlatıldığı şekilde değil.

İlginç bir şekilde Google'ın gerekçesi, bunun yayıncılığı daha karmaşık hale getireceği yönünde görünüyor. Ancak Google, Android Studio'daki APK oluşturma iletişim kutusunun bir parçası olarak süreci yine de otomatik hale getirebilir. Ayrıca, eğer söz konusu uygulama birden fazla mağazada dağıtılıyorsa, bu aslında geliştiricilerin birden fazla imzalama anahtarını ve şikayeti yönetmesi gerekmeyeceği için yayınlama süreci daha basit kullanıcılar.

Kod Şeffaflığının kullanıma sunulmasıyla birlikte, karmaşıklığın tam olarak bir sorun olmadığı görülüyor. Kod Şeffaflığı, en azından şimdilik, geliştiricinin bir komut satırı aracı kullanmasını ve kullanıcıların kendilerine sunulan uygulamanın geçerliliğini açıkça doğrulamasını gerektiriyor. Bu, kendi kendine paket oluşturma sürecinden daha karmaşıktır ve Google'ın neden tercih ettiği çözümün bu olduğu açık değildir.

İleriye gidiyor

1 Ağustos'tan itibaren Google Play'e gönderilen yeni uygulamalar için Uygulama Paketleri gerekli dağıtım biçimi olacaktır. Google, geliştiriciler ve güvenlik uzmanları tarafından dile getirilen sorunların çoğunu en azından bir şekilde ele almış olsa da, yanıtlar arzu edilenden çok daha fazlasını bırakıyor. Yeni nesil dağıtım biçimi olarak App Bundle'ların pek çok bariz avantajı vardır, ancak uygulama imzalamanın kısmi veya tam kontrolünün Google'a verilmesi konusunda her zaman kalıcı endişeler olacaktır.

Google'ın yanıtları ve çabaları kesinlikle takdire şayan, ancak Mark Murphy gibi bazıları yeterince ileri gitmediklerini düşünüyor. Kendi kendine oluşturulan paketler gibi çözümlerin uygulanmaması ve Android App Bundle'ların son teslim tarihinin hızlı bir şekilde talep edilmesi nedeniyle yaklaşırken, Google Play'deki geliştiricilerin uygulamalarının tam kontrolünü uzun süre elinde tutması pek mümkün görünmüyor uzun.


Bu öğleden sonra Twitter Alanında Android App Bundle gerekliliğinin sonuçları hakkında konuşacağız, o halde bize katılın!