Viewing entries in
Android

Android Smart Lock for Passwords and its pitfalls

Comment

Android Smart Lock for Passwords and its pitfalls

Recently we convinced one of our customers that Smart Lock for Passwords would be a neat feature for his app.

At the moment users have to enter their credentials on every login and every new device. We could and should increase customer satisfaction by offering a seamless transition from one installation to another.

Smart Lock for Passwords is a password management system that Google introduced in 2015. It stores third-party credentials in its safe and offers them to users who authenticate via Google, Facebook, Twitter or other accounts. Smart Lock is an alternative to Dashlane, Kaspersky Password Manager, LastPass and other password managers.

We are not talking about the entirely different Smart Lock, an intelligent screen lock, which was integrated into the Android operating system from version 5.0 onwards.

During the implementation of Smart Lock for Passwords we met several problems surrounding its container, the Google Play Services.

This blog post serves as a documentation as well as a guide for other developers that may stumble upon the same problems.

  • Google Play Service 11.8.0 and ProGuard
    Upgrading from version 11.6.2 to 11.8.0 comes with one grain of salt: Changes in the default shrinker lead to build breaks with a ProGuard configuration parser error. The solution is to downgrade to version 11.6.2 (more on that later) or to enable ProGuard for debug builds - set minifyEnabled and useProGuard to true - increased build times included (Instant Run to the rescue). Read More
     
  • Android O and AutoFill
    AutoFill shares the same keystore as Smart Lock for Passwords. It is therefor the default method for password convenience on devices with Android O and higher. This clashes with Smart Lock for Passwords. The Google Play Services 11.8.0 brought forceEnableSaveDialog() to disable this default behavior. Sadly there is no public method to set this flag on lower versions, other than using reflection or other dirty hacks. Read More

At the end we decided to stick with Smart Lock until Android O reaches a wider audience (as of January 2018 its distribution rate is less than one percent). Since we have to deal with AutoFill, we upgraded to the Google Play Services 11.8.0 and enabled ProGuard for the debug build. AutoFill is still on our todo list but at the moment we decided to deactivate it for the app by setting setImportantForAutofill.

Comment

Pixel all the way

Comment

Pixel all the way

Google präsentierte gestern eine neue Generation von Hardware in vielsagenden Farben wie Just Black, Clearly White und ... Kinda Blue.

Die Smartphone-Sparte Google Pixel erhält zwei Nachfolger: Das Google Pixel 2 von HTC erinnert mit seinen 5 Zoll noch stark an den Vorgänger und erhält die üblichen Detailverbesserungen. Einen größeren Satz nach vorne macht das Google Pixel 2 XL, welches seine 6 Zoll mit einem vergleichsweise schlanken Gehäuse kaschiert, wie man es bereits von den Edge-to-Edge-Displays eines Xiaomi Mi Mix, LG G6, Samsung Galaxy S8 oder iPhone X kennt. Darüber hinaus unterscheiden sich die Geräte lediglich in der Auflösung (2K in 18:9 statt Full HD in 16:9) und der Akkukapazität (3520 statt 2700 mAh). Der Klinkenanschluss wurde gestrichen und bleibt damit, ähnlich wie das drahtlose Laden, hinter neuen Standards und effizienteren Technologien zurück.
Neu bedeutet hier: Schnellladefunktion für sieben Stunden Akkulaufzeit innerhalb von fünfzehn Minuten und Bluetooth 5.0 für eine verbesserte Reichweite und Übertragungsgeschwindigkeit. Als kleines Highlight erwies sich eine Randnotiz: Das mit Project Treble gesetzte Ziel wurde ebenfalls erfüllt: Die Pixel 2 erhalten drei Jahre lang Betriebssystemupdates.

Die Bluetooth-Kopfhörer Pixel Buds fungierten in einer beeindruckenden Demonstration als Dolmetscher und übersetzten in Echtzeit zwischen Englisch und Schwedisch. Das erste Chromebook von Google hört auf den Namen Pixelbook und positioniert sich im oberen Mittelfeld aktueller Ultrabooks sowie vor seinem indirekten Vorgänger Pixel C dank Stiftbedienung und Chrome OS. Der Sprachassistent Google Home wird um den günstigeren Google Home Mini sowie den hochklassigen Google Home Max ergänzt.

Google Pixel Buds, Pixel 2 XL, PIxel 2, Home Mini, Home, Home XL, Clips, Daydream View, Pixelbook (v.l.n.r)

Comment

Android Oreo oder: Wie ich lernte, die Notification Channels zu lieben

Comment

Android Oreo oder: Wie ich lernte, die Notification Channels zu lieben

