You are on page 1of 14

Purchased by Pratyush Kshirsagar, pratyush.kshirsagar@gmail.

com #4082685

Purchased by Pratyush Kshirsagar, pratyush.kshirsagar@gmail.com #4082685

Contents
Preface

About this book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Who should read this book . . . . . . . . . . . . . . . . . . . . . . . .

Philosophy and guidelines . . . . . . . . . . . . . . . . . . . . . . . . .

How this book is organized . . . . . . . . . . . . . . . . . . . . . . . .

10

How to use this book . . . . . . . . . . . . . . . . . . . . . . . . . . . .

11

Conventions used in this book . . . . . . . . . . . . . . . . . . . . . . .

12

Recommanded references . . . . . . . . . . . . . . . . . . . . . . . . .

13

About the author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

13

Part 1 : About technological watch and agility

15

How to observe a technological watch . . . . . . . . . . . . . . . . . .

16

Selecting the best tool for the job . . . . . . . . . . . . . . . . . . . . .

16

The Agile Android Developer Philosophy . . . . . . . . . . . . . . . .

16

Part 2 : The Agile Android Toolbox

17

Getting Started with Docker . . . . . . . . . . . . . . . . . . . . . . .

18

Introduction to Android Studio . . . . . . . . . . . . . . . . . . . . . .

18

Quick Intro to Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

Getting to know Gradle . . . . . . . . . . . . . . . . . . . . . . . . . .

18

Android Emulators . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

18

Testing Android on real devices . . . . . . . . . . . . . . . . . . . . . .

18

Conguring our test environment . . . . . . . . . . . . . . . . . . . . .

18

Purchased by Pratyush Kshirsagar, pratyush.kshirsagar@gmail.com #4082685

CONTENTS
Testing the Test Environment . . . . . . . . . . . . . . . . . . . . . . .

18

Our rst red-gree-refactor loop . . . . . . . . . . . . . . . . . . . . . .

19

Static Code Analysis Setup . . . . . . . . . . . . . . . . . . . . . . . .

19

Part 3 : Automation 101

21

Droplet setup on Digital Ocean . . . . . . . . . . . . . . . . . . . . . .

22

Setting up Jenkins . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

22

Useful Jenkins plugins for Android Development . . . . . . . . . . . .

22

launching a rst CI job . . . . . . . . . . . . . . . . . . . . . . . . . .

22

GitLab Installation on our Droplet . . . . . . . . . . . . . . . . . . . .

22

Integration between GitLab and Jenkins . . . . . . . . . . . . . . . . .

22

Setting up a rst CI job for Fizz Buzz . . . . . . . . . . . . . . . . . .

22

Adding TDD to Fizz Buzz . . . . . . . . . . . . . . . . . . . . . . . . .

22

Publishing APKs in Jenkins for beta testing . . . . . . . . . . . . . . .

23

SonarQube Installation and Setup . . . . . . . . . . . . . . . . . . . .

23

Integration between SonarQube and Jenkins . . . . . . . . . . . . . . .

23

Setting up email notications . . . . . . . . . . . . . . . . . . . . . . .

23

Jenkins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

23

GitLab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

23

Receiving build notications on Android . . . . . . . . . . . . . . . . .

23

Securing Web access using SSL . . . . . . . . . . . . . . . . . . . . . .

23

Part 4 : Agile Software Project Management

25

Agile project management tools . . . . . . . . . . . . . . . . . . . . . .

26

Setting up Redmine . . . . . . . . . . . . . . . . . . . . . . . . . . . .

26

Redmine Integration with our environment . . . . . . . . . . . . . . .

26

Jenkins integration . . . . . . . . . . . . . . . . . . . . . . . . . .

26

GitLab integration . . . . . . . . . . . . . . . . . . . . . . . . . .

26

Installing the BackLog plugin in Redmine . . . . . . . . . . . . . . . .

26

Quick Introduction to the Backlog plugin . . . . . . . . . . . . . . . .

26

App design mockup . . . . . . . . . . . . . . . . . . . . . . . . . . . .

26

BDD and Android . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

26

Purchased by Pratyush Kshirsagar, pratyush.kshirsagar@gmail.com #4082685

CONTENTS

Simplifying using code injection . . . . . . . . . . . . . . . . . . . . . .

26

Android source code modularization . . . . . . . . . . . . . . . . . . .

27

Automatization using Gradle . . . . . . . . . . . . . . . . . . . . . . .

27

Part 5 : Lean Android

29

DRY-ing out the Android development process . . . . . . . . . . . . .

30

Setting up an ecient Build-Measure-Learn loop . . . . . . . . . . . .

30

Part 6 : Scaling

31

Automation strategy . . . . . . . . . . . . . . . . . . . . . . . . . . . .

32

