Beim Konzipieren und Programmieren von Android Apps wird es – je größer die App wird – immer unübersichtlicher und der Code immer umfangreicher und komplizierter. Wie kann man wieder mehr Übersicht in die Architektur der App bringen? Und wie kann man beim Erstellen des Codes für immer wiederkehrende Basisfunktionalitäten Zeit und Platz sparen? Die wachsende Zahl von Android Libraries bietet hierfür einen umfangreichen Fundus an Helfern. Wir haben uns zahlreiche Libraries angeschaut und die 10 besten rausgesucht, die die Arbeit eines Android-Programmierer wirklich einfacher machen.
1. Retrofit
Retrofit ist der Standard um Netzwerk-Calls in Android-Projekten zu handeln. Retrofit zeichnet sich durch eine einfache Nutzung und hohe Erweiterbarkeit aus.
Beispiel-Code:
public interface RetrofitInterface { @GET("/api/user") Call<User> callback getUser(@Query("user_id") String user); } // example RetrofitInterface retrofitInterface = new RestAdapter.Builder() .setEndpoint("http://example.com/").build().create(RetrofitInterface.class); // fetch user with name userName retrofitInterface.getUser("userName").enqueue(new Callback<User>() { @Override public void success(User user, Response response) { } @Override public void failure(RetrofitError retrofitError) { } });
Hier geht’s zum Github Repository: http://square.github.io/retrofit/
2. Butterknife
Butterknife ist eine View-Injection-Libary für Android mit der man den ganz findViewById Overhead los wird.
Beispiel-Code:
@InjectView(R.id.user) protected EditText mUser; @InjectView(R.id.password) protected EditText mPassword; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_login); ButterKnife.inject(this); }
Hier geht’s zum Github Repository: http://jakewharton.github.io/butterknife/
3. Dagger 2
Ein Dependency-Injection-Framework für Android und Java. Mit Hilfe von Dagger 2 lassen sich komplexe Android-Apps endlich lose gekoppelt entwickeln.
Beispiel-Code:
public class MainActivity extends Activity { @Inject ApiClient mApiClient; public void onCreate(Bundle savedInstance) { // assign singleton instances to fields InjectorClass.inject(this); }
Hier geht’s zum Github Repository: https://google.github.io/dagger/
4. AutoValue
Mit AutoValue lassen sich immutable Value-Classes einfach per Annotation generieren. AutoValue generiert dabei die getter und weitere Funktionen wie quals, hashCode und toString.
Beispiel-Code:
@AutoValue public abstract class User { public abstract String username(); public static User create(String username) { return new AutoValue_User(username); } }
Hier geht’s zum Github Repository: https://github.com/google/auto/tree/master/value
5. GreenDAO und ObjectBox
Immer noch zählt greenDAO zu einem der Standard OR-Mapper für Android. Mit ObjectBox kam vor Kurzem der vielversprechende Nachfolger raus. Mit beiden Libaries kann man schnelles und effizientes Mapping und Speichern von Objekten in Android erreichen.
Beispiel-Code:
userBox = ((App) getApplication()).getBoxStore().boxFor(User.class); User user = new User("UserName"); userBox.put(user);
Hier geht’s zum Github Repository von GreenDAO: https://github.com/greenrobot/greenDAO
Hier geht’s zum Github Repository von ObjectBox: https://github.com/greenrobot/ObjectBox
6. EventBus
Sehr leichtgewichtige und einfache Library um lose gekoppelte Komponenten innerhalb einer Android-App über einen Event-Bus kommunizieren zu lassen.
Beispiel-Code:
//Post Event EventBus.getDefault().post(new MessageEvent()); //Subscribe for Event @Subscribe(threadMode = ThreadMode.MAIN) public void onMessageEvent(MessageEvent event) {/* Do something */};
Hier geht’s zum Github Repository: https://github.com/greenrobot/EventBus
7. CompositeAndroid
In Android-Projekten entstehen oft abstrakte Basis-Activities die über die Projektlaufzeit zu Monolithen wachsen. CompositeAndroid durchbricht dies nach dem Konzept “Composition over inheritance”.
Beispiel-Code:
public class MainActivity extends CompositeActivity { public MainActivity() { addPlugin(new ViewTrackingPlugin("Main")); } }
Hier geht’s zum Github Repository: https://github.com/passsy/CompositeAndroid
8. RxJava
RxJava ist ein Library um asynchrone und event-basierte Anwendungen zu erstellen.
Flowable.just("Hello world") .subscribe(new Consumer<String>() { @Override public void accept(String s) { System.out.println(s); } );
Beispiel-Code:
Hier geht’s zum Github Repository: https://github.com/ReactiveX/RxJava
9. Otto
Ein weiterer Event-Bus für Android um entkoppelte Systeme einfach zu erstellen. Otto ist einfach zu benutzen und erlaubt eine flexible Kommunikation.
Beispiel-Code:
Bus bus = new Bus(); //Sending bus.post(new AnswerAvailableEvent(42)); //Subscribing @Subscribe public void answerAvailable(AnswerAvailableEvent event) { // TODO: React here }
Hier geht’s zum Github Repository: http://square.github.io/otto/
10. DeepLinkDispatch
Einfache und effizient Library zur Integration von DeepLinks in die App per Annotation. Activities können sich gezielt zum handeln von Links registrieren und diese bei Aufruf handeln.
Beispiel-Code:
@DeepLink("foo://example.com/deepLink/{id}") public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent intent = getIntent(); if (intent.getBooleanExtra(DeepLink.IS_DEEP_LINK, false)) { Bundle parameters = intent.getExtras(); String idString = parameters.getString("id"); } } }
Hier geht’s zum Github Repository: https://github.com/airbnb/DeepLinkDispatch