Best Android apps libraries 2017

Being an android developer, I have prepared an evergreen list of the best Android libraries which can be useful to speed up your development efforts. Those sweet chunks of work that someone had already done for you. All developers know, there is nothing sweeter than looking at a complicated task and solving it in five minutes with the sheer knowledge and skill of github searching. Have a look at it and write your opinions.

1. Bubble-Picker

An easy-to-use animation which can be used for content picking for Android.

Animation Bubble library for picking the content.
Animation Bubble library

2. Depth

Developer who is always want to make their app’s UI/UX great looking then check out the depth library.

Depth fragment Library for UI/UX
Depth fragment Library for UI/UX

3. ZXing

Using Barcodes and QR codes has become a standard already in the machine-readable data world. ZXing has been around for a while. Originally written in Java, it can read and create barcodes on many platforms, and it has been ported to many different languages. The library has been around for a while and has a good user base. The QR-code reader you are using in your smartphone is probably using this library. It works well and has a good history. ZXing is developed by Sean Oven, Daniel Switkin, ZXing Team.

4. One Item

An auto-playing Video View like Facebook, Instagram, Twitter or other famous single column SNS by this library. Simple implementation for one item selected RecyclerView. This makes it easier to use arbitrary VideoView (such as MediaPlayer) in RecyclerView. This library includes RecyclerView.LayoutManager and Recyclerview.OnScrollListener.

Video RecyclerView for android app
Video RecyclerView

5. Libphonenumber

When it comes to parsing and formatting phone numbers, there aren’t many good and free solutions available to the developer. Thankfully, the Google team has come up with a library called Libphonenumber. It is probably the best and most comprehensive library for parsing, validating and formatting phone numbers. Other than the name, which doesn’t roll off the tongue, it’s great!

It has a quite simple and easy to use API and has also been ported to other languages off the JVM such as C# and PHP. The development of Libphonenumber is led by Google, and it is licensed under the Apache License 2.0.

6. Colorful

Colorful is a simple but useful library, that lets you change your App’s basic color pallete through code. So rather than having styles for different activities, or even the same activity but different cases (e.g. A/B testing), you can do it programatically, and with ease.

7. Stencil

Ever had the feeling you’re just reading more and more and more of the same text over and over and over again? If this not-so-funny example failed to demonstrate how dull a text can be, have a look at this! This is seemingly simple, so you are maybe wondering why would someone use this? Well, if watching the letters appear in a wibbly-wobbly manner doesn’t bring you tranquility, we don’t know what could!

8. WaveLoading

WARNING: People who crave summer should thread lightly!

Sun, light breeze, waves and sand between your fingers… If the summer seems sooo far away right now, we have something to help you through this rough, cold time. WaveLoading is a library that lets you add a wave-y like effect to any drawable you’d like! Don’t believe me? See for yourself: Who said surfing on Chrome is not an experience?

9. BufferTextInputLayout

Whoa, now that’s a name some people in the office might be triggered at. But in all fairness, it is simple, it does exactly what the name says, and we certainly like that! So, simply add a buffer size, a direction (ascending/descending), and there you go! (We stole all the gifs from the github page, but is it really stealing, or squeezing out an opportunity, if they put it up for grabs?) Either way, we’re sure you’ll find a way to use this, at least in user authorization screens where there might be a password or username length minimum cap.

10. PageLoader

You’ve played this at least once, right?

Offline time can be fun, but losing an internet connection might not be so exciting for the users in your application. To lessen the negativity and frustration this problem might cause, it’s our duty as badass devs to make the unwanted bad path of our application more fun. This library is a great choice for this job, and if we might add, it does it in a a very stylish manner! Watch that Logo shakeee

 

11. Retrofit

Retrofit is still our favorite when it comes to implementing REST APIs.

From their site: “Retrofit turns your REST API into Java interface.” Yes, there are other solutions, but Retrofit has proven to be the most elegant and simple solution for organizing API calls in a project. The request method and relative URL are added with an annotation, which makes code clean and simple.

With annotations, you can easily add a request body, manipulate the URL or headers and add query parameters.

Adding a return type to a method will make it synchronous, while adding a Callback will allow it to finish asynchronously with success or failure.

