Android Uygulaması Geliştirme İpuçları: Aldığım Dersler
Yayınlanan: 2022-03-11Selam! Ben Ivan ve bir süredir Android uygulama geliştiricisiyim. Ya da öyle görünüyor. O zamanlar (2009'dan bahsediyoruz), Android sadece bir bebekti ve o zamandan beri Küçük Yeşil Adam'ın büyümesini izledim. Korkarım bir süre önce Android beni geçmeyi başardı.
Günümüzde Android sadece on binlerce farklı telefon ve tablette bulunmuyor. Bileğinizde, oturma odanızda, arabanızda ve cansız nesnelere IP adresleri atamaya başlar başlamaz, hemen hemen her yerde olacak. Deneyimli bir Android geliştiricisinin bile kapsayacağı çok şey var!
Ayrıca, Amazon AppStore'u veya Çin gibi genel olarak ilgilenmediğimiz pazarları saymazsak, yalnızca Google Play'de bir milyondan fazla uygulama var. Her yıl milyarlarca gelir elde eden sayısız mobil uygulama geliştirme şirketini unutmayalım.
Peki, bağımsız bir geliştirici, büyük oyuncuların olduğu bu devasa pazarda nasıl başarılı bir uygulama oluşturabilir? Hiçbir fikrim yok, başarılı bir uygulama yapmadım! Ama ben şirin bir tane yaptım ve hikayemi sizinle paylaşmak istiyorum.
Ders 1: Noktaları Birleştir
Başarı (genellikle) bir gecede olmaz ve bu benim ilk uygulamam değil. 4 milyondan fazla insanın anlayamayacağı bir dilde 30.000'den fazla kullanıcısı olan Makedon Ortodoks Takvimi gibi hafta sonu beklenmedik gelişme hitlerinden , medyada yoğun olarak yer alan bir uygulama olan TweetsPie gibi daha başarılı başarısızlıklara kadar uzanan bir yelpazem var. 600'den fazla aktif kullanıcıdan oluşan korkunç kullanıcı tabanı. Orada bir sürü ders var!
Bu uygulamalar, “Kullanıcı adı verilen zor yaratık”ın zihnini biraz daha iyi anlamama yardımcı olurken, bana ilham veren şey iki saatlik bir projeydi. Başlangıçta beni milyoner yapmak için geliştirilen, Google her dolardan 30 sent aldığı için 1.428.571 kullanıcı uygulamayı satın aldığında, Dolar Uygulaması tüccar hesabımı test etmek için yapıldı.
Yıllar sonra, mutlu bir anneden, uygulamam ona her sarıldığında oğlu gülümsediğinden beri harcadığı en iyi dolar olduğunu belirten bir e-posta alacağımı bilmiyordum.
Ve bir fikir böyle doğdu! Neden sarılmak için temel insan ihtiyacını kullanıp onu güzelleştirmeyesiniz? Belirli bir hedef kitle için etkileşimli, zorlu, kullanımı eğlenceli ve paylaşması daha da eğlenceli hale getirin.
Ders 2: Android Market'i Anlayın
Yukarıda bahsettiğim her şey bir canlı duvar kağıdı uygulamasına eklendi. Temelleri tahmin etmek o kadar da zor değil. Android, iOS'tan daha büyük bir pazar payına sahiptir, ancak iOS kullanıcıları daha fazla satın alır. Mesajlaşma uygulamaları çılgınca popüler, ancak freemium oyunları kazançların zirvesinde. Çin, Hindistan, Brezilya ve Rusya yükselen pazarlar, ancak harcama alışkanlıkları yok. Daha fazla bilgi için App Annie Dizini'ni okuyabilirsiniz.
Peki bir canlı duvar kağıdı uygulaması buna nasıl uyuyor? Her şeyden önce, canlı duvar kağıdı bir Android şeyi olduğu için platformların çoğunu ortadan kaldırır. İkincisi, bu özellik Android 2.1'de eklendi, bu nedenle geniş bir topluluğa ve birkaç güzel örneğe sahip. En önemlisi Paperland ve Roman Nurik'in açık kaynak Muzei'si, muhtemelen Android geliştirme için en iyi referans noktası.
Dışarıda çok sayıda canlı duvar kağıdı olsa da, çoğu manzara/hava durumu kategorisine girer ve çok azı aşırı sevimlilik kategorisine girer. Bu, değiştirmek ve tamamen farklı bir nedenle kilidini açmış olsanız bile, telefonunuzun kilidini her açtığınızda size bir gülümseme veren bir şey sunmak istediğimiz bir şey. Gece yatmadan önce ya da sabah alarmınızı kapattığınızda size sarılmanız için size küçük şirin bir mutluluk demeti verdik. Ve daha da iyisi, onu kişisel ve özelleştirilebilir hale getirin.
Lafı daha fazla uzatmadan ve teknik detaylara geçmeden önce size gururla sunuyorum: Ooshies - Canlı Duvar Kağıdı
Şu özelliklere sahiptir:
- seni kucaklayan ücretsiz canlı duvar kağıdı uygulaması
- Aralarından seçim yapabileceğiniz 12 benzersiz ooshi
- ücretsiz, kilitlenemez ve satın alınabilir içerik
- güncel hava durumu güncellemeleri
- sosyal oturum açma ve veri senkronizasyonu
- mevsimsel selamlar
- birçok sürpriz
- bir ninja kedi
- sarılmaktan bahsetmiş miydik?
Ders 3: Gerçekleştirmeye Çalışın
Ooshies oldukça basit bir Android uygulaması fikri gibi görünüyordu. Bir arka plan boyayın, bazı bulutları ve yıldızları kaplayın, üstüne balonlu bir ayı koyun ve gitmeye hazırsınız. Ama hayır, bu Android! Kolay görünen şey genellikle oldukça zordur ve aynı yaygın hataları defalarca tekrarlama eğilimindeyizdir. Karşılaştığım zorlukların kısa bir özeti:
Donanım hızlandırma - GPU bu konuda çok daha iyiyken neden CPU'yu kullanarak çizim yapasınız ki? Bir tuval üzerine bitmap çizmenin donanımla hızlandırılamayacağı ortaya çıktı. En azından şimdilik değil.
OpenGL - donanım hızlandırma istiyorsak, OpenGL ES veya daha iyisi, işin çoğunu bizim için yapan bir çerçeve kullanmamız gerekir.
Bitmap yükleme - iyi bilinen bir bellek tüketimi sorunu. Tek bir pikseli görüntülemek için #ARGB'deki her kanal için 1 bayt [0-255] bellek ayırmamız gerekiyor. Ayrıca kullandığımız görüntüler genellikle cihazın ekranından daha yüksek çözünürlüğe sahiptir. Hepsini yüklemek hızlı bir şekilde OutOfMemroyException ile sonuçlanacaktır.
Ana sayfa başlatıcıları - canlı duvar kağıdı, ana başlatıcı işleminde barındırılacaktır ve farklı başlatıcılar, canlı duvar kağıdı hizmetine (en önemlisi Nova ve TouchWiz) farklı geri aramalar verme eğilimindedir.
Pil ömrü - doğru yapılmazsa, canlı duvar kağıtları ve widget'lar çok fazla pil tüketebilir. Lollipop (Android 5.0) korkunç pil ömrüyle ilgili tüm vızıltılarla, ilk uygulamanız canlı duvar kağıdı olacak.
Yani, bir bitmap'i üst üste bindirmek, bir tuval üzerine boyamak ve ardından dokunarak sarılmak için kareleri değiştirmek, CPU'da yapılsa bile çok önemli görünmüyor, değil mi? Bu doğru, sorun değil. Ancak, kim statik bir canlı duvar kağıdı ister? Amacı yener. Duvar kağıdı, dokunuşlarınıza cevap vermeli, ana ekranlarınızı kaydırdıkça hareket etmeli, rastgele iyilikler yapmalı ve sizi mutlu etmeli.
Ve bunun için bir Android geliştirme hilesi var. 2 boyutlu bir alana derinlik eklemek için paralaks etkisi adı verilen bir terim vardır. Kendinizi bir araba sürerken hayal edin. Size yakın olan ev, uzaktaki dağdan daha hızlı hareket eder. Bir tuval üzerinde nesneleri farklı hızlarda hareket ettirerek aynı etki elde edilebilir. Hepsi aynı düzlemde olmasına rağmen, beyniniz daha hızlı hareket eden nesneleri size daha yakın olarak algılar. Alt gölge eklemeye çok benzer şekilde, paralaks efekti de bir z ekseni ekler.
Ve burası kıyametin koptuğu yer! Ooshie'yi, hava durumu kaplamasını ve arka planı farklı hızlarda hareket ettiren çoğu cihazda, önemli kare hızı düşüşü sağlar. Tek bir çerçevenin nasıl çizildiği aşağıda açıklanmıştır:
canvas.drawBitmap(background, 0 - offsetX / 4, 0, null); canvas.drawBitmap(weatherOverlay, 0 - offsetX / 2, 0, null); if (!validDoubleTap) { canvas.drawBitmap(ooshieNormal, positionX - offsetX, positionY, null); } else { canvas.drawBitmap(ooshieTapped, positionX - offsetX, positionY, null); }
offset
, kullanıcının kaydırdığı mesafenin yüzdesidir. Duvar kağıdı motorunun sağladığı bir geri aramadır:
@Override public void onOffsetsChanged(float xOffset, float yOffset, float xOffsetStep, float yOffsetStep, int xPixelOffset, int yPixelOffset){ super.onOffsetsChanged(xOffset, yOffset, xOffsetStep, yOffsetStep, xPixelOffset, yPixelOffset); // athe current offset should be a fraction of the screen offset to achieve parallax if (!isPreview()) { float newXOffset = xOffset * 0.15f; wallpaperDrawHelper.setOffsetX(newXOffset); if (isVisible() && hasActiveSurface) { wallpaperDrawHelper.drawFrame(false); } } }
OpenGL ile nasıl çalışılacağını bilseydim tüm bunların gereksiz olacağını belirtmeliyim! Şu anda sahip olduğumuzdan daha karmaşık bir şey bir donanım hızlandırması gerektireceğinden, YAPILACAKLAR listemde. Ancak şu an için daha akıllı değil, daha çok çalışmam gerekiyor (Yorumlardaki önerilere açığım). İşte yaptığımız şey:
4. Ders: Elinizdekilerle Çalışın
minSdk=15
girişiminin büyük bir destekçisi olarak başından beri tüm 2.x cihazlarını ortadan kaldırdık. Geriye dönük uyumluluğu koruma çabası, telefonlarını yükseltemeyen\isteksiz kullanıcılardan elde edilecek olası gelirden daha fazladır. Bu nedenle, çoğu durumda, istenirse paralaksı devre dışı bırakmak için eklenen bir seçenekle sorunsuz bir deneyim elde edebileceğiz.

Bir başka büyük optimizasyon, bitmap'leri nasıl ele aldığımızdır. Üç yerine iki bitmap çizerek çok benzer bir paralaks etkisi elde edilebilir:
Ooshie kaplaması - kırpılmış ve dikkatlice ölçeklenmiş Ooshie bitmap (aksesuarla donatılabilir)
Birleşik kaplama - Ooshie hızının çok küçük bir kısmıyla hareket eden birleşik bir arka plan ve hava durumu bitmap
Bu Android geliştirme hilesi, bellekten tasarruf sağlar ve hafif bir paralaks efekti bozulması için çizim süresini hızlandırır.
Ana ekranları kaydırırken, çerçeveler oldukça sık çizilecektir (ideal olarak saniyede 30 defadan fazla). Ana ekran görünmediğinde (bazı kilit ekranları, bazı uygulama çekmeceleri, uygulamaları açma/değiştirme vb.) CPU kullanımını en aza indirmek için bunları çizmemek çok önemlidir.
Bunların hepsi hava durumu güncellemeleriyle yakından bağlantılı. Başlangıçta, hava durumunu senkronize etmek için her iki saatte bir tekrarlanan bir görev vardı, ancak bu gerçekten aşırıya kaçmıştı. Kullanıcı duvar kağıdını göremiyorsa, hava durumu bilgisi önemsizdir. Şimdi, hava durumu güncellemeleri yalnızca duvar kağıdı görünür olduğunda gerçekleşir.
long lastUpdate = prefStore.getLong(SharedPrefStore.Pref.WEATHER_TIMESTAMP); if (System.currentTimeMillis() - lastUpdate > Consts.WEATHER_UPDATE_INTERVAL){ // update the weather if obsolete Intent intent = new Intent(getApplicationContext(), WeatherUpdateService.class); startService(intent); }
Temel olarak, bellek için optimize edilmiş sorunsuz bir yazılım bitmap çizimi için kontrol listesi:
- Bitmap'leri bir kez birleştirin
- Daha az bitmap çizin
- Yalnızca talep üzerine yeniden çizin
- Arka plan görevlerinden kaçının
- Kullanıcılara süreç üzerinde biraz kontrol sağlayın
Ders 5: Test edin. Ölçek. Ölçek
Bunun ne kadar önemli olduğunu vurgulayamam! Asla, ASLA tekrar ediyorum, uygulamanızı test etmeden önce yayınlayın! Ve, testi SİZ yapmanız gerektiğini söylemiyorum. Kodu sen yazdın, nasıl çalıştığını biliyorsun ve beklentileri bilerek sonuca etki ediyorsun. JUnit testinden (tavsiye edilmesine rağmen) değil, aşamalı sunumlardan, yani alfa ve beta testlerinden bahsetmiyorum.
Android yazılım geliştirme ile ilgileniyorsanız, terimler basittir, ancak işte kısa bir özet:
Alfa test kullanıcıları - ekip arkadaşlarınızdan ve sektördeki kişilerden, tercihen Android geliştiricilerinden oluşan küçük bir grup insan. Şanslar, ileri teknoloji cihazlara sahip olacaklar ve geliştirici seçenekleriyle oynayacaklar. Size yığın izleri, hata raporları gönderecekler ve hatta size bazı kod/UI optimizasyon ipuçları ve püf noktaları verecekler. Kısmi/eksik özelliklere sahip erken sürümler için mükemmeldir.
Beta test kullanıcıları - çeşitli demografik özelliklere sahip çok daha geniş bir kitle. Kararlı sürümler burada yayınlanmalıdır. Ninja seviyeniz çok yüksek olsa bile, tüm olası Android dağıtımlarını ve insanların telefonlarını kullanma biçimlerini hesaba katmayı bırakın, asla tahmin edemezsiniz.
Alfayı geçtiğimizde, işimizin bittiğini sanıyordum. Ama oğlum yanılmışım?! Tüm Android kullanıcılarının en son yazılıma sahip Nexus cihazlarına sahip olmadığı ortaya çıktı! Kim bilir? :)
İşte bu açıklamaya dayalı bazı Android geliştirme sorunları:
Farklı başlatıcıların farklı varsayılan ana ekranları vardır - genellikle ilk veya orta olan ve bildiğim kadarıyla konumunu bilmenin bir yolu yoktur.
Varsayılan ana ekran konumunu bilmeden Ooshie'yi ortalamak zordur - bu nedenle paralaks ofsetini ayarlamak için ayar kaydırıcısı.
Ortalama bir kullanıcı paralaks ofsetinin ne anlama geldiğini bilmez - ayarlar sayfasında çok daha basit terminoloji kullanılmalıdır.
Rastgele bir kullanıcı bir sonraki özelliğinizi önerecektir.
Bu nedenle, tüm beta test kullanıcılarımıza yaptıkları sıkı çalışma için teşekkür etmek istiyorum. Umarım en son özelliklerin tümüne herkesten önce sahip olmak, kendilerini adamalarının karşılığında iyi bir ödül olur. İsterseniz, Google+ Beta Topluluğumuzun da bir parçası olabilirsiniz.
6. Ders: Bırakın Veriler Konuşsun
Bugün öne çıkan bir Android uygulaması yapmak, 2009'da hiç olmadığı bir hesap makinesi uygulaması yapmaktan biraz daha zor. Mükemmel uygulamayı yapmak zor. Esas olarak, mükemmellik bakanın gözündedir. Benim için iyi olan, mutlaka sizin için iyi olduğu anlamına gelmez. Bu yüzden uygulamanın büyümesine izin vermek önemlidir. Yeni özellikler için yol haritası kontrol listemiz, 2015'in tamamı için yeterli çalışmamız olduğunu gösteriyor. Diğer şeylerin yanı sıra yakında şunları da ekleyeceğiz:
- Sesler
- mevsimlik arka planlar
- Özelleştirmeler (arka plan rengi, hava durumu paketleri, ooshie görünümleri vb.)
- Bölgeye özgü ooshiler (ör. babushkas)
- Bir sürü yeni ooshi ve onları açmanın yolları
Şimdi, her şey bitene kadar uygulamayı beta sürümünde tutmuş olabiliriz, ancak bu şekilde değerli verileri çöpe atmış oluyoruz. Tüm beta test kullanıcıları, günlerinin bir bölümünü size geri bildirim göndermek için ayırmazlar. Geri bildirim almak için araçları kullanmaktan yararlanabileceğiniz yer burasıdır. Kullanım verilerini toplamak için Google Analytics, Flurry, Mixpanel, Crashalytics, ACRA vb. kullanabilirsiniz.
Örneğin, verileri analiz ederek, kullanıcıların ayarlar düğmesini çok fazla tıklamadığını fark ettik, bu yüzden daha belirgin hale getirdik ve ayarları değiştirmek için hızlı bir eğitim ekledik.
Bu bir arka plan süreci olmasına rağmen, kullanıcı deneyimini daha da geliştirmek için kullanılabilir. Neden kullanıcıya kaç kez göstermiyorsunuz:
- o bir kucaklama aldı
- kaç yağmurlu gün bir gülümsemeyle aydınlandı
- bir mini oyunla bir Ooshie'nin kilidini açmak için kaç dokunuşa ihtiyaç vardı
- kaç arkadaşın uygulamayı senin yüzünden yükledi
Bu önemlidir, çünkü eylemleri için sonuçlar sağlar. Kullanıcıları pasif içerik tüketicisi yaparak eğitim sistemimizin yaptığı hatayı yapmayın. Onları sorumlu yap. Onlara kendi cihazlarını kontrol etme ve kendi kişisel deneyimlerini yaratma seçeneği sunun. Tüm bunları, ilk sıçramada bir gülümsemeyi çalan şirin bir pakette paketlemeyi başarırsanız, kullanıcıdan içeriğin kilidini açmak için spam gibi iyilikler istemek çok da zor olmaz.
Sonunda, bir rehber olarak bu verilere dayanarak Android uygulama geliştirmenizi geliştirmeniz gerekir. Öncelikle anneler/çocuklar için tasarlanmış olsa da, bu uygulama diğer demografilerde popüler hale gelebilir. Orijinal vizyonumuza uymayabilir, ancak kullanıcıların ihtiyaçları karşılanmalıdır. Aksi takdirde yapabilecek birini bulurlar.
Çözüm
En başarılı başarısızlığıma dönelim TweetsPie. Birkaç ödüle ve geniş medya kapsamına rağmen, uygulama kullanıcılarını elinde tutamadı (nedenleri bu makalenin kapsamı dışındadır).
Başarı her zaman görünür değildir. Tüm deneyim sayesinde çok şey öğrendim. Çeşitli etkinliklerde ve hackathonlarda bir startup olarak nasıl başarısız olunur (değil) üzerine en azından bir düzine ders verdim ve Toptal'da birkaç müşteri kazanmayı başardım.
Daha da önemlisi, bu kılavuzdaki ipuçlarını ve püf noktalarını takip ederek aynı Android geliştirme hatalarını Ooshies ile tekrarlamamaya çalışıyorum.
Bu uzun rehberi tamamlamak için, başarı olarak tanımladığımız şey, sonraki aşamada, başlangıçta hedef olarak belirlediğimiz şeyle sıkı sıkıya bağlıdır. En yaygın başarı ölçüsü elbette çok para kazanmaktır. Uygulamanız başarılı olsun ya da olmasın, bunu gerçekleştirmeye çalışmalısınız ve sonunda daha iyi bir insan olacağınıza inanın (umarım OpenGL öğrenmeyi başaran biri). Yeni arkadaşlar, az düşman edineceksiniz ve eğer yeterince şanslı/akıllıysanız birçok kullanıcıyı mutlu edeceksiniz.
Denemek için web sitemizi kontrol edebilir veya Ooshies'i indirebilirsiniz.