SlideShare a Scribd company logo
1 of 27
Download to read offline
AndroidAnnotations
    Simple and powerful Android code!



    sponsorisé par
                  eBusiness Information, groupe Excilys




jeudi 8 mars 12
SPEAKERS


    • Pierre-Yves RICAU (@Piwai)
    • Alexandre THOMAS (@AleksThomas)




jeudi 8 mars 12
CE SOIR

    • Dev Android, les trucs pas sexy
    • AndroidAnnotations à la rescousse!
    • Live coding




jeudi 8 mars 12
ANDROID




jeudi 8 mars 12
jeudi 8 mars 12
APPLICATIONS SÉRIEUSES




jeudi 8 mars 12
Activity = God Object




jeudi 8 mars 12
Activity = God Object




jeudi 8 mars 12
POURQUOI ?




jeudi 8 mars 12
ASYNCTASK
                  	   void doSomeCrazyStuff(Param param) {
                  	   	 new AsyncTask<Param, Progress, Void>() {
                  	   	 	
                  	   	 	 @Override
                  	   	 	 protected Void doInBackground(Param... params) {
                  	   	 	 	 Param myParam = params[0];
                  	   	 	 	 publishProgress(new Progress());
                  	   	 	 	 mySuperDownloader.downloadStuff(myParam);
                  	   	 	 	 return null;
                  	   	 	 }
                  	   	 	
                  	   	 	 protected void onProgressUpdate(Progress... values) {
                  	   	 	 	 Progress myProgress = values[0];
                  	   	 	 	 updateProgress(myProgress);
                  	   	 	 };
                  	   	 	
                  	   	 	 protected void onPostExecute(Void result) {
                  	   	 	 	 // ...
                  	   	 	 };

                  	   	   }.execute(param);
                  	   }



jeudi 8 mars 12
TextView myTextView = (TextView) findViewById(R.id.someId);




   NotificationManager notificationManager =
       (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);




                  	   	   findViewById(R.id.textView).setOnClickListener(new OnClickListener() {
                  	   	   	
                  	   	   	 @Override
                  	   	   	 public void onClick(View v) {
                  	   	   	 	 handler.postDelayed(new Runnable() {
                  	   	   	 	 	
                  	   	   	 	 	 @Override
                  	   	   	 	 	 public void run() {
                  	   	   	 	 	 	 // ...
                  	   	   	 	 	 }
                  	   	   	 	 }, 500);
                  	   	   	 }
                  	   	   });




jeudi 8 mars 12
ET SI VOTRE CODE RESSEMBLAIT
                     À ÇA ?




jeudi 8 mars 12
SIMPLER VIEW HANDLING
                  @EActivity(R.layout.main)
                  public class EditActivity extends Activity {

                  	 @ViewById(R.id.titleTextView)
                  	 TextView title;

                  	   @ViewById
                  	   EditText editText;
                  	
                  	   @AfterViews
                  	   void initTitle() {
                  	   	 title.setText("42");
                  	   }
                  	
                  }




jeudi 8 mars 12
SIMPLER EVENT HANDLING
                  @EActivity(R.layout.main)
                  public class EditActivity extends Activity {
                  	
                  	 @Click(R.id.downloadButton)
                  	 void startDownloading() {
                  	 	
                  	 }

                  	   @Click
                  	   void myButtonClicked() {
                  	   	
                  	   }
                  	
                  }




jeudi 8 mars 12
SIMPLER THREADING
                  @EActivity(R.layout.main)
                  public class EditActivity extends Activity {

                  	   @Background
                  	   void doSomeBackgroundWork() {
                  	   	
                  	   }
                  	
                  	   @UiThread
                  	   void updateUI() {
                  	   	
                  	   }
                  	
                  }




jeudi 8 mars 12
REST CLIENT

                  @Rest("http://www.stuff.com")
                  public interface StuffClient {

                      @Get("/stuff/{userId}?search={search}")
                      Stuff getStuff(String search, String userId);

                      @Post("/stuff/{userId}")
                      void updateStuff(Stuff stuff, String userId);

                  }




jeudi 8 mars 12
INJECTION DE DÉPENDANCES

                  @EBean
                  public class SomeBean {

                  	 @Bean
                  	 SomeOtherBean dependency1;
                  	
                  }




jeudi 8 mars 12
TOUT ENSEMBLE!
          @EActivity(R.layout.main)
          public class EditActivity extends Activity {
          	 @ViewById EditText searchInput;
          	 @RestService RestClient restClient;
          	 @Bean Datastore datastore;
          	 @Click
          	 void downloadButtonClicked() {
          	 	 doSomeBackgroundWork(searchInput.getText().toString());
          	 }
          	 @Background
          	 void doSomeBackgroundWork(String search) {
          	 	 Stuff stuff = restClient.getStuff(search);
          	 	 datastore.saveStuff(stuff);
          	 	 updateUI(stuff);
          	 }
          	 @UiThread
          	 void updateUI(Stuff stuff) {
          	 	 // Show stuff
          	 }
          }