On-demand Jenkins slaves . . . . . . . . . . . . . . . . . . . . . . . . .

32

Automated deployment . . . . . . . . . . . . . . . . . . . . . . . . . .

32

Large scale testing on real devices . . . . . . . . . . . . . . . . . . . .

32

Team collaboration . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

32

Oshore development : how to nd great collaborators . . . . . . . . .

32

Multiple target using the same source code . . . . . . . . . . . . . . .

32

Part 7 : Advanced Topics


Reducing time to market

33
. . . . . . . . . . . . . . . . . . . . . . . . .

34

Monetization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

34

Low cost marketing tips . . . . . . . . . . . . . . . . . . . . . . . . . .

34

How to deal with legacy apps . . . . . . . . . . . . . . . . . . . . . . .

34

Purchased by Pratyush Kshirsagar, pratyush.kshirsagar@gmail.com #4082685

Purchased by Pratyush Kshirsagar, pratyush.kshirsagar@gmail.com #4082685

CONTENTS

Preface
Android can be a lot of things depending on your point of view.
For Google, Android is a vehicle to expand their business into new areas where
they were absent a few years ago. Google has evolved from a web search engine
into a company with many product lines and businessesfrom mobile phones,
music, and books to video-on-demand. With the release of Android L around
the corner, you can also add TV and wearables to that list.
For mobile manufacturerssuch as Samsung, LG and HTCAndroid is an
Open Source mobile operating system (OS) they can tweak and use without
paying royalties.1
For users, the Android OS is less visible but is nevertheless a critical piece of
their daily activities. They depend on Android to send and receive emails, chat,
take pictures, entertain, and much more. Average users are not power users,
and as such they will want quality apps that will run without crashing.
For us as developers, Android is a way to express our creativity (outside of
our 95 routine), learn mobile software development, and make some money
on the side. Regardless of the reason that brings you to Android software
development, you are (or will be) faced with the same problems that fellow
Android developers encounter every day. These include: fragmentation, legacy
code, bad code, ineective monetization, and so forth. Most of these burdens
can be avoided or mitigated by using the right tools and techniques combined
with an agile mindset. These eective techniques and tools can help you enjoy
Android programming even more by freeing up your time, so you can really
developinstead of just xing problems, looking for answers on StackOverow,
avoiding pitfalls, or rewriting the same boiler plate code over and over again2 .
By the end of this book, you should be a more productive and, therefore, happier
Android software developer. You would be surprised what a happy developer
1 If
you omit the fact that Microsoft collected Android patent royalties
from
Android
smartphone
manufacturers.
(http://www.businessinsider.com/
microsoft-earns-2-billion-per-year-from-android-patent-royalties-2013-11)
2 My denition of boiler plate code is this: Any code that doesnt add value to the nal
product. In our case, the product is an Android app. In Lean Startup terms, its synonymous
to waste (waste of time, resources, money).

Purchased by Pratyush Kshirsagar, pratyush.kshirsagar@gmail.com #4082685

CONTENTS

can accomplish!

About this book


When I started learning Android programming, I sometimes found myself confronted by a daunting task and wondering, Is there a more agile way to do
this or that? Ive been searching for answers in Android programming books
expecting to nd something about the tools I use daily in my job but used in
the context of mobile application development. Yet I have found nothing.
Why is that? There are a bunch of great tools out there that can make your
Android software development experience more enjoyable. Many of these tools
are free and Open Source, but they are not covered in any book. My theory
is that most Android programming books are targeted at novices and seldom
at intermediate-level Android developers (our audience here). I think you have
to experience (and even suer a bit) with Android app development before you
start looking around for more agile, alternative ways of doing things.
In this book, we covering most of the tools normally described in Application
Lifecycle Management (ALM) or DevOps3 books, but used in the context of
Android software development. Think of DevOps for a team of one!
I also share my experiences about monetization, marketing and other things not
related to Android programming per se, but essential to successfully publishing
an app in Google Play or other Android app stores.
Because of the number of topics covered in this book, I will not throw a bunch
of code in your face (lucky you). Instead, Ive selected a simple example that we
will use from the rst chapters until the end of the bookthe FizzBuzz app.4
The Fizz Buzz algorithm is great to teach developers how to do test-driven
development (TDD), and it is simple enough to let us focus on the techniques
rather than our problem-solving skills. We evolve this app from a wireframe
concept on paper to a fully functioning app that we release to Google Play. All
of the concepts demonstrated in this book are usable for other apps you develop.
At the end of each chapter, there are some hints to guide you on how to use the
concepts to your own benet.

Who should read this book


This book is targeted at experienced software developers who are familiar with
at least one Object Oriented Programming (OOP) language, such as C++, C#,
3 For details, see the DevOps denition on Wikipedia: http://en.wikipedia.org/wiki/
DevOps
4 See the Fizz Buzz article on Wikipedia for details: http://en.wikipedia.org/wiki/Fizz_
buzz

