0
DESENVOLVENDO PARA ANDROID                COM FERRAMENTAS LIVRES                                                       MAR...
marlon            .silvacarvalho.net                             twitter.com/   marlonscarvalho                           ...
domingo, 29 de abril de 12
domingo, 29 de abril de 12
domingo, 29 de abril de 12
o inevitável para os desenvolvendores...                  ...era surgir uma grande quantidade de ferramentas opensourcedom...
domingo, 29 de abril de 12
vamos	 começar	 do	 começo...                             ...ao	 criar	 seu	 projeto.domingo, 29 de abril de 12
dependências	 para	 bibliotecasdomingo, 29 de abril de 12
lib-dep-1.1       lib-dep-1.2                             lib-xml   lib-jsondomingo, 29 de abril de 12
domingo, 29 de abril de 12
ou	 você	 pode	 usar	 o:                             e	 gerenciar	 seu	 projeto	 por	 ele!domingo, 29 de abril de 12
por	 que	 usar?                             o	 processo	 de	 build	 é	 complexo?	                                    reque...
compilar        testar                             testes	 unitários,	 com	 BDD,	 com	 seilaoquê!	    empacotar           ...
por	 que	 usar?                             sua	 aplicação	 possui	 muitas	 dependências	                                 ...
por	 que	 usar?                             quer	 automatizar	 tarefas	 repetitivas	 no	 seu	                             ...
por	 que	 usar?                             você	 usa	 um	 servidor	 de	 integração	                                      ...
por	 que	 usar?                             sua	 aplicação	 está	 dividida	 em	 vários	                                   ...
então,                                 foi	 feito	 para	 você!domingo, 29 de abril de 12
http://roboguice.googlecode.com/                                  dependency	 injection                             events...
a	 simples	 equação                                 A                             -   O   +           =                   ...
“Dependency                 injection is a            software design pattern that allows a choice of            component...
com	 DI	 eu	 não	 faço	 isso:                             MinhaInterface	 objeto	 =	                                      ...
com	 DI	 eu	 faço	 apenas	 isso:                                     @Inject                                     UmaInterf...
código	 repetitivo            o	 modo	 “android	 nativo”	 de	 programar:        class AndroidWay extends Activity {       ...
código	 não-repetitivo                  o	 modo	 “RoboGuice”	 de	 programar:   class RoboWay extends RoboActivity {       ...
@Injectdomingo, 29 de abril de 12
eventos	 pra	 cá,	 eventos	 pra	 lá                  o	 modo	 “RoboGuice”	 de	 programar:          public class MyActivity...
quem	 usa	 isso?                             será	 que	 presta	 mesmo?domingo, 29 de abril de 12
por	 que	 usar?                             eliminar	 código	 repetitivodomingo, 29 de abril de 12
por	 que	 usar?                             focar	 no	 negócio	 da	                                    aplicaçãodomingo, 2...
por	 que	 usar?                             ter	 os	 benefícios	 da	 injeção	                                    de	 depen...
por	 que	 usar?                               o	 maldito	 context	 não	                                precisa	 mais	 cami...
enfim:                             código	 mais	 limpo,	 claro	 e	                              focado	 no	 negócio	 da	 s...
http://roboletric.org/                             testes	 unitários	 em	 qualquer	 jvmdomingo, 29 de abril de 12
o	 maldito	 emulador!domingo, 29 de abril de 12
por	 que	 usar?                             testes	 rodando	 na	 própria	                                          IDEdomi...
por	 que	 usar?                                testes	 rodando	 em	                              servidores	 de	 integraçã...
@RunWith  (RobolectricTestRunner.class)public class MyActivityTest {    private Activity activity;    private Button press...
mas...	 um	 rápido	 parênteses...	 (domingo, 29 de abril de 12
por	 que	 você	 faz	 testes	 unitários	 em	                                   android?domingo, 29 de abril de 12
regras	 de	 negócio	 em	 serviçosdomingo, 29 de abril de 12
dados	 nas	 nuvensdomingo, 29 de abril de 12
)domingo, 29 de abril de 12
e	 a	 maldita	 persistência	 de	 dados?domingo, 29 de abril de 12
faça	 um	 extends	 de	 SQLiteOpenHelper                              o	 modo	 android	 nativo	 de	 programar:   class MeuH...
MeuHelper helper = new          MeuHelper();          SQLiteDatabase database =          helper.getWritableDatabase();    ...
MeuHelper helper = new MeuHelper();       SQLiteDatabase database =       helper.getWritableDatabase();                   ...
MeuHelper helper = new MeuHelper();          SQLiteDatabase database =          helper.getWritableDatabase();             ...
https://github.com/marloncarvalho/aliendroid-activerecord                                    aliendroid-activerecord	 para...
defina	 seu	 model           public class Item extends Model {             public String atributo1;             public Str...
Item item =                                     Model.load(Item.class, 1L);                             item.insert();    ...
tabela	 criada	                              automaticamentedomingo, 29 de abril de 12
colunas	 mapeadas	                               para	 os	 atributosdomingo, 29 de abril de 12
por	 que	 usar?                             minimiza	 a	 necessidade	 de	 códigos	                                        ...
por	 que	 usar?                             automatiza	 tarefas	 repetitivasdomingo, 29 de abril de 12
integração	 contínua                             será	 que	 você	 precisa	 de	 um?domingo, 29 de abril de 12
por	 que	 usar?                         sua	 equipe	 é	 de	 média	 a	 grande?domingo, 29 de abril de 12
por	 que	 usar?                  quer	 garantir	 que	 a	 cada	 commit	 seu	                      projeto	 continua	 funcio...
por	 que	 usar?                 você	 precisa	 de	 resposta	 instantânea	                        para	 erros	 de	 integraç...
use	 o	 jenkins	 com	 seu	 projeto	 android               roda	 tanto	 com	 o	 roboletric	 como	 com	 o	 emuladordomingo, ...
domingo, 29 de abril de 12
tem	 como	 usar	 BDD	 no	 android?                           behavior	 driven	 developmentdomingo, 29 de abril de 12
https://github.com/calabash/calabash-android                               calabash-androiddomingo, 29 de abril de 12
calabash-android              Feature: Login feature               Scenario: As a valid user I can log into my app        ...
calabash-androiddomingo, 29 de abril de 12
por	 que	 usar?                             ter	 os	 benefícios	 do	 BDD	 em	 seu	 projeto	                               ...
e	 quando	 dá	 pau	 na	 sua	 app?                    como	 saber	 quando	 isso	 aconteceudomingo, 29 de abril de 12
Google	 Play                         eles	 lhe	 dão	 uma	 forcinha,	 mas...                             ...e	 se	 você	 qu...
http://acra.googlecode.com/                   Application	 Crash	 Report	 for	 Androiddomingo, 29 de abril de 12
ACRA is a library enabling Android Application to automatically post their                      crash reports to a   Googl...
import org.acra.*;       import org.acra.annotation.*;       @ReportsCrashes(formKey = "dGVacG0ydVHnaNHjRjVTUTEtb3FPWGc6MQ...
domingo, 29 de abril de 12
domingo, 29 de abril de 12
por	 que	 usar?                             você	 não	 está	 satisfeito	 com	 as	 opções	 do	                             ...
por	 que	 usar?                             você	 quer	 personalizar	 seu	                                        relatóri...
por	 que	 usar?                             você	 quer	 dar	 um	 feedback	                                 mais	 elegante	...
por	 que	 usar?                             você	 quer	 mais	 detalhes	                                    sobre	 o	 errod...
é	 só	 isso!domingo, 29 de abril de 12
androidbahia.infodomingo, 29 de abril de 12
Upcoming SlideShare
Loading in...5
×

Flisol 2012

649

Published on

Apresentação sobre Ferramentas Livres para Desenvolvimento Android feita no Flisol 2012, em Salvador.

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
649
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
12
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Transcript of "Flisol 2012"

  1. 1. DESENVOLVENDO PARA ANDROID COM FERRAMENTAS LIVRES MARLON SILVA CARVALHOdomingo, 29 de abril de 12
  2. 2. marlon .silvacarvalho.net twitter.com/ marlonscarvalho marlon.carvalho @gmail.comdomingo, 29 de abril de 12
  3. 3. domingo, 29 de abril de 12
  4. 4. domingo, 29 de abril de 12
  5. 5. domingo, 29 de abril de 12
  6. 6. o inevitável para os desenvolvendores... ...era surgir uma grande quantidade de ferramentas opensourcedomingo, 29 de abril de 12
  7. 7. domingo, 29 de abril de 12
  8. 8. vamos começar do começo... ...ao criar seu projeto.domingo, 29 de abril de 12
  9. 9. dependências para bibliotecasdomingo, 29 de abril de 12
  10. 10. lib-dep-1.1 lib-dep-1.2 lib-xml lib-jsondomingo, 29 de abril de 12
  11. 11. domingo, 29 de abril de 12
  12. 12. ou você pode usar o: e gerenciar seu projeto por ele!domingo, 29 de abril de 12
  13. 13. por que usar? o processo de build é complexo? requer muitas regras?domingo, 29 de abril de 12
  14. 14. compilar testar testes unitários, com BDD, com seilaoquê! empacotar empacotar com certificados diferentes deploy gerar um tags no repositóriodomingo, 29 de abril de 12
  15. 15. por que usar? sua aplicação possui muitas dependências para bibliotecas externas?domingo, 29 de abril de 12
  16. 16. por que usar? quer automatizar tarefas repetitivas no seu processo de build?domingo, 29 de abril de 12
  17. 17. por que usar? você usa um servidor de integração contínua?domingo, 29 de abril de 12
  18. 18. por que usar? sua aplicação está dividida em vários módulos?domingo, 29 de abril de 12
  19. 19. então, foi feito para você!domingo, 29 de abril de 12
  20. 20. http://roboguice.googlecode.com/ dependency injection events, logs, factories, fragments, services, resourcesdomingo, 29 de abril de 12
  21. 21. a simples equação A - O + = Pdomingo, 29 de abril de 12
  22. 22. “Dependency injection is a software design pattern that allows a choice of component to be made at run-time rather than compile time.”domingo, 29 de abril de 12
  23. 23. com DI eu não faço isso: MinhaInterface objeto = new UmaClasseQueImplementaInterface();domingo, 29 de abril de 12
  24. 24. com DI eu faço apenas isso: @Inject UmaInterface obj;domingo, 29 de abril de 12
  25. 25. código repetitivo o modo “android nativo” de programar: class AndroidWay extends Activity {     TextView name;     ImageView thumbnail;     LocationManager loc;     Drawable icon;     String myName;     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.main);         name      = (TextView) findViewById(R.id.name);         thumbnail = (ImageView) findViewById(R.id.thumbnail);         loc = (LocationManager) getSystemService(Activity.LOCATION_SERVICE);         icon      = getResources().getDrawable(R.drawable.icon);         myName    = getString(R.string.app_name);         name.setText( "Hello, " + myName );     } }domingo, 29 de abril de 12
  26. 26. código não-repetitivo o modo “RoboGuice” de programar: class RoboWay extends RoboActivity {     @InjectView(R.id.name)             TextView name;     @InjectView(R.id.thumbnail)        ImageView thumbnail;     @InjectResource(R.drawable.icon)   Drawable icon;     @InjectResource(R.string.app_name) String myName;     @Inject                            LocationManager loc;     public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.main);         name.setText( "Hello, " + myName );     } }domingo, 29 de abril de 12
  27. 27. @Injectdomingo, 29 de abril de 12
  28. 28. eventos pra cá, eventos pra lá o modo “RoboGuice” de programar: public class MyActivity extends RoboActivity {     @Inject protected Listeners listeners; } class Listeners {         public void doOnResume(@Observes OnResumeEvent e) {     }         public void doOnCreate(@Observes OnCreateEvent e) {     }     }domingo, 29 de abril de 12
  29. 29. quem usa isso? será que presta mesmo?domingo, 29 de abril de 12
  30. 30. por que usar? eliminar código repetitivodomingo, 29 de abril de 12
  31. 31. por que usar? focar no negócio da aplicaçãodomingo, 29 de abril de 12
  32. 32. por que usar? ter os benefícios da injeção de dependência no desenvolvimento mobiledomingo, 29 de abril de 12
  33. 33. por que usar? o maldito context não precisa mais caminhar entre as diversas camadas da sua aplicaçãodomingo, 29 de abril de 12
  34. 34. enfim: código mais limpo, claro e focado no negócio da sua aplicaçãodomingo, 29 de abril de 12
  35. 35. http://roboletric.org/ testes unitários em qualquer jvmdomingo, 29 de abril de 12
  36. 36. o maldito emulador!domingo, 29 de abril de 12
  37. 37. por que usar? testes rodando na própria IDEdomingo, 29 de abril de 12
  38. 38. por que usar? testes rodando em servidores de integraçãodomingo, 29 de abril de 12
  39. 39. @RunWith (RobolectricTestRunner.class)public class MyActivityTest { private Activity activity; private Button pressMeButton; private TextView results; @Before public void setUp() throws Exception { activity = new MyActivity(); activity.onCreate(null); pressMeButton = (Button)activity.findViewById(R.id.press_me_button); results = (TextView) activity.findViewById(R.id.results_text_view); } @Test public void shouldUpdateResultsWhenButtonIsClicked() throws Exception { pressMeButton.performClick(); String resultsText = results.getText().toString(); assertThat(resultsText, equalTo("Testing Android Rocks!")); }}domingo, 29 de abril de 12
  40. 40. mas... um rápido parênteses... (domingo, 29 de abril de 12
  41. 41. por que você faz testes unitários em android?domingo, 29 de abril de 12
  42. 42. regras de negócio em serviçosdomingo, 29 de abril de 12
  43. 43. dados nas nuvensdomingo, 29 de abril de 12
  44. 44. )domingo, 29 de abril de 12
  45. 45. e a maldita persistência de dados?domingo, 29 de abril de 12
  46. 46. faça um extends de SQLiteOpenHelper o modo android nativo de programar: class MeuHelper extends SQLiteOpenHelper { public void onCreate(SQLiteDatabase db) { } public void onUpgrade(SQLiteDatabase db, int old, int newV) { } }domingo, 29 de abril de 12
  47. 47. MeuHelper helper = new MeuHelper(); SQLiteDatabase database = helper.getWritableDatabase(); Cursor cursor = database.rawQuery("select * from tabela");domingo, 29 de abril de 12
  48. 48. MeuHelper helper = new MeuHelper(); SQLiteDatabase database = helper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put(“coluna1”, comment); database.insert(“tabela”, null, values);domingo, 29 de abril de 12
  49. 49. MeuHelper helper = new MeuHelper(); SQLiteDatabase database = helper.getWritableDatabase(); database.delete(“tabela”, “_id” + " = " + id, null);domingo, 29 de abril de 12
  50. 50. https://github.com/marloncarvalho/aliendroid-activerecord aliendroid-activerecord para diminuir a dor da persistência de dadosdomingo, 29 de abril de 12
  51. 51. defina seu model public class Item extends Model { public String atributo1; public String atributo2; public String atributo3; }domingo, 29 de abril de 12
  52. 52. Item item = Model.load(Item.class, 1L); item.insert(); List<Item> itens = Model.findAll(Item.class); item.delete(); item.update(); Model.where(...);domingo, 29 de abril de 12
  53. 53. tabela criada automaticamentedomingo, 29 de abril de 12
  54. 54. colunas mapeadas para os atributosdomingo, 29 de abril de 12
  55. 55. por que usar? minimiza a necessidade de códigos SQLdomingo, 29 de abril de 12
  56. 56. por que usar? automatiza tarefas repetitivasdomingo, 29 de abril de 12
  57. 57. integração contínua será que você precisa de um?domingo, 29 de abril de 12
  58. 58. por que usar? sua equipe é de média a grande?domingo, 29 de abril de 12
  59. 59. por que usar? quer garantir que a cada commit seu projeto continua funcionando?domingo, 29 de abril de 12
  60. 60. por que usar? você precisa de resposta instantânea para erros de integração?domingo, 29 de abril de 12
  61. 61. use o jenkins com seu projeto android roda tanto com o roboletric como com o emuladordomingo, 29 de abril de 12
  62. 62. domingo, 29 de abril de 12
  63. 63. tem como usar BDD no android? behavior driven developmentdomingo, 29 de abril de 12
  64. 64. https://github.com/calabash/calabash-android calabash-androiddomingo, 29 de abril de 12
  65. 65. calabash-android Feature: Login feature Scenario: As a valid user I can log into my app Given I am a valid user And I enter my username And I enter my password And I press "Login" Then I see "Welcome to coolest app ever"domingo, 29 de abril de 12
  66. 66. calabash-androiddomingo, 29 de abril de 12
  67. 67. por que usar? ter os benefícios do BDD em seu projeto androiddomingo, 29 de abril de 12
  68. 68. e quando dá pau na sua app? como saber quando isso aconteceudomingo, 29 de abril de 12
  69. 69. Google Play eles lhe dão uma forcinha, mas... ...e se você quiser mais informações? e um relatório personalizado?domingo, 29 de abril de 12
  70. 70. http://acra.googlecode.com/ Application Crash Report for Androiddomingo, 29 de abril de 12
  71. 71. ACRA is a library enabling Android Application to automatically post their crash reports to a Google Docs form . It is targetted to android applications developers to help them get data from their applications when they crash or behave erroneously.domingo, 29 de abril de 12
  72. 72. import org.acra.*; import org.acra.annotation.*; @ReportsCrashes(formKey = "dGVacG0ydVHnaNHjRjVTUTEtb3FPWGc6MQ") public class MyApplication extends Application {     @Override     public void onCreate() {         ACRA.init(this);         super.onCreate();     } }domingo, 29 de abril de 12
  73. 73. domingo, 29 de abril de 12
  74. 74. domingo, 29 de abril de 12
  75. 75. por que usar? você não está satisfeito com as opções do Google Playdomingo, 29 de abril de 12
  76. 76. por que usar? você quer personalizar seu relatóriodomingo, 29 de abril de 12
  77. 77. por que usar? você quer dar um feedback mais elegante para o usuáriodomingo, 29 de abril de 12
  78. 78. por que usar? você quer mais detalhes sobre o errodomingo, 29 de abril de 12
  79. 79. é só isso!domingo, 29 de abril de 12
  80. 80. androidbahia.infodomingo, 29 de abril de 12
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×