NOW Hiring

Quick links

This tutorial describes how to create and use library projects in Android.

1. Android library projects and Java libraries

1.1. Using Java and Android libraries

Android project can use code contained in JAR files (Java libraries).

In addition to JAR files, the Android uses a binary distribution format called Android ARchive(AAR). The .aar bundle is the binary distribution of an Android Library Project.

An AAR is similar to a JAR file, but it can contain resources as well as compiled byte-code. A AAR file can be included in the build process of an Android application similar to a JAR file.

It is possible to create libraries modules which can be used as dependencies in Android projects. These modules allow you to store source code and Android resources which can be shared between several other Android projects.

1.2. How to use a standard Java library (JAR) file in your Android application

To use a Java library (JAR file) inside your Android project, you can simple copy the JAR file into the folder called libs in your application. *.jar files in this folder are included into the compile classpath via the default build.gradle file.

1.3. Restrictions in using Java libraries

If you want to use libraries, these must only use API available in Android. For example, the Android libraries do not contain the java.awt and javax.swing user interface libraries. A library which uses classes from these packages cannot be used in Android.

Library projects cannot be compiled to Android applications and started without another project using them.

2. Custom Android library modules

2.1. Using custom library modules

If an Android application project uses an Android library module, the Android development tools include the code and resources from the library project into the build result of the Android project. This means, that the components, code and resources of the library project are compiled and packaged into the .apk file of the compiled application.

Therefore a library module can be considered to be a compile-time artifact. An Android library module can contain Java classes, Android components and resources. Only assets are not supported.

To create a library project, set the Mark this project as library flag in the Android project generation wizard.

The library project must declare all its components, e.g., activities, service, etc. via the AndroidManifest.xml file. The application which uses the library must also declare all the used components via the AndroidManifest.xml file.

2.2. Priorities for conflicting resources

The Android development tools merges the resources of a library project with the resources of the application project. In the case that a resource’s ID is defined several times, the tools select the resource from the application, or the library with highest priority, and discard the other resource.

2.3. Creating custom Android library modules

Using library projects helps you to structure your application code. To create a new library module in Android Studio, select File ▸ New Module and select Android Library.

3. Prerequisite

The following example assumes that you have created an Android project with the top level package based on the following tutorial:

4. Exercise: Create an Android library module

4.1. Target of this exercise

Our library project will contain the data model and a method to get the number of instances. The library provides access to (fake) RSS data. An RSS document is an XML file which can be used to publish blog entries and news.

4.2. Create library module

For Android Studio each library is a module. To create a new library module in Android Studio, select File ▸ New Module and select Android Library.

Selection for creating a library project

Use as module name and Rssfeed Library as library name.

Setting the library property

If prompted for a template select that no activity should be created. As a result Android Studio shows another module.

Setting the library property

4.3. Create the model class

Create an RssItem class which can store data of an RSS entry.

Generate the getters and setter, the constructor and a toString() method. The result should look like the following class:


public class RssItem {
        private String pubDate;
        private String description;
        private String link;
        private String title;

        public RssItem() {

        public RssItem(String title, String link) {
                this.title = title;
       = link;
        public String getPubDate() {
                return pubDate;

        public void setPubDate(String pubDate) {
                this.pubDate = pubDate;

        public String getDescription() {
                return description;

        public void setDescription(String description) {
                this.description = description;

        public String getLink() {
                return link;

        public void setLink(String link) {
       = link;

        public String getTitle() {
                return title;

        public void setTitle(String title) {
                this.title = title;

        public String toString() {
                return "RssItem [title=" + title + "]";


4.4. Create instances

Create a new class called RssFeedProvider with a static method to return a list of RssItem objects. This method does currently only return test data.


import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class RssFeedProvider {
    public static List<RssItem> parse(String rssFeed) {
        List<RssItem> list = new ArrayList<>();
        Random r = new Random();
        // random number of item but at least 5
        Integer number = r.nextInt(10) + 5;
        for (int i = 0; i < number; i++) {
            // create sample data
            String s = String.valueOf(r.nextInt(1000));
            RssItem item = new RssItem("Summary " + s, "Description " + s);
        return list;

4.5. Define dependency to the library project

To use the library add it as a dependency in your project select File ▸ Project Structure. Select the app entry. Switch to the Dependencies tab and select Module dependencies via the + sign.

Define dependency in Android Studio - Selecting dependency
Define dependency in Android Studio - Select module
Define dependency in Android Studio - Select module

4.6. Use library project to update detailed fragments

Use the static method of RssFeedProvider to get the list of RssItem objects and display the number in your DetailFragment instead of current system time.

To send the new data, change the updateDetail method in your MyListFragment class.


import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;


import java.util.List;

public class MyListFragment extends Fragment {

    private OnItemSelectedListener listener;

    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_rsslist_overview,
                container, false);
        Button button = (Button) view.findViewById(;
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
        return view;

    public interface OnItemSelectedListener {
        public void onRssItemSelected(String link);

    public void onAttach(Context context) {
        if (context instanceof OnItemSelectedListener) {
            listener = (OnItemSelectedListener) context;
        } else {
            throw new ClassCastException(context.toString()
                    + " must implement MyListFragment.OnItemSelectedListener");

    // triggers update of the details fragment
    public void updateDetail(String uri) {  // (1)
        List<RssItem> list = RssFeedProvider
        String text = String.valueOf(list.toString());

1 Updated method

4.7. Validate implementation

Start your application and ensure that the toString value of the list of RssItems is displayed in the detailed fragment.

The list is currently generated randomly every time you press the button.

5. About this website

6. Android library resources

6.1. vogella GmbH training and consulting support


The vogella company provides comprehensive training and education services from experts in the areas of Eclipse RCP, Android, Git, Java, Gradle and Spring. We offer both public and inhouse training. Whichever course you decide to take, you are guaranteed to experience what many before you refer to as “The best IT class I have ever attended”.

The vogella company offers expert consulting services, development support and coaching. Our customers range from Fortune 100 corporations to individual developers.

Copyright © 2012-2016 vogella GmbH. Free use of the software examples is granted under the terms of the EPL License. This tutorial is published under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Germany license.

See Licence.