Android platform provides many options and flexibility when it comes to how to architect an Android application. Typically, having a lot of flexibility and options is a good thing, but when developing Android applications this freedom may lead to an implementation that is difficult to test, maintain, and extend.

Like most developers, I have always wanted to avoid those pitfalls when developing Android applications. During my past seven years in the intriguing world of Android application development, I have used a number of various architectural design patterns (e.g MVC) and “architectures” to implement Android applications aiming at high quality. Gradually, based on my gained experience and learning the hard way I have come up with designs for an Android architecture that I feel productive and comfortable using for developing Android applications. Naturally, my ideas and designs evolve constantly, when I learn about new paradigms, patters, and libraries such as RxJava and Retrolambda from Android development community.

Android application development is so much fun that I even have it as a hobby. During my first seven years as an Android developer I have received so much from the Android development community that I want to give something back. The first step is to open source my Robopupu Android architecture and the APIs that I have been using in my Android applications.  So, without further ado, let me introduce my brainchild Robopupu.


Robopupu Library

Robopupu is an open source Android library that provides a collection of advanced APIs for architecting and developing Android applications. The provided APIs help developers to achieve good software quality properties, such as good testability, extendability, and maintainability. Robopupu provides APIs that facilitate architecting clean application architectures with clear separations of concerns, well organised code, and encapsulation of logic into well specified and decoupled components.

Robopupu library consists of the following APIs:

  • Robopupu.MVP: A Model-View-Presenter (MVP) API.
  • Robopupu.Feature: A flow controller type of architectural design pattern for using components that encapsulate navigation logic for and configuration of application features.
  • Robopupu.Plugin: A plugin framework that supports dependency injection (DI) and allows decouples communication between components without requiring the components to explicitly register with one another. The API can be used to replace event bus type of communications.
  • Robopupu.Dependency: A dependency injection (and pulling) API. Dependency injection in Robopupu.Plugin API utilises this API.
  • Robopupu.FSM: A simple library for implementing hierarchical Finite State Machines that support most of the UML state diagram features, including: nested states, initial points, entry points, choice points, and history points.
  • [Under development:] Robopupu.FRP: A simple library for Functional Reactive Programming (FRP). The key idea is to construct graphs of Nodes that are essentially functions.
  • [Under development:] Robopupu.REST: A simple networking library agnostic API for specifying REST request. The current implementation supports the use of Google Volley networking library.

Source Codes

Robopupu library  is open sourced using Apache License, Version 2.0. The source codes for it are available in two Github public repositories:

  1. Robopupu Library and a sample application using the library:
  2. Robopupu Compiler based on annotation processors:

Demo Application

A demo application for Robopupu is available in Google Play Store. Sources for the application are available in Github.

Contact Info

I am interested to receive any feedback, comments, and ideas related to Robopupu. You can email me  or follow me in Twitter: @Robopupu and @Fuusio. There is also a blog where I share my experiences and news about the progress with it.


Copyright (C) 2009-2016 Marko Salmela

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at;

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
See the License for the specific language governing permissions and
limitations under the License.