Android Parçalanmasının Üzücü Durumu: Geliştiricilerin İçinde Bulunduğu Durumu Anlamaya Yönelik Bir Örnek

click fraud protection

Ortalama Android kullanıcısı muhtemelen Android'in "parçalanma sorunu"yla ilgilenmeyi bırakalı uzun zaman oldu. Ancak sorun hala geliştiricilerin aklını kurcalıyor.

Parçalanma, mobil işletim sisteminin duyurulmasından bu yana Android'de tam anlamıyla tartışmalı bir konu oldu.

Parçalanmanın getirdiği çeşitlilik, trollerin çevrimiçi ateşli savaşlarda kullanabileceği bir sopa olmasının yanı sıra, artık büyük ölçüde bir engel olarak görülüyor. tüketiciler için net olumlu Android cihazlardan. Sonuçta, istediğimiz yazılıma sahip cihazı seçme konusunda bize o kadar çok özgürlük veriliyor ki, ortalama bir tüketicinin parçalanmayı önemsemesi çok zor. Android cihazlarının inanılmaz çeşitliliğini görselleştirmek, Android'in çeşitli temsillerinin güzel bir mozaiğini oluşturur.

OpenSignal uygulamasının Uygulama Kurulumlarına dayalı bir Android Cihaz Parçalama Örneği. Kaynak: AçıkSinyal

Ancak donanım ve yazılımın parçalanması, bir yazılım geliştiricisini mutlu etmez. Aslında tam tersi. Pek çok farklı donanım ve yazılım konfigürasyonunda bir uygulama geliştirmek, hata ayıklama sırasında büyük bir sıkıntı yaratabilir. OEM'ler, bir uygulama geliştirirken hesaba katılması gereken büyük veya ince değişiklikler yapabilir, ancak bireysel geliştiricinin, uygulamasının evrensel olarak çalışacağından emin olmasının kolay bir yolu yoktur. Ortalama tüketici parçalanma tartışmasını çoktan unutmuş olsa da bu sorun hala Android'i rahatsız ediyor uygulama geliştiricileri ve görünüşte bu konuda emip, hatalarla başa çıkmak dışında yapacak hiçbir şey yok belli olmak.


Üzgünüm Parçalanma Durumu

Özellikle bir OEM, bir uygulama geliştirirken neden oldukları baş ağrılarından dolayı büyük oranda nefret alıyor: Samsung. Geliştiriciler yıllardır Samsung hakkında bağırıp çağırıyor, hatta bazıları şöyle sert yazılar yazıyor: "Android Cehenneminde Samsung'a Özel Bir Yer Var" kaynaklanan özellikle sinir bozucu bir hatayı anlatıyor Samsung cihazları ve destek appcompat kitaplığı. Bay Ambri'nin geliştiricilerin neden hala parçalanmaya önem verdiğini mükemmel bir şekilde özetleyen konuşmasındaki bir paragrafa özellikle dikkat çekmek istiyorum:

Bir Android geliştiricisiyseniz, Samsung cihazlarına olan nefretiniz muhtemelen sınırsızdır. Samsung'un eş anlamlı olduğu ortalama bir kullanıcıdan daha fazlası aptal Touchwiz Ve aşırı bloatwareBaşka seçeneğiniz olmadığı için Samsung'u küçümsüyorsunuz. Samsung'un yüzünden büyük pazar payı, Samsung cihazlarını desteklememeyi seçemezsiniz. Ve en çok acı veren de bu; bu seçimin elinizden alınmış olması!

Bu, Android'in var olduğu eski yıllardan kalma bir söylenti de değil; bu yazı geçen yılın Aralık ayının ortasında yayınlandı. Açık konuşacağım ve bu sorunun henüz resmi olarak çözülüp çözülmediğinden emin olmadığımı belirteceğim, ancak Sayın Başkan. Ambri, Google'da arama yaparak bu sözlere rastlayan herkes için gönderisinde bir düzeltme sağladı. böcek. Tek yapmanız gereken kullanmak ProGuard aşağıdaki tek kod satırıyla:

# Samsung ruining all nice things-keep class !android.support.v7.view.menu.**, !android.support.design.internal.NavigationMenu, !android.support.design.internal.NavigationMenuPresenter, !android.support.design.internal.NavigationSubMenu, android.support.** {*;}

Bu o kadar da kötü değil, değil mi? Ancak sorun, bu düzeltmenin Yığın Taşması'ndan çıkarılmasıdır. Beni yanlış anlamayın, Stack Overflow harika bir web sitesidir. Ancak uygulamalarınız için düzeltmeler keşfetmek için ideal bir kaynak değil. Yığın Taşması'nda bir şey bulmak çoğu zaman birçok deneme yanılma Google aramasından sonra bağlantıların derinliklerine dalmayı içerir. Bazen başka bir kullanıcının sizin yaşadığınız aynı hatadan bahsettiğini, ancak görünürde bir düzeltme olmadığını bile görebilirsiniz. Veya orijinal posterin iddia ettiği bir konuyu bulduğunuz zamanlar daha da sinir bozucudur. bir çözüm buldular ama başkalarına sorunu nasıl düzelteceklerini söylemeden uzun süreden beri konularını terk ettiler sorun.

Kaynak: XKCD

İnce Parçalanma Sorununa Bir Örnek

Kendim bir geliştirici değilim, ancak Tasker'da yıllarca uğraştıktan sonra Android'in yeteneklerine yeterince aşinayım ve karşılaştığım sorunlara kendi çözümlerimi sözde programlamaya başladım. Ve bir şeyi çözemediğimde herkesin yaptığı gibi Google'da araştırıyorum. Daha önceki makalemi yazma sürecindeyken gizli etkinlikler için telefonunuzun Ayarlar uygulamasında araştırma yapmakaçıklayamadığım oldukça tuhaf bir hatayla karşılaştım. Huawei cihazlarına özgü bir hata.

Ayarlar uygulamasında belirli etkinlikleri (uygulama kullanım istatistiklerini içeren "Test" menüsü gibi) başlatmaya çalıştığımda, her zaman bir izin hatasıyla karşılaşıyordum. Özellikle, etkinliği başlatmak için kullandığım uygulamanın izni yoktu huawei.android.permission. HW_SIGNATURE_OR_SYSTEM. Test ettiğim başka hiçbir cihaz, bu Ayarlar etkinliklerini başlatmak için herhangi bir benzersiz izin gerektirmedi; yalnızca Huawei'nin Android sürümünü (EMUI) çalıştıran telefonlar. Bir analiz com.android.settings Ayarlar uygulamasındaki belirli etkinliklerin aslında ya koruma düzeyinin altında olduğunu ortaya çıkardı imza veya sistem izni.

Ne yazık ki benim için bu, yalnızca /system altına yüklenen uygulamaların veya aynı ile imzalanmış uygulamaların olduğu anlamına geliyor Ayarlar uygulaması bu etkinlikleri benim kullandığım yöntemi kullanarak açabileceği için imza teşebbüs ediyorum. Cevap için Google'da bu hatayı aradığımda (siz tahmin ettiniz) bir sorunla karşılaştım Yığın Taşması iş parçacığı. Sorununu yayınlayan geliştirici benimle aynı sorunla karşılaştı (gerçi onunki aslında bir uygulama geliştirme sürecindeydi). Sorunu aşağıdaki kodu çalıştırmayı denediğinde ortaya çıktı:

<span >Intentspan><span > mainIntent span><span >=span><span >newspan><span >Intentspan><span >(span><span >Intentspan><span >.span><span >ACTION_MAINspan><span >,span><span >nullspan><span >);span><span >mainIntentspan><span >.span><span >addCategoryspan><span >(span><span >Intentspan><span >.span><span >CATEGORY_LAUNCHERspan><span >);span><span >Intentspan><span > pickIntent span><span >=span><span >newspan><span >Intentspan><span >(span><span >Intentspan><span >.span><span >ACTION_PICK_ACTIVITYspan><span >);span><span >pickIntentspan><span >.span><span >putExtraspan><span >(span><span >Intentspan><span >.span><span >EXTRA_TITLEspan><span >,span><span >"Pick App to Play in"span><span >);span><span >pickIntentspan><span >.span><span >putExtraspan><span >(span><span >Intentspan><span >.span><span >EXTRA_INTENTspan><span >,span><span > mainIntentspan><span >);span><span >thisspan><span >.span><span >startActivityForResultspan><span >(span><span >pickIntentspan><span >,span><span > REQUEST_PICK_APPLICATIONspan><span >);span>

Amaçtaki dizelere ve geliştiricinin web sayfasına bakılırsa, muhtemelen kullanıcının bazı medyaları oynatacağı üçüncü taraf bir uygulamayı seçmesine izin vermeye çalışıyordu. Deneyimli geliştirici tarafından sağlanan düzeltme CommonsWareoldukça basitti: kullanın Niyet. Seçici Oluştur yerine ACTION_PICK_ACTIVITY. Fakat, Neden bu düzeltmeyi uygulamamız gerekiyor mu? Neden Huawei öncelikle bu izne mi ihtiyaç duyuyor? Neden StackOverflow'a çok özel bir Google araması kullanarak bir yanıt bulmamız mı gerekiyordu?


Seçim Paradoksu

Bir cevap bulmak için, CommonsWare bir hata raporu sundu Android hata izleyicide Google'ın sorunu incelemesini talep ediyoruz. Geliştirici özellikle Google'dan, üçüncü taraf uygulamaların ACTION_PICK_ACTIVITY erişimini kısıtlamaya yönelik belgelenmemiş izin gereksinimlerinin engellenmesini talep etti. Bu gereksinimleri yazarak CTSHuawei bu değişikliklere uymak zorunda kalacaktı.

Ancak dürüst olmak gerekirse bu hatanın kendisi çok da önemli değil. Denediğim başka hiçbir uygulama (Tasker gibi) bu izni aşamasa da Ayarlar uygulamasında belirli etkinlikleri başlatmak ve gereksinim duymak beni tam olarak hayal kırıklığına uğratmadı sonuç. Ancak Bay Ambri'nin söylediklerini hatırladığımda bunun gibi küçük değişikliklerle başa çıkmanın çok sinir bozucu olabileceğini fark ettim, özellikle de çünkü ne kadar küçük olsalar da şüphesiztoplabazen baş ağrısına neden olacak kadar. Ayarlar uygulamasında yapılacak küçük bir değişiklik, geliştiriciye karşı haksız yere olumsuz bir inceleme yapılmasına neden olabilir. Oldukça zayıf bir şekilde belgelenen küçük bir değişiklik, Yığın Taşması iş parçacığı için İnternet'i taramamı gerektirdi. Diğer cihazlarda kaç tane küçük hata var?

Mobil alanda artan rekabetin tüketici için harika olduğu kanıtlandı, ancak bu ince değişikliklerin nasıl olduğunu gördükten sonra Pek çok farklı ürün grubu geliştiricileri etkileyebildiğinden, geliştiricilerin bu konudaki bakış açısını takdir etmeye başladım. parçalanma. Sorun seçimin kendisi değil, daha ziyade toplumun bu sorunları kataloglamak için yeterince çaba göstermemesidir. Bay Ambri'nin makalesinde önerdiği gibi, belki de Android geliştiricilerinin kendi sürümlerine ihtiyaçları vardır. caniuse.com veya sdkcritic.com tüm belirsiz hataları tek bir veritabanında toplamak için. Diğer tek alternatif, OEM'lerin ya bu değişiklikleri düzgün bir şekilde belgelemelerini ya da ilk etapta bunları yapmayı bırakmalarını sağlamaktır, ancak bu konuda iyi şanslar.

Özellik Görüntü Kredisi: AçıkSinyal