Download.png

Dieser Artikel greift viele Inhalte eines im März veröffentlichten Blogposts auf, die nichts an ihrer Gültigkeit verloren haben. 
Dem geneigten Leser fällt zusätzlich unsere zielsichere Prognose zur namensgebenden Süßigkeit auf.

Es scheint, als würde Android N schneller in Vergessenheit geraten als man "we're nut tellin' you" sagen kann. Während die Distributionsrate von Nougat noch immer unter 15% liegt, rollt Google seit vergangener Woche bereits den Nachfolger aus. Wie gewohnt folgen die hauseigenen Geräte der Pixel- und Nexus-Linie zuerst, doch auch Samsung, LG, HTC und die meisten anderen Hersteller versprechen baldige Updates für ihre Flagschiffe. Besitzer älterer Smartphones können wie gewohnt den Weg über Custom ROMs gehen, bei denen LineageOS (ehemals Cyanogenmod) mit seinem gewaltigen Supportkatalog zu überzeugen weiß.

Eine der interessantesten Neuerungen von Android Oreo ist etwas untergegangen und wird selbst auf den offiziellen Seiten nur am Rande erwähnt:
Project Treble ist ein weiterer Versuch, die starke Fragmentierung von Android einzudämmen. Google führt hierzu eine Schicht zwischen Android Framework und Herstellerimplementierung ein, die dazu führen soll, dass neue Versionen des Betriebssystems schneller von den Geräteherstellern adaptiert werden können. Dies verkürzt in der Theorie die Zeit, die ein Endkunde auf ein neues Update warten muss, und schafft durch die damit verbundenen Ersparnisse das Potential für einen längeren Support der Gerätehersteller.

 
treble_before.png
 
treble_after.png
 

Notification Channels erlauben die Kategorisierung von Benachrichtigungen und damit eine feingranulare Justierung von Ton, Vibration, LED und weiteren Signalen. Dies sollte das Leben derer erleichtern, deren Partner Fans von mobilen Aufbauspielen ist. Spieleentwickler tendieren nämlich dazu, keinerlei Einstellungen einzubauen, weswegen das Gerät im Störfall komplett stummgeschaltet werden muss.
Picture in Picture (PIP) ist eine spezielle Form des aus Android N bekannten Multi Window. Diese erlaubt das Übereinanderlegen zweier Apps, z. B. um ein Overlay mit Videoplayback darzustellen, wie man es bereits von Android TV oder aus der YouTube-App kennt.

Entwickler freuen sich über Schriftarten als vollwertige Ressourcen, die - analog zu String, Drawable oder Style - in XML Layouts verwendet und zur Laufzeit heruntergeladen werden können. Das neue Autofill Framework richtet sich an Passwortmanager, welche aktuell noch als Bedienungshilfe im Betriebssystem laufen. Adaptive Icons gehen einen Schritt weiter in Richtung Responsive Design und erlauben es, Icons abhängig vom Zielgerät zu maskieren.
Mit den Backgrund limits führt man fort, was unter Android 6 mit Doze und App Standby begonnen wurde: Akkulaufzeit erhöhen und Performance verbessern. Hierfür müssen Apps angepasst werden, die Background Services nutzen und deren Target auf API 26 oder höher gesetzt ist.

Comment

StarSnoopy Merchandise

Comment

StarSnoopy Merchandise

Das Design unserer neuesten App StarSnoopy gefällt uns sehr - so sehr sogar, dass das Maskottchen seinen Weg aus der App in unsere Büros gefunden hat (Bild rechts). Und weil wir Informatiker mit unseren Nerdhumor-Shirts nebenberuflich oft die Funktion einer wandelnden Litfaßsäule erfüllen, war Merchandising der nächste logische Schritt.

Der StarSnoopy-Shop öffnet nun seine Pforten und bietet eine große Auswahl an Merchandise rund um Robin, das süße Rotkehlchen aus der App. Die T-Shirts, Hoodies, Beanies und Gebrauchsgegenstände lassen sich sogar selbst gestalten in Form, Farbe und Design. So erhält jeder seinen einzigartigen StarSnoopy-Fanartikel.

Den Merchandise Shop findet ihr auf starsnoopy.de

Mich gibt's leider (noch) nicht zu kaufen

Comment

StarSnoopy - die Wunschlisten-App

Comment

StarSnoopy - die Wunschlisten-App

StarSnoopy ist unsere Antwort auf vergessene Wünsche, doppelte Überraschungen und chaotische Gruppengeschenke. StarSnoopy erinnert sich für Dich an Deine Wünsche, verhindert lange Gesichter bei der Bescherung und erleichtert die Absprache bei gemeinschaftlichen Geschenken. Sammle Deine Wünsche, teile sie mit Deinen Lieben und lass Dich überraschen. Organisiere Dich mit anderen und erfülle Wünsche, gezielt und einfach.