jeudi 8 mars 12
TAKE THAT, ANDROID GOD!




jeudi 8 mars 12
COMMENT ?

    •   Java 6 Annotation Processor

    •   Génération de code à la compilation

    •   Exécuter automatiquement par javac




    AndroidAnnotations
    Simple and powerful Android code!


jeudi 8 mars 12
SOUS-CLASSE GÉNÉRÉE


                  public final class EditActivity_ extends EditActivity
                  {

                  	 // Ugly Android code goes here

                  }




jeudi 8 mars 12
PIÈGES CLASSIQUES

            <activity android:name=".EditActivity_" />




            startActivity(new Intent(this, EditActivity_.class));




            EditActivity_.intent(this).start();




jeudi 8 mars 12
AVANTAGES


    • Compile          time = no runtime overhead

    • Code          debuggable & readable

    • No          vendor lock-in!




jeudi 8 mars 12
OPEN SOURCE




jeudi 8 mars 12
PRODUCTIVITÉ


                        VuzZz
                        Quality of life, Geolocalized.




                  Développée en 48h
jeudi 8 mars 12
CODE PROPRE



                  Live coding!
      Nettoyage de printemps

jeudi 8 mars 12
QUESTIONS?
      • http://androidannotations.org

      • @AndAnnotations




jeudi 8 mars 12

More Related Content

More from Paris Android User Group

Workshop: Amazon developer ecosystem - DroidCon Paris2014
Workshop: Amazon developer ecosystem - DroidCon Paris2014Workshop: Amazon developer ecosystem - DroidCon Paris2014
Workshop: Amazon developer ecosystem - DroidCon Paris2014Paris Android User Group
 
Extending your apps to wearables - DroidCon Paris 2014
Extending your apps to wearables -  DroidCon Paris 2014Extending your apps to wearables -  DroidCon Paris 2014
Extending your apps to wearables - DroidCon Paris 2014Paris Android User Group
 
Scaling android development - DroidCon Paris 2014
Scaling android development - DroidCon Paris 2014Scaling android development - DroidCon Paris 2014
Scaling android development - DroidCon Paris 2014Paris Android User Group
 
Ingredient of awesome app - DroidCon Paris 2014
Ingredient of awesome app - DroidCon Paris 2014Ingredient of awesome app - DroidCon Paris 2014
Ingredient of awesome app - DroidCon Paris 2014Paris Android User Group
 
Deep dive into android restoration - DroidCon Paris 2014
Deep dive into android restoration - DroidCon Paris 2014Deep dive into android restoration - DroidCon Paris 2014
Deep dive into android restoration - DroidCon Paris 2014Paris Android User Group
 
Archos Android based connected home solution - DroidCon Paris 2014
Archos Android based connected home solution - DroidCon Paris 2014Archos Android based connected home solution - DroidCon Paris 2014
Archos Android based connected home solution - DroidCon Paris 2014Paris Android User Group
 
Porting VLC on Android - DroidCon Paris 2014
Porting VLC on Android - DroidCon Paris 2014Porting VLC on Android - DroidCon Paris 2014
Porting VLC on Android - DroidCon Paris 2014Paris Android User Group
 
Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014
Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014
Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014Paris Android User Group
 
maximize app engagement and monetization - DroidCon Paris 2014
maximize app engagement and monetization - DroidCon Paris 2014maximize app engagement and monetization - DroidCon Paris 2014
maximize app engagement and monetization - DroidCon Paris 2014Paris Android User Group
 
Using the android ndk - DroidCon Paris 2014
Using the android ndk - DroidCon Paris 2014Using the android ndk - DroidCon Paris 2014
Using the android ndk - DroidCon Paris 2014Paris Android User Group
 
Holo material design transition - DroidCon Paris 2014
Holo material design transition - DroidCon Paris 2014Holo material design transition - DroidCon Paris 2014
Holo material design transition - DroidCon Paris 2014Paris Android User Group
 
Google glass droidcon - DroidCon Paris 2014
Google glass droidcon - DroidCon Paris 2014Google glass droidcon - DroidCon Paris 2014
Google glass droidcon - DroidCon Paris 2014Paris Android User Group
 
Embedded webserver implementation and usage - DroidCon Paris 2014
Embedded webserver implementation and usage - DroidCon Paris 2014Embedded webserver implementation and usage - DroidCon Paris 2014
Embedded webserver implementation and usage - DroidCon Paris 2014Paris Android User Group
 