Purchased by Pratyush Kshirsagar, pratyush.kshirsagar@gmail.com #4082685

PHILOSOPHY AND GUIDELINES

or Java. You should also have some basic understanding of source code control
(preferably Git), shell scripting and Linux (if you know how to open a command
shell, you will do great).
The techniques and tools shared in this book are presented mostly in the context
of a team of onethat is, one indie developer who wants to take his Android
development workow to the next level. The concepts presented in this book
can also apply to larger teams, but this is not our main audience.
To get the most from this book, you should already have read one or more
entry-level books about Android programming (see the following Recommanded
References section), and you should already have released one or more Android
apps to Google Play.
This book does not cover Android basics, but it does its best to address all those
questions you may end up with after we present advanced topics. In the case
where some intermediate to advanced knowledge is required to fully understand
a topic, you are provided with references to look up.
Additionally, if you have some experience with Agile software projects, this will
give you a head start, but it is not required.
Finally, if you are an experienced developer working full-time for your bosss
software companyand dreaming of doing your own thingsyou will nd food
for thought in this book. Likewise, if youre looking to improve your Android
programming workow, learn new tools and techniques, develop more agile
appsand even make some money with Androidthis book is denitely for
you!

Philosophy and guidelines


Big disclaimer: This book is, at times, very opinionated. Mea culpae, the core
of this book comes from my years on the IT battleeld, and Ive learned the
hard way what works and what doesnt.
I beg you to dier and share your view about any subject covered in this book
in the discussion group (see the following How to use this book section). For
this book, I have positioned some tools that I nd work great in the context of
Android project development. They may not be the best tools on the market,
but they are the best I have found to get the job done. (They also happen to
be the tools I know and use every day). I will explain the process I use to select
tools among many equivalents in the chapter on technological watch. You will
be able to use these concepts beyond Android app development
Ive developed the book examples on Linux and havent fully tested these on
Windows or OSX. However, due to the portable nature of Android (and Java),
they should work out-of-the-box on any platform. Generally, for the sake of
agility, I do my best to select tools that are platform-independent or web-based.

Purchased by Pratyush Kshirsagar, pratyush.kshirsagar@gmail.com #4082685

10

CONTENTS

If some examples or scripts dont work as expected in your development environment, I encourage you to submit a bug report to me with as much detail as
possible (and if you happen to nd a solution specic to a platform, send that
as well). If I can help you, I will, or another reader might be able to give you a
hand.
I designed the content of this book as a greeneld project (that is from scratch
or without the legacy) and for a team of one or a two-pizza team5 in mind. At
times, the tools and processes I present will seem like killing a y with a bazooka
if youre a lone developer, but they will help you structure your work and keep
you organized. In fact, if you end up growing your app business (and I hope you
will!), you will be grateful that you have observed a Spartan discipline with your
Android projects because the best practices already will be assimilated by you
and your team, and they will serve as the cornerstone of your Android business.
All designs, processes, examples, concepts, and such presented in this book had
to meet the following criteria before being included:
Must be scalable;
Must respect the Dont Repeat Yourself (DRY) principle and be automated
if possible;
Must be agile (that is, tolerant and adaptable to change);
Must reduce or (better) eliminate waste (for example, time, money, resources);
Must not get in the way of the developer.
All of this was taken into account for the sake of helping you reduce the timeto-market for your apps and let you focus on developing great ones.

How this book is organized


This book is organized in seven parts:
1.
2.
3.
4.
5.
6.
7.

About Technological Watch and Agility


The Agile Android Toolbox
Automation 101
Agile Software Project Management
Lean Android
Scaling
Advanced Topics

5 An expression coined by Je Bezos, CEO of Amazon. A small team (usually between 6


to 10 people) you can feed with two pizzas.

Purchased by Pratyush Kshirsagar, pratyush.kshirsagar@gmail.com #4082685

HOW TO USE THIS BOOK

11

In Part 1, I present the techniques I use to monitor the evolution of the market,
so I am alerted when new trends or opportunities surface. I also present how
to select tools among equivalent alternatives. In Part 2, we set up and present
the tools I propose to ll your Agile Android developer toolbox. By the end
of Part 2, you will have set up a development environment that will help you
build our example application. In Part 3, building upon what weve learned in
the previous chapters, I teach you how to optimize your development process
by automating tedious or repetitive tasks, so we can concentrate on tasks with
added value in building our nal app. Then, in Part 4, we look at software
management using Agile tools and methodology. We also talk about subjects
like behavior-driven development (BDD) and TDD to help us document our
code and designs. In Part 5, we locate and eliminate sources of waste. We
follow some theories provided by the Lean Startup movement and learn how to
implement an eective feedback loop (Build-Measure-Learn loop) for Android
software projects. In Part 6, I show you how to use cloud computing to your
advantage and scale your builds and tests to multiple environments. Finally,
in Part 7, I talk about more advanced topics, such as marketing for your apps,
publishing, and monetization tips and techniques.
I hope you enjoy the ride!