Wünschen. Teilen. Überraschen.

Wunschlisten sind Dreh- und Angelpunkt bei StarSnoopy. In einer Wunschliste werden alle Wünsche für einen Anlass gesammelt. Die Einladungen kannst Du über Facebook, WhatsApp, E-Mail, SMS und alle anderen bekannten Kanäle teilen - auch das Teilen via QR-Code ist möglich. Die eingeladenen Personen werden zu jeder Zeit aufgelistet, damit Du einen Überblick behältst und niemand außen vor bleibt. 
Natürlich weißt Du nicht, welche Wünsche bereits erfüllt wurden und wer sich woran beteiligt. Bis zum Tag des Anlasses soll es für Dich eine Überraschung bleiben.

Made in Germany

StarSnoopy ist das Ergebnis einer Kooperation zwischen der x-root Software GmbH und unserem Kollegen Peter Jarosz, welcher die Idee für diese App hatte. Nach über einem Jahr in der Entwicklung erscheint StarSnoopy heute für iOS und Android - kostenlos und ohne versteckte In-App-Käufe.

Weitere Informationen findest Du auf starsnoopy.de.

Comment

Room Persistence Library

Comment

Room Persistence Library

SQLite bietet sich seit jeher als Datenbanksystem für Android an. Auch wenn mittlerweile potentere Alternativen wie die dokumentenbasierten Realm oder Firebase existieren, bildet SQLite nach wie vor den Unterboden vieler Apps. Der Zugriff auf diese SQLite-Datenbanken erfolgte über ContentValues, Cursor und Raw Queries, welche aufwendig in der Einrichtung und fehleranfällig in der Wartung sind. Aus dieser Not entstanden zahlreiche Drittanbieterbibliotheken für objektrelationale Abbildungen (Object Relational Mapping, kurz ORM) greenDao, ActiveAndroid oder SugarORM und bestehende Größen wie OrmLite wurden portiert.

Auf der diesjährigen Google I/O stellte Google mit der Room Persistence Library (Room) endlich einen hauseigenen ORM für Android vor. Durch den geschickten Einsatz von Annotationen verringert Room den Boilerplate Code auf ein absolutes Minimum und nimmt uns Entwicklern einen Heidenaufwand ab, um uns der eigentlichen Geschäftslogik unserer Apps zuzuwenden. Hierbei behalten wir den vollen Funktionsumfang von SQLite, da nach wie vor Raw Queries geschrieben werden. Diese werden im Gegensatz zum Plain SQLite zur Übersetzungszeit validiert und nicht erst zur Laufzeit, wodurch Fehler vermieden und Korrekturen vereinfacht werden. Weiterhin werden Datenbankabfragen im Background Thread forciert, um ein versehentliches Blockieren der UI zu verhindern.

Grundsätzlich setzt sich die Datenbankschicht mit Room aus drei Komponenten zusammen:

  1. Datenbank
  2. Entitäten
  3. Data Access Objects (Dao)

Die Datenbank wird mit @Database annotiert und leitet als abstrakte Klasse von RoomDatabase ab. Sie konfiguriert Datenbankversion und -namen sowie unterstützte Entitäten, Type Converter und benötigte Migrationspfade. Weiterhin dient sie als Sammelstelle für verwendete DAOs.

Entitäten werden mit @Entity annotiert und bestehen in ihrer schlanksten Form aus nicht mehr als public fields. Felder, die ignoriert werden sollen, kennzeichnen wir mit @Ignore. Für nicht-unterstützte Datentypen können Type Converter geschrieben werden, welche z. B. die DateTime aus JodaTime in ein Objekt vom Typ Long oder String umwandeln.

Data Access Objetcs werden mit @Dao annotiert und dienen als Zugriffsschicht auf die Datenbank. Für Standardaktionen wie @Insert, @Update oder @Delete muss nichts weiter als die entsprechende Annotation gesetzt werden. Abfragen werden mit @Query und einem Raw Statement definiert, welchem Parameter übergeben werden können.

Zu diesen drei Komponenten gesellt sich bei Bedarf noch das ViewModel hinzu, welches bei den neuen Lifecycle Aware Components eingesetzt wird.