Petit design Grande humanité par Geoffrey Dorne - DroidCon Paris 2014
Petit design Grande humanité par Geoffrey Dorne - DroidCon Paris 2014Petit design Grande humanité par Geoffrey Dorne - DroidCon Paris 2014
Petit design Grande humanité par Geoffrey Dorne - DroidCon Paris 2014Paris Android User Group
 
What's new in android 4.4 - Romain Guy & Chet Haase
What's new in android 4.4 - Romain Guy & Chet HaaseWhat's new in android 4.4 - Romain Guy & Chet Haase
What's new in android 4.4 - Romain Guy & Chet HaaseParis Android User Group
 
Efficient Image Processing - Nicolas Roard
Efficient Image Processing - Nicolas RoardEfficient Image Processing - Nicolas Roard
Efficient Image Processing - Nicolas RoardParis Android User Group
 

More from Paris Android User Group (20)

Workshop: Amazon developer ecosystem - DroidCon Paris2014
Workshop: Amazon developer ecosystem - DroidCon Paris2014Workshop: Amazon developer ecosystem - DroidCon Paris2014
Workshop: Amazon developer ecosystem - DroidCon Paris2014
 
Extending your apps to wearables - DroidCon Paris 2014
Extending your apps to wearables -  DroidCon Paris 2014Extending your apps to wearables -  DroidCon Paris 2014
Extending your apps to wearables - DroidCon Paris 2014
 
Scaling android development - DroidCon Paris 2014
Scaling android development - DroidCon Paris 2014Scaling android development - DroidCon Paris 2014
Scaling android development - DroidCon Paris 2014
 
Ingredient of awesome app - DroidCon Paris 2014
Ingredient of awesome app - DroidCon Paris 2014Ingredient of awesome app - DroidCon Paris 2014
Ingredient of awesome app - DroidCon Paris 2014
 
Framing the canvas - DroidCon Paris 2014
Framing the canvas - DroidCon Paris 2014Framing the canvas - DroidCon Paris 2014
Framing the canvas - DroidCon Paris 2014
 
Deep dive into android restoration - DroidCon Paris 2014
Deep dive into android restoration - DroidCon Paris 2014Deep dive into android restoration - DroidCon Paris 2014
Deep dive into android restoration - DroidCon Paris 2014
 
Archos Android based connected home solution - DroidCon Paris 2014
Archos Android based connected home solution - DroidCon Paris 2014Archos Android based connected home solution - DroidCon Paris 2014
Archos Android based connected home solution - DroidCon Paris 2014
 
Porting VLC on Android - DroidCon Paris 2014
Porting VLC on Android - DroidCon Paris 2014Porting VLC on Android - DroidCon Paris 2014
Porting VLC on Android - DroidCon Paris 2014
 
Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014
Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014
Robotium vs Espresso: Get ready to rumble ! - DroidCon Paris 2014
 
Buildsystem.mk - DroidCon Paris 2014
Buildsystem.mk - DroidCon Paris 2014Buildsystem.mk - DroidCon Paris 2014
Buildsystem.mk - DroidCon Paris 2014
 
maximize app engagement and monetization - DroidCon Paris 2014
maximize app engagement and monetization - DroidCon Paris 2014maximize app engagement and monetization - DroidCon Paris 2014
maximize app engagement and monetization - DroidCon Paris 2014
 
Using the android ndk - DroidCon Paris 2014
Using the android ndk - DroidCon Paris 2014Using the android ndk - DroidCon Paris 2014
Using the android ndk - DroidCon Paris 2014
 
Holo material design transition - DroidCon Paris 2014
Holo material design transition - DroidCon Paris 2014Holo material design transition - DroidCon Paris 2014
Holo material design transition - DroidCon Paris 2014
 
Death to passwords - DroidCon Paris 2014
Death to passwords - DroidCon Paris 2014Death to passwords - DroidCon Paris 2014
Death to passwords - DroidCon Paris 2014
 
Google glass droidcon - DroidCon Paris 2014
Google glass droidcon - DroidCon Paris 2014Google glass droidcon - DroidCon Paris 2014
Google glass droidcon - DroidCon Paris 2014
 
Embedded webserver implementation and usage - DroidCon Paris 2014
Embedded webserver implementation and usage - DroidCon Paris 2014Embedded webserver implementation and usage - DroidCon Paris 2014
Embedded webserver implementation and usage - DroidCon Paris 2014
 
Petit design Grande humanité par Geoffrey Dorne - DroidCon Paris 2014
Petit design Grande humanité par Geoffrey Dorne - DroidCon Paris 2014Petit design Grande humanité par Geoffrey Dorne - DroidCon Paris 2014
Petit design Grande humanité par Geoffrey Dorne - DroidCon Paris 2014
 
What's new in android 4.4 - Romain Guy & Chet Haase
What's new in android 4.4 - Romain Guy & Chet HaaseWhat's new in android 4.4 - Romain Guy & Chet Haase
What's new in android 4.4 - Romain Guy & Chet Haase
 
