An-Droid 101

Developing Libraries

Nishant Srivastava

Android Dev/Interaction Designer

Organizer@GDG New Delhi





To answer the below with respect to Android Libraries

What is a Software Library ?

A software library generally consists of pre-written code, classes, procedures, scripts, configuration data and more. 


 It is designed to assist both the programmer and the programming language compiler in building and executing software.


Developers are lazy

..hence they reuse code.


  • Build modular and independent blocks
  • Write better softwares
  • Speed up compile time
  • Easier implementation
  • Make code more testable

..and best of em all being ...

Make people happy..

.. OK , I guess BATMAN doesn't smile anyways.. :P 

Before software can be reusable it first has to be usable.

                  - Ralph Johnson

Your code depends on Android idioms/resources




4.Native Code

..and many more...

Why writing an Android library ?


JAR - Java ARchive

.jar  ==  Java library



java code


Used for

Functionality such as data handling, data manipulation, service integration

AAR - Android ARchive

.aar  ==  Android library



java code + android resources + android manifest stub


Used for

Functionality that includes everything a jar can + UI

Finally ...a break ..


Step 1 : Gradle their own words..

Emerge from Build Hell today through Gradle, the modern open source polyglot build automation system.. 

Step 2 : Create Project

How hard can it be ?

Fire up your Android Studio and Create a New Project

Step 2 : {Gradle Build in progress}

Step 3 : Create a new module

Create a new module

Step 3 : Create a new module (..contd)

Go on..

Step 3 : Create a new module (..contd)

We are going to stick to making an AAR module.

Once selected, my suggestion is to rename

  1. module name to library
  2. application name to <yourlibraryname>
  3. Package name to <>


Step 3 : Create a new module (..contd)

Step 4 : Crush Code (..literally)

.....and build your awesome library...

Step 4 : {Create and Build your library}

  1. Entity class declaration
    • Do
    • Don't

 void init(ApiSecret apisecret);

 void init(String apikey, int refresh, long interval, String type);

Make Your Libraries


  1. Multi-Thread compatibility
    • Singleton implementation
    • Synchronization
    • Immutable Entity
  2. Lifecycle mangement
    • Object lifetime alignment

Make Your Libraries


Make Your Libraries

  1. Intuitive
  2. Consistent
  3. Easy to use, Hard to misuse

Easy to Use

  public boolean hasPermission(Context context, String permission) {
        int result = context.checkCallingOrSelfPermission(permission);
        return result == PackageManager.PERMISSION_GRANTED;

Minimize Permissions

  String feature = PackageManager.FEATURE_BLUETOOTH;

  public boolean isFeatureAvailable(Context context, String feature) {
        return context.getPackageManager().hasSystemFeature(feature);

Minimize Requisites

Things to take care of..

    public boolean isMarshmallow(){
        return Build.VERSION.SDK_INT>= Build.VERSION_CODES.M;

Support different versions

Things to take care of..

Make your code Testable

  1. Mock
  2. No static methods
  3. Avoid final classes
    // In code
    boolean debuggable = false;

    // In build.gradle
    debuggable = true

Donot log in production

Things to take care of..

Do not crash silently - Log all exceptions and print them in the logcat

Handle poor network conditions

Reluctance to include large libraries

    dependencies {
        provided 'com.squareup.okhttp3:okhttp:3.1.2'

Donot require libraries

Things to take care of..

Check in classpath

    private boolean hasOKHttpOnClasspath() {
        try {
            return true;
        } catch (ClassNotFoundException ex) {
        return false;

..simply put follow the rule of SPOIL-ing your Library .. 


Simple Briefly and Clearly expressed

Purposeful Having or showing resolve

OpenSource Universal Access, Free license

Idiomatic Natural to the native environment

Logical - Clear, Sound Reasoning

Step 5 : {Create and Build your library}

 $ ./gradle build

 $ ./gradlew build

Step 6

Write & Use Unit Tests

Step 7

$ gradle clean connectedCheck

Run Your Tests

...and if you don't ...this is what happens..

Step 8


Example Apps


Step 9

Maven Central / Jcenter

Local/Remote Maven Repositories

Local AAR


 Use your library in another project

....So you have built you awesome library, huh !
So the only thing left now is understanding how to use it in another project, right...


If you are not familiar with the way you include a dependency/library in your project via using gradle then here it is :

    dependencies {
        compile ''

Libraries are a necessary evil

...and thats it for today folks!

Me after this session..literally :P

Questions ?

An-Droid 101 - Developing Libraries

By Nishant Srivastava

An-Droid 101 - Developing Libraries

Learn about android libraries and how to build one for yourself.

  • 2,302