How to use this book


The rst three parts of this book are meant to be followed in order like a tutorial.
First, we put in place a development environment to support the Agile workow
we propose. Then, in the subsequent parts, we use that environment to build
our example application and to improve it as we progress. You can always
skip some content if you are already familiar with it. The Git repository is
designed to provide you with the example app at a working state corresponding
to a specic chapter. So you can pick it up from there and continue with more
advanced topics without getting lost. If we think a chapter can be skipped
by the more advanced readers (without impacting their comprehension of the
following chapters), you will see an optional icon marking that chapter (see the
following Conventions used in this book section).
The book was written with the idea of releasing it to the community in parts
as it was written. That way, I was able to build a Build-Measure-Learn loop
from the beginning la Lean Startup6 . This book will continue to develop even
after it is released, and it will be updated regularly using feedback from readers
and by following the new trends the Android ecosystem brings us. So, as a
complement to this book, I strongly encourage you to registerfor freeto the
following communities to stay informed of new events related to Agile Android
Software Development:
6 http://theleanstartup.com/

Purchased by Pratyush Kshirsagar, pratyush.kshirsagar@gmail.com #4082685

12

CONTENTS
Google Group:
https://groups.google.com/forum/?hl=fr#!forum/
agile-android-software-development
Google+ community:
https://plus.google.com/u/0/communities/
106666596834203709065
Mailing List: http://eepurl.com/XTV8H

You should also register for a free account on Bitbucket to access the Agile Android Software Development repository : https://bitbucket.org/esavard/
agile-android-software-development. You will be able to get all the examples,
scripts, and much more from the Git repository.

Conventions used in this book


The following conventions are used in this book:
Constant width
Used for source code listings and reference of class, variable, parameter names,
and such referring to code snippets.
Constant width in bold
Indicates source code that was modied to illustrate an improvement to a previously presented source code listing.
Italic
Used when referring to URLs, lenames, le extensions, and to put emphasis
on technical terms the rst time they are cited in a chapter.

This icon indicates a tip or a suggestion.

This icon represents a notice or warning.

This icon illustrates that a section of text can be skipped and is provided only
to oer some depth to a topic but is not essential to its understanding.

Purchased by Pratyush Kshirsagar, pratyush.kshirsagar@gmail.com #4082685

RECOMMANDED REFERENCES

13

Recommanded references
If you need to deepen your knowledge or dust-o your Android programming
skills, I recommend you the following books :
Phillips, Bill, and Brian Hardy. Android programming : the Big
Nerd Ranch guide. Atlanta, Ga: Big Nerd Ranch, 2013. Print. ISBN10: 0321804333.
Mednieks, Zigurd R. Programming Android. Farnham: OReilly, 2012.
Print. ISBN-10: 9781449316648.
Clifton, Ian G. Android user interface design : turning ideas and
sketches into beautifully designed apps. Upper Saddle River, NJ:
Addison-Wesley, 2013. Print. ISBN-10: 0321886739.

About the author


tienne Savard is a dad, a certied Professional Scrum Master (PSM), a pragmatic programmer, and an Open Source advocate. He has been a software developer for a long time. It all started on a TRS-80 Color Computer (when 64K
was a lot of memory and 16 colors were enough). Since then, he has continued
to pursue his quest to boldly go where no developer has gone before!
tienne works as an IT consultant helping companies (from startups to large
corporations) integrate best-of-breed tools and best practices into their software
development process, including most of the same tools and practices presented
in this book.
He started Android programming with the Gingerbread version of Android by
reading books, following tutorials, and looking at a lot of source code. tienne
has also released a couple of apps on Google Play with some success and a lot
of trial and error. He enjoyed Android programming from the start because
of its openness, community, and architecture. Etienne has found that the only
missing part in the Android ecosystem is a more agile way of developing Android
apps. This book is here to ll that gap.

Purchased by Pratyush Kshirsagar, pratyush.kshirsagar@gmail.com #4082685

Merci!
I hope that you have enjoyed what you have read so farit is only a small peek
at whats coming up next!

If not already, register to our free mailing list to be informed about Agile Android Software Development oreven betterpre-order your copy of the
book. Not only will you get the book at discount price (for a limited time) you
will also get an early access to preview chapters, cheat sheets, source code and
suchbefore everyone else!

Thanks your interest, and your support.

tienne Savard
http://www.agiledroid.com

Purchased by Pratyush Kshirsagar, pratyush.kshirsagar@gmail.com #4082685