Efficient Image Processing - Nicolas Roard
Efficient Image Processing - Nicolas RoardEfficient Image Processing - Nicolas Roard
Efficient Image Processing - Nicolas Roard
 
Build a user experience by Eyal Lezmy
Build a user experience by Eyal LezmyBuild a user experience by Eyal Lezmy
Build a user experience by Eyal Lezmy
 

Prez android annotations

  • 1. AndroidAnnotations Simple and powerful Android code! sponsorisé par eBusiness Information, groupe Excilys jeudi 8 mars 12
  • 2. SPEAKERS • Pierre-Yves RICAU (@Piwai) • Alexandre THOMAS (@AleksThomas) jeudi 8 mars 12
  • 3. CE SOIR • Dev Android, les trucs pas sexy • AndroidAnnotations à la rescousse! • Live coding jeudi 8 mars 12
  • 7. Activity = God Object jeudi 8 mars 12
  • 8. Activity = God Object jeudi 8 mars 12
  • 10. ASYNCTASK void doSomeCrazyStuff(Param param) { new AsyncTask<Param, Progress, Void>() { @Override protected Void doInBackground(Param... params) { Param myParam = params[0]; publishProgress(new Progress()); mySuperDownloader.downloadStuff(myParam); return null; } protected void onProgressUpdate(Progress... values) { Progress myProgress = values[0]; updateProgress(myProgress); }; protected void onPostExecute(Void result) { // ... }; }.execute(param); } jeudi 8 mars 12
  • 11. TextView myTextView = (TextView) findViewById(R.id.someId); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); findViewById(R.id.textView).setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { handler.postDelayed(new Runnable() { @Override public void run() { // ... } }, 500); } }); jeudi 8 mars 12
  • 12. ET SI VOTRE CODE RESSEMBLAIT À ÇA ? jeudi 8 mars 12
  • 13. SIMPLER VIEW HANDLING @EActivity(R.layout.main) public class EditActivity extends Activity { @ViewById(R.id.titleTextView) TextView title; @ViewById EditText editText; @AfterViews void initTitle() { title.setText("42"); } } jeudi 8 mars 12
  • 14. SIMPLER EVENT HANDLING @EActivity(R.layout.main) public class EditActivity extends Activity { @Click(R.id.downloadButton) void startDownloading() { } @Click void myButtonClicked() { } } jeudi 8 mars 12
  • 15. SIMPLER THREADING @EActivity(R.layout.main) public class EditActivity extends Activity { @Background void doSomeBackgroundWork() { } @UiThread void updateUI() { } } jeudi 8 mars 12
  • 16. REST CLIENT @Rest("http://www.stuff.com") public interface StuffClient { @Get("/stuff/{userId}?search={search}") Stuff getStuff(String search, String userId); @Post("/stuff/{userId}") void updateStuff(Stuff stuff, String userId); } jeudi 8 mars 12
  • 17. INJECTION DE DÉPENDANCES @EBean public class SomeBean { @Bean SomeOtherBean dependency1; } jeudi 8 mars 12
  • 18. TOUT ENSEMBLE! @EActivity(R.layout.main) public class EditActivity extends Activity { @ViewById EditText searchInput; @RestService RestClient restClient; @Bean Datastore datastore; @Click void downloadButtonClicked() { doSomeBackgroundWork(searchInput.getText().toString()); } @Background void doSomeBackgroundWork(String search) { Stuff stuff = restClient.getStuff(search); datastore.saveStuff(stuff); updateUI(stuff); } @UiThread void updateUI(Stuff stuff) { // Show stuff } } jeudi 8 mars 12
  • 19. TAKE THAT, ANDROID GOD! jeudi 8 mars 12
  • 20. COMMENT ? • Java 6 Annotation Processor • Génération de code à la compilation • Exécuter automatiquement par javac AndroidAnnotations Simple and powerful Android code! jeudi 8 mars 12
  • 21. SOUS-CLASSE GÉNÉRÉE public final class EditActivity_ extends EditActivity { // Ugly Android code goes here } jeudi 8 mars 12
  • 22. PIÈGES CLASSIQUES <activity android:name=".EditActivity_" /> startActivity(new Intent(this, EditActivity_.class)); EditActivity_.intent(this).start(); jeudi 8 mars 12
  • 23. AVANTAGES • Compile time = no runtime overhead • Code debuggable & readable • No vendor lock-in! jeudi 8 mars 12
  • 25. PRODUCTIVITÉ VuzZz Quality of life, Geolocalized. Développée en 48h jeudi 8 mars 12
  • 26. CODE PROPRE Live coding! Nettoyage de printemps jeudi 8 mars 12
  • 27. QUESTIONS? • http://androidannotations.org • @AndAnnotations jeudi 8 mars 12