Tipps für die Entwicklung einer Android-App: Meine Lektionen gelernt
Veröffentlicht: 2022-03-11Hallo! Ich bin Ivan und schon seit einiger Zeit Entwickler von Android-Apps. So scheint es zumindest. Damals (wir sprechen von 2009) war Android noch ein Kleinkind und seitdem habe ich dem kleinen grünen Männchen beim Wachsen zugesehen. Ich fürchte, vor einiger Zeit hat es Android geschafft, mir entwachsen zu sein.
Heutzutage ist Android nicht nur auf Zehntausenden verschiedener Telefone und Tablets zu finden. Es ist an Ihrem Handgelenk, in Ihrem Wohnzimmer, in Ihrem Auto, und sobald wir anfangen, unbelebten Objekten IP-Adressen zuzuweisen, wird es so ziemlich überall um uns herum sein. Selbst für einen erfahrenen Android-Entwickler gibt es viel zu tun!
Außerdem gibt es über eine Million Apps allein bei Google Play, Amazon AppStore oder Märkte, an denen wir im Allgemeinen nicht interessiert sind, wie China, nicht mitgezählt. Vergessen wir nicht die unzähligen Unternehmen für die Entwicklung mobiler Apps, die jedes Jahr Milliardenumsätze erwirtschaften.
Wie also kann ein unabhängiger Entwickler in diesem riesigen Markt mit großen Playern eine erfolgreiche App erstellen? Ich habe keine Ahnung, ich habe keine erfolgreiche App gemacht! Aber ich habe ein süßes gemacht, und ich möchte meine Geschichte mit Ihnen teilen.
Lektion 1: Verbinde die Punkte
Der Erfolg stellt sich (normalerweise) nicht über Nacht ein und dies ist nicht meine erste App. Ich habe solche, die von unerwarteten Wochenend-Entwicklungshits wie dem mazedonisch-orthodoxen Kalender mit über 30.000 Benutzern in einer Sprache, die nicht mehr als 4 Millionen Menschen verstehen, bis zu erfolgreicheren Fehlschlägen wie TweetsPie , einer App mit starker Medienberichterstattung und a schreckliche Benutzerbasis von knapp über 600 aktiven Benutzern. Da gibt es jede Menge Unterricht!
Diese Apps halfen mir zwar, den Geist der „flüchtigen Kreatur namens User“ ein bisschen besser zu verstehen, aber diejenige, die mich inspirierte, war ein zweistündiges Projekt. Ursprünglich entwickelt, um mich zum Millionär zu machen, nachdem 1.428.571 Nutzer die App gekauft hatten, da Google 30 Cent von jedem Dollar abzieht, wurde The Dollar App entwickelt, um mein Händlerkonto zu testen.
Ich wusste nicht, dass ich Jahre später eine E-Mail von einer glücklichen Mutter erhalten werde, die besagt, dass dies der beste Dollar war, den sie jemals ausgegeben hat, seit ihr Junge jedes Mal lächelte, wenn meine App ihn umarmte.
Und so wurde eine Idee geboren! Warum nicht das grundlegende menschliche Bedürfnis nach einer Umarmung nutzen und es hübsch machen? Machen Sie es für ein bestimmtes Publikum, interaktiv, herausfordernd, unterhaltsam zu verwenden und noch unterhaltsamer zu teilen.
Lektion 2: Den Android Market verstehen
All die Dinge, die ich oben erwähnt habe, summieren sich zu einer Live-Wallpaper-App. Die Grundlagen sind nicht so schwer zu erraten. Android hat einen größeren Marktanteil als iOS, aber iOS-Benutzer kaufen mehr. Messaging-Apps sind sehr beliebt, aber Freemium-Spiele übertreffen die Einnahmen. China, Indien, Brasilien und Russland sind aufstrebende Märkte, denen es jedoch an Konsumgewohnheiten mangelt. Sie können den App Annie Index für weitere Einblicke lesen.
Wie passt also eine Live-Wallpaper-App dazu? Zunächst einmal eliminiert es die meisten Plattformen, da ein Live-Hintergrundbild eine Android-Sache ist. Zweitens wurde diese Funktion in Android 2.1 hinzugefügt, sodass es eine große Community und einige schöne Beispiele gibt. Allen voran Paperland und Roman Nuriks Open-Source-Muzei, wahrscheinlich der beste Bezugspunkt für die Android-Entwicklung.
Obwohl es viele Live-Hintergründe gibt, fallen die meisten unter die Kategorie Landschaft/Wetter und nur sehr wenige unter die Kategorie Niedlichkeitsüberlastung . Das wollten wir ändern und etwas anbieten, das Ihnen jedes Mal ein Lächeln schenkt, wenn Sie Ihr Telefon entsperren, obwohl Sie es aus einem ganz anderen Grund entsperrt haben. Wir haben dir ein süßes kleines Bündel Freude geschenkt, um dich zu umarmen, bevor du abends ins Bett gehst oder wenn du morgens deinen Wecker ausschaltest. Und noch besser, machen Sie es persönlich und anpassbar.
Kurzerhand und bevor wir auf technische Details eingehen, präsentiere ich Ihnen voller Stolz: Ooshies - The Live Wallpaper
Es verfügt über:
- kostenlose Live-Wallpaper-App, die Sie umarmt
- 12 einzigartige Ooshies zur Auswahl
- kostenlose, freischaltbare und käufliche Inhalte
- aktuelle Wetterberichte
- Social Login und Datensynchronisierung
- saisonale Grüße
- viele Überraschungen
- eine Ninja-Katze
- haben wir Umarmungen erwähnt?
Lektion 3: Versuchen Sie, es möglich zu machen
Ooshies schien eine ziemlich einfache Idee für eine Android-App zu sein. Malen Sie einen Hintergrund, legen Sie einige Wolken und Sterne darüber, setzen Sie einen Bären mit einem Ballon darauf und Sie können loslegen. Aber nein, es ist Android! Was einfach erscheint, ist oft ziemlich schwierig und wir neigen dazu, dieselben häufigen Fehler immer und immer wieder zu wiederholen. Hier ist ein kurzer Überblick über die Herausforderungen, denen ich gegenüberstand:
Hardwarebeschleunigung – warum mit der CPU zeichnen, wenn die GPU so viel besser darin ist? Nun, es stellt sich heraus, dass das Zeichnen von Bitmaps auf einer Leinwand nicht hardwarebeschleunigt werden kann. Zumindest vorerst nicht.
OpenGL - wenn wir Hardwarebeschleunigung wollen, müssen wir OpenGL ES oder noch besser ein Framework verwenden, das die meiste Arbeit für uns erledigt.
Laden von Bitmaps - ein bekanntes Problem mit dem Speicherverbrauch. Wir müssen jedem Kanal im #ARGB 1 Byte [0-255] Speicher zuweisen, um ein einzelnes Pixel anzuzeigen. Auch die von uns verwendeten Bilder haben oft eine höhere Auflösung als das Display des Geräts. Wenn sie alle geladen werden, führt dies schnell zu einer OutOfMemroyException.
Home-Launcher – das Live-Wallpaper wird im Home-Launcher-Prozess gehostet, und verschiedene Launcher neigen dazu, unterschiedliche Rückrufe an den Live-Wallpaper-Dienst zu geben (insbesondere Nova und TouchWiz).
Akkulaufzeit - Wenn es nicht richtig gemacht wird, können die Live-Hintergründe und die Widgets viel Akku entladen. Bei all der Aufregung um die schreckliche Akkulaufzeit von Lollipop (Android 5.0) wird die erste App, die es gibt, das Live-Hintergrundbild sein.
Also eine Bitmap zu überlagern, auf eine Leinwand zu malen und dann Frames per Berührung zu wechseln, um eine Umarmung zu geben, scheint keine große Sache zu sein, selbst wenn es auf der CPU gemacht wird, oder? Das ist richtig, es ist kein Problem. Aber wer will schon ein statisches Live-Wallpaper? Es übertrifft den Zweck. Das Hintergrundbild sollte auf Ihre Berührungen reagieren, es sollte sich bewegen, wenn Sie durch Ihre Startbildschirme scrollen, es sollte zufällige freundliche Handlungen ausführen und Sie glücklich machen.
Und dafür gibt es einen Android-Entwicklungstrick. Es gibt einen Begriff, der als Parallaxeneffekt bezeichnet wird, um einem zweidimensionalen Raum Tiefe zu verleihen. Stellen Sie sich vor, Sie fahren ein Auto. Das nähere Haus bewegt sich schneller als der Berg in der Ferne. Derselbe Effekt kann erzielt werden, indem Objekte mit unterschiedlicher Geschwindigkeit auf einer Leinwand bewegt werden. Obwohl sie sich alle in derselben Ebene befinden, nimmt Ihr Gehirn die sich schneller bewegenden Objekte als näher an Ihnen wahr. Ähnlich wie beim Hinzufügen von Schlagschatten fügt der Parallax-Effekt eine Z-Achse hinzu.
Und hier ist die Hölle los! Auf den meisten Geräten führt das Bewegen des Ooshie, der Wetterüberlagerung und des Hintergrunds mit unterschiedlichen Geschwindigkeiten zu einem erheblichen Rückgang der Bildrate. So wird ein einzelner Rahmen gezeichnet:
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); }
Der offset
ist ein Prozentsatz der Entfernung, die der Benutzer gescrollt hat. Es ist ein Callback, den die Wallpaper-Engine bereitstellt:
@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); } } }
Ich muss anmerken, dass all dies unnötig wäre, wenn ich wüsste, wie man mit OpenGL arbeitet! Es steht auf meiner TODO -Liste, da alles, was komplexer ist als das, was wir jetzt haben, eine Hardwarebeschleunigung erfordert. Aber vorerst muss ich härter arbeiten, nicht klüger (ich bin offen für Vorschläge in den Kommentaren). Also haben wir Folgendes getan:
Lektion 4: Arbeiten Sie mit dem, was Sie haben
Als großer Unterstützer der minSdk=15
Initiative haben wir von Anfang an alle 2.x-Geräte eliminiert. Der Aufwand für die Aufrechterhaltung der Abwärtskompatibilität ist größer als die möglichen Einnahmen von Benutzern, die ihre Telefone nicht aktualisieren möchten. In den meisten Fällen können wir also mit einer zusätzlichen Option zum Deaktivieren der Parallaxe ein reibungsloses Erlebnis erzielen, falls gewünscht.

Eine weitere große Optimierung ist der Umgang mit den Bitmaps. Ein sehr ähnlicher Parallaxeneffekt lässt sich erzielen, wenn man zwei statt drei Bitmaps zeichnet:
Ooshie-Overlay - getrimmte und sorgfältig skalierte Ooshie-Bitmap (kann mit Zubehör versehen werden)
Kombinierte Überlagerung – eine kombinierte Hintergrund- und Wetter-Bitmap, die sich mit einem Bruchteil der Ooshie-Geschwindigkeit bewegt
Dieser Android-Entwicklungstrick spart Speicherplatz und beschleunigt die Zeichenzeit für eine leichte Verschlechterung des Parallaxeneffekts.
Beim Scrollen der Startbildschirme werden recht oft Frames gezeichnet (idealerweise mehr als 30 Mal pro Sekunde). Es ist wichtig, sie nicht zu zeichnen, wenn der Startbildschirm nicht sichtbar ist (einige Sperrbildschirme, einige App-Schubladen, Öffnen/Wechseln von Apps usw.), um die CPU-Auslastung zu minimieren.
Dies alles ist eng mit den Wetteraktualisierungen verknüpft. Anfangs gab es eine sich wiederholende Aufgabe, die alle ein bis zwei Stunden ausgeführt wurde, um das Wetter zu synchronisieren, aber es war wirklich ein Overkill. Wenn der Benutzer das Hintergrundbild nicht sehen kann, sind die Wetterinformationen irrelevant. Wetteraktualisierungen erfolgen jetzt also nur, wenn das Hintergrundbild sichtbar ist.
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); }
Also, im Grunde ist hier die Checkliste für eine speicheroptimierte, reibungslose Software-Bitmap-Zeichnung:
- Kombinieren Sie Bitmaps einmal
- Zeichnen Sie weniger Bitmaps
- Nur bei Bedarf neu zeichnen
- Vermeiden Sie Hintergrundaufgaben
- Bieten Sie Benutzern eine gewisse Kontrolle über den Prozess
Lektion 5: Test. Prüfen. Prüfen
Ich kann nicht betonen, wie wichtig das ist! Niemals, ich wiederhole NIEMALS , geben Sie Ihre App frei, bevor Sie sie getestet haben! Und ich meine nicht, dass SIE die Tests durchführen sollten. Sie haben den Code geschrieben, Sie wissen, wie er funktioniert, und Sie beeinflussen das Ergebnis, indem Sie die Erwartungen kennen. Ich spreche nicht von JUnit-Tests (obwohl empfohlen), sondern von gestaffelten Rollouts, dh Alpha- und Beta-Tests.
Wenn Sie sich mit der Entwicklung von Android-Software beschäftigen, sind die Begriffe einfach, aber hier ist ein kurzer Überblick:
Alpha-Tester – eine kleine Gruppe von Personen, bestehend aus Ihren Teamkollegen und Personen aus der Branche, vorzugsweise Android-Entwicklern. Die Chancen stehen gut, dass sie High-End-Geräte haben und mit den Optionen der Entwickler herumspielen. Sie senden Ihnen Stack-Traces, Fehlerberichte und geben Ihnen sogar einige Tipps und Tricks zur Code-/UI-Optimierung. Perfekt für frühe Veröffentlichungen mit teilweisen/fehlenden Funktionen.
Betatester – ein viel breiteres Publikum mit unterschiedlichen demografischen Merkmalen. Stable Releases sollten hier veröffentlicht werden. Selbst wenn Ihr Ninja-Level zu verdammt hoch ist, können Sie niemals alle möglichen Android-Distributionen und die Art und Weise, wie Menschen ihre Telefone verwenden, vorhersagen, geschweige denn erklären.
Als wir die Alpha bestanden hatten, dachte ich, wir wären fertig. Aber Junge, ich habe mich geirrt?! Es stellte sich heraus, dass nicht alle Android-Benutzer Nexus-Geräte mit der neuesten Software haben! Wer würde das wissen? :)
Hier sind einige Android-Entwicklungsprobleme, die auf dieser Offenbarung basieren:
Verschiedene Launcher haben unterschiedliche Standard-Startbildschirme - normalerweise den ersten oder den mittleren, und soweit ich weiß, gibt es keine Möglichkeit, seine Position zu kennen.
Es ist schwierig, den Ooshie zu zentrieren, ohne die Standardposition des Startbildschirms zu kennen - daher der Einstellungsregler zum Anpassen des Parallaxenversatzes.
Ein durchschnittlicher Benutzer weiß nicht, was Parallax Offset bedeutet – viel einfachere Terminologie sollte auf der Einstellungsseite verwendet werden.
Ein zufälliger Benutzer wird Ihr nächstes Feature vorschlagen.
Deshalb möchte ich all unseren Beta-Testern für die harte Arbeit danken, die sie geleistet haben. Ich hoffe, dass es eine anständige Belohnung für ihr Engagement ist, die neuesten Funktionen vor allen anderen zu erhalten. Wenn Sie möchten, können Sie auch Teil unserer Google+ Beta-Community werden.
Lektion 6: Lassen Sie die Daten sprechen
Eine Android-App zu entwickeln, die sich heute von anderen abhebt, ist etwas schwieriger als eine Taschenrechner-App, als es 2009 noch keine gab. Die perfekte App zu entwickeln ist schwierig. Vor allem, weil Perfektion im Auge des Betrachters liegt. Was gut für mich ist, muss nicht zwangsläufig auch gut für dich sein. Deshalb ist es wichtig, die App wachsen zu lassen. Unsere Roadmap-Checkliste für neue Features zeigt, dass wir genug Arbeit für das ganze Jahr 2015 haben. Unter anderem werden wir bald Folgendes aufnehmen:
- Geräusche
- Saisonale Hintergründe
- Anpassungen (Hintergrundfarbe, Wetterpakete, Ooshie-Skins usw.)
- Regionsspezifische Ooshies (z. B. Babuschkas)
- Viele neue Ooshies und Möglichkeiten, sie freizuschalten
Jetzt haben wir die App vielleicht in der Beta-Phase belassen, bis alles fertig ist, aber auf diese Weise werfen wir wertvolle Daten weg. Nicht alle Betatester werden einen Teil ihres Tages damit verbringen, Ihnen Feedback zu senden. Hier können Sie von Tools zum Einholen des Feedbacks profitieren. Sie können Google Analytics, Flurry, Mixpanel, Crashalytics, ACRA usw. verwenden, um Nutzungsdaten zu sammeln.
Durch die Analyse der Daten haben wir beispielsweise festgestellt, dass Benutzer nicht oft auf die Schaltfläche „Einstellungen“ klicken, also haben wir es deutlicher gemacht und ein kurzes Tutorial zum Optimieren der Einstellungen hinzugefügt.
Obwohl dies ein Hintergrundprozess ist, kann er verwendet werden, um die Benutzererfahrung weiter zu verbessern. Warum dem Benutzer nicht zeigen, wie oft:
- er/sie wurde umarmt
- wie viele Regentage wurden durch ein Lächeln aufgehellt
- wie viele Taps benötigt wurden, um einen Ooshie mit einem Minispiel freizuschalten
- wie viele Freunde die App wegen dir installiert haben
Dies ist wichtig, weil es Konsequenzen für ihr Handeln mit sich bringt. Machen Sie nicht den gleichen Fehler, den unser Bildungssystem macht, indem Sie die Benutzer zu passiven Inhaltskonsumenten machen. Machen Sie sie verantwortlich. Geben Sie ihnen die Möglichkeit, ihre eigenen Geräte zu steuern und ihre eigene persönliche Erfahrung zu schaffen. Wenn Sie es schaffen, all dies in ein niedliches Bündel zu packen, das Ihnen beim ersten Splash ein Lächeln stiehlt, dann ist es nicht zu weit hergeholt, den Benutzer um spammige Gefälligkeiten für das Freischalten von Inhalten zu bitten.
Letztendlich müssen Sie Ihre Android-App-Entwicklung basierend auf diesen Daten als Leitfaden weiterentwickeln. Obwohl diese App in erster Linie für Mütter/Kinder gedacht ist, kann sie auch in anderen Bevölkerungsgruppen beliebt werden. Es passt vielleicht nicht in unsere ursprüngliche Vision, aber die Bedürfnisse der Benutzer müssen erfüllt werden. Sonst finden sie jemanden, der es kann.
Fazit
Kehren wir zu meinem erfolgreichsten Misserfolg TweetsPie zurück. Trotz einiger Auszeichnungen und großer Medienberichterstattung konnte die App ihre Benutzer nicht halten (die Gründe dafür würden den Rahmen dieses Artikels sprengen).
Der Erfolg ist nicht immer offensichtlich. Dank der ganzen Erfahrung habe ich viel gelernt. Ich habe mindestens ein Dutzend Vorträge darüber gehalten, wie man (nicht) als Startup auf verschiedenen Veranstaltungen und Hackathons scheitert, und es geschafft, ein paar Kunden bei Toptal zu gewinnen.
Noch wichtiger ist, dass ich versuche, die gleichen Android-Entwicklungsfehler mit Ooshies nicht zu wiederholen, indem ich die Tipps und Tricks in diesem Handbuch befolge.
Um diesen langen Leitfaden abzuschließen, ist das, was wir als Erfolg definieren, zu einem späteren Zeitpunkt eng mit dem gekoppelt, was wir uns am Anfang als Ziel gesetzt haben. Der häufigste Erfolgsmaßstab ist natürlich, viel Geld zu verdienen. Egal, ob Ihre App es schafft oder nicht, Sie müssen versuchen, es zu schaffen, und glauben Sie mir, am Ende werden Sie ein besserer Mensch (hoffentlich einer, der es schafft, OpenGL zu lernen). Sie werden neue Freunde finden, wenige Feinde, und wenn Sie Glück haben/klug genug sind, werden Sie viele Benutzer glücklich machen.
Sie können unsere Website besuchen oder Ooshies herunterladen, um es auszuprobieren.