Content tagged android

Apps für Android 4 fit machen

posted on

Im Play-Store gibt es einige Apps zur Vorbereitung auf Funk- und Sportbootführerscheine von mir. Um eine möglichst große Zahl von Nutzern zu erreichen, habe ich die Anwendungen kompatibel zu Android 2.1 entwickelt. – Für mich hieß das, dass ich bei der Erstellung für die Anwendungen das API-Level 7 als „Project Build Target“ benutzt habe.

Ergebnis dieser Vorgehensweise ist, dass auch Telefone mit einer neueren Version von Android die Anwendung in einer Art „Kompatibilitätsmodus“ ausführen. In diesem Modus wird die ganze Oberfläche möglichst genau so gezeichnet wie es unter der alten Version der Fall war. Dies soll sicherstellen, dass auch eine Anwendung, die sich z.B. genau darauf verlässt wie groß ein Button zu sein hat auch Buttons in genau dieser Größe vorfindet.

Schauen wir uns das ganze zuerst in Bildern an:

Android-2.1-kompatibler Modus von Jelly Beans (Android 4.1)

Originäre Darstellung auf Jelly Beans (Android 4.1, Telefon mit Hardwaretasten)

Die Unterschiede hier sind:

Die notwendigen Änderungen damit neuere Android-Versionen nicht in den Kompatibilitätsmodus schalten sind minimal und benötigen keine einzige Änderung am Programmcode. Lediglich ein paar Änderungen in den XMLs der Anwendung sind notwendig.

AndroidManifest.xml

Die wichtigste Änderung, die vorzunehmen ist, befindet sich in der Datei AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="eu.wimmerinformatik.sbfs"
    android:installLocation="auto"
    android:versionCode="5"
    android:versionName="1.4" >

    <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="16" />

    <application
        android:icon="@drawable/ic_launcher_sbfs"
        android:label="@string/app_name" >
        <activity
            android:name=".SBFSTrainerActivity"
            android:label="@string/app_name" >

            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <activity
            android:name="eu.wimmerinformatik.sbfs.QuestionAsker"></activity>

        <activity
            android:name=".StatisticsActivity"></activity>
    </application>
</manifest>

Die hier wichtige Änderung ist das android:targetSdkVersion="16". Diese Angabe bedeutet, dass die Anwendung bis SDK Release 16 (= Android 4.1) getestet ist und keine Kompatibilitätseinstellungen für ältere Android-Versionen benutzt werden müssen. Diese Änderung sorgt dafür, dass Android ab Version 3.0 das Holo-Theme für die Darstellung der Anwendung nutzt. D.h. die neuen Widgets werden benutzt und das App-Icon erscheint in der Action-Bar, die überhaupt erst hiermit aktiviert wird.

Menü-XML-Dateien

Eine weitere Änderung ist in den XML-Dateien, die die Menüs der Anwendung definieren notwendig:

<?xml version="1.0" encoding="utf-8"?>

<menu
    xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/statistics"
        android:visible="true"
        android:title="@string/menuStatistics"
        android:enabled="true"
        android:showAsAction="ifRoom"
        android:icon="@drawable/ic_statistics"></item>

    <item
        android:id="@+id/resetTopic"
        android:title="@string/menuResetTopic"
        android:titleCondensed="@string/menuResetTopicCondensed"
        android:visible="true"
        android:enabled="true"
        android:showAsAction="never"></item>

</menu>

Neu hier eingefügt sind die Attribute android:showAsAction. Mit diesem Attribut und dem Wert „ifRoom“ habe ich festgelegt, dass ich den Menüeintrag für die Statistik gerne direkt in der ActionBar sehen würde (wenn Platz dafür ist). Mit dem Wert „never“ lege ich fest, dass der Menüeintrag zwar fit für neuere Android-Versionen ist, aber nicht direkt in der ActionBar angezeigt werden soll.

Eclipse-Einstellung

Zuletzt muss noch Eclipse gesagt werden, dass es die neuen Einträge in den XML-Dateien auch akzeptiert. Hierzu werden im Kontextmenü des Projektes die Properties ausgewählt. Auf dem Tab „Android“ wird als „Project Build Target“ „Android 4.1“ ausgewählt.

Die App wird damit jetzt mit dem SDK für Jelly Beans übersetzt, das die neuen Einträge im XML kennt und verarbeiten kann. Da in der AndroidManifest.xml als minSdkVersion die 7 angegeben ist, entsteht jedoch eine APK-Datei, die auch von älteren Android-Versionen akzeptiert wird.

