Flisol 2012

850 views

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
850
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
13
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

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

×