Aus diesen Komponenten erstellt Room zur Übersetzungszeit die entsprechenden Implementierungen, womit der produzierte Code einsehbar aber nach wie vor komplett abstrahiert bleibt. Aktuell bereiten uns noch Generics Probleme, die wir z. B. für einen BaseDao verwenden, welcher Standardmethoden wie insert(), delete() oder findById() implementiert. Room verliert die Typparameter und kann mit dem unbekannten Typ T nichts mehr anfangen. Ironischerweise tippt uns der Compiler an der Stelle auf die Schulter und schlägt uns eine Basisklasse vor, da es scheint, als wollen wir einen BaseDao definieren. Dass unsere Implementierung exakt diesem Vorschlag entspricht, interessiert ihn nicht.

Kinderkrankheiten wie diese werden aber mit Sicherheit in den kommenden Iterationen des ansonsten bereits sehr vielversprechenden ORMs behoben. Aktuell befindet sich Room in der Alpha 1 und wird wie gewohnt, zusammen mit seinem Annotation Processor, über Gradle vertrieben:

compile "android.arch.persistence.room:runtime:1.0.0-alpha1"
annotationProcessor "android.arch.persistence.room:compiler:1.0.0-alpha1"

 

Codebeispiel:

@Database(entities = {Example.class}, version = 1)
@TypeConverters({DateTimeConverter.class})
public abstract class AppDatabase extends RoomDatabase {

    private static AppDatabase instance;

    public static AppDatabase getDatabase(Context context) {
        if (instance == null) {
            instance = Room.databaseBuilder(context, AppDatabase.class, "db_name").build();
        }
        return instance;
    }

    public abstract ExampleDao getExampleDao();
}
@Entity
public class Example {
    @PrimaryKey(autoGenerate = true)
    public int uid;
    public DateTime createdAt;
    public DateTime updatedAt;
    public String name;
}
@Dao
public interface ExampleDao {

    @Insert(onConflict = OnConflictStrategy.REPLACE)
    public void insert(Example entity);
  
    @Delete
    public void delete(Example entity);
     
    @Query("SELECT * FROM example")
    List<Example> findAll();
}

Comment

Android Wear 2.0 im Ersteindruck

Comment

Android Wear 2.0 im Ersteindruck

Mit etwas Verspätung hat Android Wear 2.0 grünes Licht erhalten und seinen Weg auf die meisten Smartwatches gefunden. Wir haben diese aktuelle Version des mobilen Betriebssystems auf der LG Watch Urbane getestet.

Die auffälligste Neuerung ist optischer Natur, denn das 2014 eingeführte Material Design zieht sich nun durch das User Interface der intelligenten Uhren. Komplikationen lassen sich unabhängig vom verwendeten Watchface anzeigen und in wenigen Schritten bearbeiten. Unser persönliches Highlight ist jedoch die wachsende Unabhängigkeit von Android Wear. Hierfür wurde der Play Store ins Betriebssystem integriert, wodurch sich Apps direkt von der Uhr aus installieren lassen - sofern diese vorher für Android Wear 2.0 angepasst worden sind.

Für Entwickler ergeben sich einige Änderungen: so wurden die WearableListView und der GridViewPager durch die WearableRecyclerView ersetzt, welche u.a. den aus der RecyclerView bekannten SnapHelper unterstützt. Die ActionChooserView weicht dem AlertDialog, der ProgressSpinner der ProgressBar und die CrossfadeDrawable dem AnimationSet. Hier wird das Bestreben von Google deutlich, die Grenze zwischen Android und Android Wear zu minimieren, da alle Deprecations von Klassen aus dem SDK des großen Bruders abgelöst wurden.

Uns erinnert dieses Update an den Sprung von Honeycomb zu Ice Cream Sandwich. Damals hatte man es erfolgreich geschafft, aus zwei unterschiedlichen Betriebssystemen heraus eine einheitliche Plattform für Tablets und Smartphones zu schaffen. Android Wear 2.0 ist ein weiterer Schritt in eine Zukunft, in der wir alle Endgeräte mit ein und demselben Toolset bedienen können.

Komplikationen lassen sich in wenigen Schritten anlegen und positionieren

Komplikationen lassen sich in wenigen Schritten anlegen und positionieren

Der Play Store für Android Wear bietet die von den Smartphones gewohnte Funktionalität

Der Play Store für Android Wear bietet die von den Smartphones gewohnte Funktionalität

Comment

Android Wear 2.0 verzögert sich erneut

Android Wear 2.0 verzögert sich erneut

Eigentlich wird Android Wear 2.0 bereits seit Februar auf die Geräte einiger weniger Hersteller verteilt. Nun sorgt ein Fehler im Betriebssystem jedoch für eine weitere Verzögerung. Google lässt den Zeitraum für das finale Update noch offen:

"We have started rolling out the Android Wear 2.0 update to Fossil Q Founder, Casio Smart Outdoor Watch WSD-F10 and Tag Heuer Connected. For other devices, the update is currently being delayed due to a bug found in final testing. We will push the update to the remaining devices as soon as the issue is resolved." - 9to5google.com

Android Wear 2.0 erlaubt eine direkte Netzwerkverbindung der Smartwatches ohne den Umweg über ein gekoppeltes Smartphone. Hierfür wird eine angepasste Version des Google Play Stores auf den Uhren vorinstalliert, um das Betriebssystem möglichst autark zu gestalten. Der Play Store listet dann ausschließlich solche Apps, welche für Android Wear 2.0 angepasst wurden. Weiters werden der Google Assistant und zusätzliche Eingabemöglichkeiten vorinstalliert, u.a. eine Bildschirmtastatur sowie Handschrifterkennung mittels optischer Zeichenerkennung (OCR). Komplikationen können nun unabhängig vom Watchface angezeigt und über dieses gelegt werden. Und nicht zuletzt findet auch das von Smartphone und Web bekannte Material Design Einzug auf die Uhren.

Wir bleiben gespannt auf Android Wear 2.0 und hoffen, dass diese Generalüberholung die Basis für einen gesunden Konkurrenzkampf auf dem Markt der Smartwatches bildet, welcher aktuell stark von Apple dominiert wird.

Android O: Erste Developer Preview

Comment

Android O: Erste Developer Preview

Es scheint, als würde Android N schneller in Vergessenheit geraten als man "Nutella" sagen kann, denn während dessen Distributionsrate noch bei unter drei Prozent liegt (sieben Monate nach Release), wurde nun sein Nachfolger angekündigt.

Android O präsentiert sich erstaunlich früh und folgt damit einem Credo, das Google im letzten Jahr eingeführt hat und hoffentlich auch weiterhin fortführen wird. Die Developer Preview wird seit dem 21. März 2017 verteilt und gibt einen ersten Einblick auf kommende Neuerungen. In erster Linie richtet sich diese Version an Entwickler und ändert dementsprechend viel unter der Haube. Die kompletten Changenotes finden sich in der offiziellen Dokumentation.

Schriftarten sind ab sofort vollwertige Ressourcen, die - analog zu String, Drawable oder Style - in XML Layouts verwendet werden können. Das neue Autofill Framework richtet sich an Passwortmanager, welche aktuell noch als Bedienungshilfe im Betriebssystem laufen. Adaptive Icons gehen einen Schritt weiter in Richtung Responsive Design und erlauben es, Icons abhängig vom Zielgerät zu maskieren.
Mit den Backgrund limits führt man fort, was unter Android 6 mit Doze und App Standby begonnen wurde: Akkulaufzeit erhöhen und Performance verbessern. Hierfür müssen Apps angepasst werden, die Background Services nutzen und deren Target auf API 26 oder höher gesetzt ist.

Picture in Picture (PIP) ist eines von zwei Features, die sich direkt an Endnutzer richten. PIP ist eine spezielle Form des aus Android N bekannten Multi Window. Diese erlaubt das Übereinanderlegen zweier Apps, z. B. um ein Overlay mit Videoplayback darzustellen, wie man es bereits von Android TV oder aus der YouTube-App kennt.
Des weiteren fallen uns die Notification Channels auf, welche eine Kategorisierung von Benachrichtigungen erlauben. Entwickler legen hierbei für jede Benachrichtigung fest, in welchem Kanal sie gesendet wird. Folgende Einstellungen können dann vom Nutzer einzeln für jeden Kanal getroffen werden: Ton, Vibration, LED-Signal, auf dem Sperrbildschirm anzeigen, "Nicht stören"-Modus überschreiben. Dies sollte das Leben vieler erleichtern, deren Partner Fans von mobilen Aufbauspielen sind. Deren Entwickler bieten nämlich nur allzu selten eine Möglichkeit, solche Störgeräusche zu minimieren, ohne das komplette Gerät stumm zu schalten.

Dies sind nur einige der Neuerungen von Android O und wir sind gespannt, was sich bis zum finalen Release noch ändern wird. Dabei hoffen wir stets auf eine weitreichende Integration in die Support Library, damit die neuen Features ohne Verzögerung auf so viele Geräte wie möglich ausgerollt werden können.
Genauso neugierig sind wir auf den Alias der neuen Betriebssystemversion. Welche Süßigkeit wird es diesmal? Oreo? Oatmeal Cookie? Ontbijtkoek? Es bleibt spannend.

Notifications Channels unter Android O

Notifications Channels unter Android O

Comment