Achtung, diese Einstellung bewirkt, dass der Compiler einen nicht mehr aufhält, wenn man Klassen nutzt, die nicht auf allen Android-Versionen, die man unterstützen möchte vorhanden sind. Der Programmierer ist jetzt selbst dafür verantwortlich sicherzustellen, dass die App unter allen als kompatibel markierten Android-Versionen auch wirklich auffähig ist. Das heißt: es wird noch viel wichtiger, dass man die App vor der Veröffentlichung gut testet und diese Tests unter verschiedenen Android-Versionen auszuführen.

Android 4.0.3+ überholt Version 2.3.3+

posted on

Diese Woche hat für die erste meiner Anwendungen (SKS-Trainer) die Anzahl der Installationen auf Android 4.0.3+ die der Installationen auf Android 2.3.3+ überholt. Bei meinen anderen Apps – vor allem denen für die Funkscheine – hat letztere die Nase noch vorn. Nach den Zahlen von Google ist Android 2.3.3+ auch an sich noch immer die am häufigsten genutzte Version des Handybetriebssystems.

Ich biete fünf Android-Apps im Play Store an. All diese Programme richten sich an annähernd die gleiche Zielgruppe: Anwender, die sich auf einen Segelschein vorbereiten und die Theoriefragen lernen wollen.

VersionDurchschnitt lernenSportboot binnenSKSUBISRCLRC
Android 2.3.3+56,61 %45,1 %40,7 % 42,0 %45,5 %49,5 %
Android 2.215,51 %7,5 %6,6 % 9,0 %7,5 %8,0 %
Android 4.0.3+15,23 %38,7 %41,5 % 33,5 %32,0 %29,0 %
Android 3.25,72 %6,2 %9,0 % 13,0 %12,0 %12,0 %
Android 2.13,87 %1,7 %0,9 % 1,5 %1,0 %1,5 %
Android 3.12,36 %0,5 %0,9 % 0,5 %1,0 %
Android 2.30,32 %0,1 %0,1 %
Android 4.00,14 %0,1 %0,1 % 0,5 %
Android 3.00,13 %0,1 %0,1 % 0,5 %

In vorstehender Tabelle befinden sich die Android-Versionen nach denen Google die Verteilung unterscheidet. Ich habe dabei nur die Versionen berücksichtigt auf denen meine Anwendungen lauffähig sind. (Android 1.5 und 1.6 hätten zusammen einen Anteil von 0,62 % im Play-Store in der Kategorie „Lernen“.)

In der Spalte „Durchschnitt lernen“ steht die Verteilung der Android-Versionen wie sich durchschnittlich bei Anwendungen vorkommt, die in den Bereich „Lernen“ einsortiert sind. In den anderen Spalten stehen die Verteilungen für die Verschiedenen Apps von mir.

Screenshot aus der Play-Konsole, der die Verteilung auf Android-Versionen
darstellt.
Verteilung der Installationen meines SKS-Trainers auf Android-Versionen

An meinen Zahlen fällt dabei auf, dass ich einen deutlich überdurchschnittlichen Anteil von Nutzern habe, die meine Anwendungen mit Android 3.0 oder höher nutzen (Tabletts und neuere Mobiltelefone). Mein Anteil an Nutzern mit älteren Versionen dagegen ist unterdurchschnittlich.

Woher könnte dies kommen? Nun zuerst ist festzustellen, dass die Anteile die Google für den Play-Store ermittelt weltweit ermittelt werden. Meine Apps dagegen richten sich fast ausschließlich an Nutzer in Deutschland, da damit auf deutsche Segelscheine gelernt wird. Außerdem ist festzustellen, dass meine Apps natürlich mit Seglern (und Motorbootfahrern) eine thematisch deutlich eingeschränktere Zielgruppe ansprechen. Als dritten Grund könnte man noch annehmen, dass meine Apps überhaupt erst seit unter drei Monaten verfügbar sind. In die allgemeine Statistik von Google zählen dagegen auch Programme, die auf älteren Geräte installiert wurden, die inzwischen ungenutzt in irgendeiner Schublade liegen.

Meine Zahlen für meine Apps von oben beziehen sich übrigens auf derzeit knapp 5.000 Installationen. Mit Abstand am meisten installiert sind die Anwendungen auf dem Samsung Galaxy S2 (knapp 20% der Installationen). Für dieses Gerät gab es ursprünglich Android in der Version 2.3, seit Februar 2012 gibt es Version 2.3.6 und seit April ist Android 4.0.3 für dieses Gerät als Update verfügbar.


Unless otherwise credited all material Creative Commons License by Matthias Wimmer