• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Flisol 2012
 

Flisol 2012

on

  • 842 views

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

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

Statistics

Views

Total Views
842
Views on SlideShare
839
Embed Views
3

Actions

Likes
2
Downloads
11
Comments
0

1 Embed 3

https://si0.twimg.com 3

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Flisol 2012 Flisol 2012 Presentation Transcript

    • DESENVOLVENDO PARA ANDROID COM FERRAMENTAS LIVRES MARLON SILVA CARVALHOdomingo, 29 de abril de 12
    • marlon .silvacarvalho.net twitter.com/ marlonscarvalho marlon.carvalho @gmail.comdomingo, 29 de abril de 12
    • 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 opensourcedomingo, 29 de abril de 12
    • 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? requer muitas regras?domingo, 29 de abril de 12
    • 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
    • por que usar? sua aplicação possui muitas dependências para bibliotecas externas?domingo, 29 de abril de 12
    • por que usar? quer automatizar tarefas repetitivas no seu processo de build?domingo, 29 de abril de 12
    • por que usar? você usa um servidor de integração contínua?domingo, 29 de abril de 12
    • por que usar? sua aplicação está dividida em vários módulos?domingo, 29 de abril de 12
    • então, foi feito para você!domingo, 29 de abril de 12
    • http://roboguice.googlecode.com/ dependency injection events, logs, factories, fragments, services, resourcesdomingo, 29 de abril de 12
    • a simples equação A - O + = Pdomingo, 29 de abril de 12
    • “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
    • com DI eu não faço isso: MinhaInterface objeto = new UmaClasseQueImplementaInterface();domingo, 29 de abril de 12
    • com DI eu faço apenas isso: @Inject UmaInterface obj;domingo, 29 de abril de 12
    • 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
    • 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
    • @Injectdomingo, 29 de abril de 12
    • 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
    • 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, 29 de abril de 12
    • por que usar? ter os benefícios da injeção de dependência no desenvolvimento mobiledomingo, 29 de abril de 12
    • por que usar? o maldito context não precisa mais caminhar entre as diversas camadas da sua aplicaçãodomingo, 29 de abril de 12
    • enfim: código mais limpo, claro e focado no negócio da sua aplicaçãodomingo, 29 de abril de 12
    • 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 IDEdomingo, 29 de abril de 12
    • por que usar? testes rodando em servidores de integraçãodomingo, 29 de abril de 12
    • @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
    • 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 MeuHelper extends SQLiteOpenHelper { public void onCreate(SQLiteDatabase db) { } public void onUpgrade(SQLiteDatabase db, int old, int newV) { } }domingo, 29 de abril de 12
    • MeuHelper helper = new MeuHelper(); SQLiteDatabase database = helper.getWritableDatabase(); Cursor cursor = database.rawQuery("select * from tabela");domingo, 29 de abril de 12
    • 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
    • MeuHelper helper = new MeuHelper(); SQLiteDatabase database = helper.getWritableDatabase(); database.delete(“tabela”, “_id” + " = " + id, null);domingo, 29 de abril de 12
    • https://github.com/marloncarvalho/aliendroid-activerecord aliendroid-activerecord para diminuir a dor da persistência de dadosdomingo, 29 de abril de 12
    • defina seu model public class Item extends Model { public String atributo1; public String atributo2; public String atributo3; }domingo, 29 de abril de 12
    • 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
    • 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 SQLdomingo, 29 de abril de 12
    • 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 funcionando?domingo, 29 de abril de 12
    • por que usar? você precisa de resposta instantânea para erros de integração?domingo, 29 de abril de 12
    • use o jenkins com seu projeto android roda tanto com o roboletric como com o emuladordomingo, 29 de abril de 12
    • 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 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
    • calabash-androiddomingo, 29 de abril de 12
    • por que usar? ter os benefícios do BDD em seu projeto androiddomingo, 29 de abril de 12
    • 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ê quiser mais informações? e um relatório personalizado?domingo, 29 de abril de 12
    • 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 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
    • 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
    • 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 Google Playdomingo, 29 de abril de 12
    • por que usar? você quer personalizar seu relatóriodomingo, 29 de abril de 12
    • por que usar? você quer dar um feedback mais elegante para o usuáriodomingo, 29 de abril de 12
    • por que usar? você quer mais detalhes sobre o errodomingo, 29 de abril de 12
    • é só isso!domingo, 29 de abril de 12
    • androidbahia.infodomingo, 29 de abril de 12