public interface RetrofitInterface {
    // asynchronously with a callback
    @GET("/api/user")
    User getUser(@Query("user_id") int userId, Callback<User> callback);

    // synchronously
    @POST("/api/user/register")
    User registerUser(@Body User user);
}
// example
RetrofitInterface retrofitInterface = new RestAdapter.Builder()
            .setEndpoint(API.API_URL).build().create(RetrofitInterface.class);

// fetch user with id 2048
retrofitInterface.getUser(2048, new Callback<User>() {
    @Override
    public void success(User user, Response response) {
    }
    @Override
    public void failure(RetrofitError retrofitError) {

    }
});

Retrofit uses Gson by default, so there is no need for custom parsing. Other converters are supported as well.

Retrofit 2.0 is being actively developed at the moment. It is still in beta, but you can check it out here. A lot of things from Retrofit 1.9 have been stripped down and some major changes include a new Call interface which replaces Callback.

12. DBFlow

If you are going to store any more complex data in your project, you should use DBFlow. As stated on their GitHub, it’s “a blazing fast, powerful, and very simple ORM Android database library that writes database code for you.”

Just a few short examples:

// Query a List
new Select().from(SomeTable.class).queryList();
new Select().from(SomeTable.class).where(conditions).queryList();

// Query Single Model
new Select().from(SomeTable.class).querySingle();
new Select().from(SomeTable.class).where(conditions).querySingle();

// Query a Table List and Cursor List
new Select().from(SomeTable.class).where(conditions).queryTableList();
new Select().from(SomeTable.class).where(conditions).queryCursorList();

// SELECT methods
new Select().distinct().from(table).queryList();
new Select().all().from(table).queryList();
new Select().avg(SomeTable$Table.SALARY).from(SomeTable.class).queryList();
new Select().method(SomeTable$Table.SALARY, "MAX").from(SomeTable.class).
queryList();

DBFlow is a nice ORM that will remove a lot of boilerplate code used for working with databases. While there are other ORM alternatives for Android, DBFlow has proven to be the best solution for us.

13. Glide

glide_logo.png

Glide is the library to use for loading images. Current alternatives are Universal Image Loader and Picasso; but, in my opinion, Glide is the best choice at the moment.

Here’s a simple example how you can use Glide to load an image from a URL into ImageView:

ImageView imageView = (ImageView) findViewById(R.id.my_image_view);

Glide.with(this).load("http://goo.gl/gEgYUd").into(imageView);

14. Butterknife

A library for binding Android views to fields and methods (for instance, binding a view OnClick to a method). Basic functionality hasn’t changed from the early versions, but the number of options has grown. Example:

class ExampleActivity extends Activity {
  @Bind(R.id.title) TextView title;
  @Bind(R.id.subtitle) TextView subtitle;
  @Bind(R.id.footer) TextView footer;

  @Override public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.simple_activity);
    ButterKnife.bind(this);
    // TODO Use fields...
  }
}

15. Dagger 2

Since we moved to MVP architecture, we’ve started using dependency injection extensively. Dagger 2 is the successor of the famous Dagger dependency injection library and we highly recommend it.

One of the major improvements is using zero reflection in generated injection code, which makes debugging a lot easier.

Dagger creates instances of your classes and satisfies their dependencies. It relies on javax.inject.Inject annotation to identify which constructors or fields should be treated as dependencies. From the famous CoffeeMaker example:

class Thermosiphon implements Pump {
  private final Heater heater;
  @Inject
  Thermosiphon(Heater heater) {
    this.heater = heater;
  }
  ...
}

An example with direct injection into fields:

class CoffeeMaker {
  @Inject Heater heater;
  @Inject Pump pump;
  ...
}

Dependencies are provided via modules and @Proivides annotation from Dagger:

@Module
class DripCoffeeModule {
  @Provides Heater provideHeater() {
    return new ElectricHeater();
  }

  @Provides Pump providePump(Thermosiphon pump) {
    return pump;
  }
}

If you want more information on dependency injection itself, check out the Dagger 2 page or this great talk about Dagger 2 by Gregory Kick.

check out the best mac apps and utilities of 2017. If you have not already seen, do check out free software from NASA.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Blog at WordPress.com.

Up ↑

%d bloggers like this: