80
DESENVOLVENDO PARA ANDROID COM FERRAMENTAS LIVRES MARLON SILVA CARVALHO domingo, 29 de abril de 12

Flisol 2012

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: Flisol 2012

DESENVOLVENDO PARA ANDROIDCOM FERRAMENTAS LIVRES

MARLON SILVA CARVALHO domingo, 29 de abril de 12

Page 2: Flisol 2012

twitter.com/marlonscarvalho

marlon.silvacarvalho.net

[email protected]

domingo, 29 de abril de 12

Page 3: Flisol 2012

domingo, 29 de abril de 12

Page 4: Flisol 2012

domingo, 29 de abril de 12

Page 5: Flisol 2012

domingo, 29 de abril de 12

Page 6: Flisol 2012

o inevitável para os desenvolvendores......era surgir uma grande quantidade de ferramentas opensource

domingo, 29 de abril de 12

Page 7: Flisol 2012

domingo, 29 de abril de 12

Page 8: Flisol 2012

vamos começar do começo...

...ao criar seu projeto.

domingo, 29 de abril de 12

Page 9: Flisol 2012

dependências para bibliotecas

domingo, 29 de abril de 12

Page 10: Flisol 2012

lib-dep-1.1 lib-dep-1.2

lib-xml lib-json

domingo, 29 de abril de 12

Page 11: Flisol 2012

domingo, 29 de abril de 12

Page 12: Flisol 2012

ou você pode usar o:

e gerenciar seu projeto por ele!

domingo, 29 de abril de 12

Page 13: Flisol 2012

o processo de build é complexo? requer muitas regras?

por que usar?

domingo, 29 de abril de 12

Page 14: Flisol 2012

testar

compilar

empacotar

deploy

gerar um tags no repositório

empacotar com certificados diferentes

testes unitários, com BDD, com seilaoquê!

domingo, 29 de abril de 12

Page 15: Flisol 2012

sua aplicação possui muitas dependências para bibliotecas externas?

por que usar?

domingo, 29 de abril de 12

Page 16: Flisol 2012

quer automatizar tarefas repetitivas no seu processo de build?

por que usar?

domingo, 29 de abril de 12

Page 17: Flisol 2012

você usa um servidor de integração contínua?

por que usar?

domingo, 29 de abril de 12

Page 18: Flisol 2012

sua aplicação está dividida em vários módulos?

por que usar?

domingo, 29 de abril de 12

Page 19: Flisol 2012

foi feito para você!

então,

domingo, 29 de abril de 12

Page 20: Flisol 2012

dependency injectionevents, logs, factories, fragments, services, resources

http://roboguice.googlecode.com/

domingo, 29 de abril de 12

Page 21: Flisol 2012

- =

a simples equação

+AOP

domingo, 29 de abril de 12

Page 22: Flisol 2012

“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

Page 23: Flisol 2012

com DI eu não faço isso:

MinhaInterface objeto =

new UmaClasseQueImplementaInterface();

domingo, 29 de abril de 12

Page 24: Flisol 2012

com DI eu faço apenas isso:

@InjectUmaInterface obj;

domingo, 29 de abril de 12

Page 25: Flisol 2012

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 );     } }

código repetitivoo modo “android nativo” de programar:

domingo, 29 de abril de 12

Page 26: Flisol 2012

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 );     } }

código não-repetitivoo modo “RoboGuice” de programar:

domingo, 29 de abril de 12

Page 27: Flisol 2012

@Inject

domingo, 29 de abril de 12

Page 28: Flisol 2012

public class MyActivity extends RoboActivity {    @Inject protected Listeners listeners;}

class Listeners {        public void doOnResume(@Observes OnResumeEvent e) {    }        public void doOnCreate(@Observes OnCreateEvent e) {    }    }

eventos pra cá, eventos pra láo modo “RoboGuice” de programar:

domingo, 29 de abril de 12

Page 29: Flisol 2012

quem usa isso?será que presta mesmo?

domingo, 29 de abril de 12

Page 30: Flisol 2012

eliminar código repetitivopor que usar?

domingo, 29 de abril de 12

Page 31: Flisol 2012

focar no negócio da aplicação

por que usar?

domingo, 29 de abril de 12

Page 32: Flisol 2012

ter os benefícios da injeção de dependência no

desenvolvimento mobile

por que usar?

domingo, 29 de abril de 12

Page 33: Flisol 2012

o maldito context não precisa mais caminhar

entre as diversas camadas da sua aplicação

por que usar?

domingo, 29 de abril de 12

Page 34: Flisol 2012

código mais limpo, claro e focado no negócio da sua

aplicação

enfim:

domingo, 29 de abril de 12

Page 35: Flisol 2012

testes unitários em qualquer jvm

http://roboletric.org/

domingo, 29 de abril de 12

Page 36: Flisol 2012

o maldito emulador!

domingo, 29 de abril de 12

Page 37: Flisol 2012

testes rodando na própria IDE

por que usar?

domingo, 29 de abril de 12

Page 38: Flisol 2012

testes rodando em servidores de integração

por que usar?

domingo, 29 de abril de 12

Page 39: Flisol 2012

@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

Page 40: Flisol 2012

mas... um rápido parênteses... (

domingo, 29 de abril de 12

Page 41: Flisol 2012

por que você faz testes unitários em android?

domingo, 29 de abril de 12

Page 42: Flisol 2012

regras de negócio em serviços

domingo, 29 de abril de 12

Page 43: Flisol 2012

dados nas nuvens

domingo, 29 de abril de 12

Page 44: Flisol 2012

)

domingo, 29 de abril de 12

Page 45: Flisol 2012

e a maldita persistência de dados?

domingo, 29 de abril de 12

Page 46: Flisol 2012

class MeuHelper extends SQLiteOpenHelper {

public void onCreate(SQLiteDatabase db) { }

public void onUpgrade(SQLiteDatabase db, int old, int newV) { }

}

faça um extends de SQLiteOpenHelpero modo android nativo de programar:

domingo, 29 de abril de 12

Page 47: Flisol 2012

Cursor cursor = database.rawQuery("select * from tabela");

MeuHelper helper = new MeuHelper();SQLiteDatabase database = helper.getWritableDatabase();

domingo, 29 de abril de 12

Page 48: Flisol 2012

ContentValues values = new ContentValues();values.put(“coluna1”, comment);database.insert(“tabela”, null, values);

MeuHelper helper = new MeuHelper();SQLiteDatabase database = helper.getWritableDatabase();

domingo, 29 de abril de 12

Page 49: Flisol 2012

database.delete(“tabela”, “_id” + " = " + id, null);

MeuHelper helper = new MeuHelper();SQLiteDatabase database = helper.getWritableDatabase();

domingo, 29 de abril de 12

Page 50: Flisol 2012

aliendroid-activerecord para diminuir a dor da persistência de dados

https://github.com/marloncarvalho/aliendroid-activerecord

domingo, 29 de abril de 12

Page 51: Flisol 2012

public class Item extends Model { public String atributo1; public String atributo2; public String atributo3;}

defina seu model

domingo, 29 de abril de 12

Page 52: Flisol 2012

List<Item> itens = Model.!ndAll(Item.class);item.insert();

Item item = Model.load(Item.class, 1L);

item.delete();

item.update();Model.where(...);

domingo, 29 de abril de 12

Page 53: Flisol 2012

tabela criada automaticamente

domingo, 29 de abril de 12

Page 54: Flisol 2012

colunas mapeadas para os atributos

domingo, 29 de abril de 12

Page 55: Flisol 2012

minimiza a necessidade de códigos SQL

por que usar?

domingo, 29 de abril de 12

Page 56: Flisol 2012

automatiza tarefas repetitivaspor que usar?

domingo, 29 de abril de 12

Page 57: Flisol 2012

integração contínuaserá que você precisa de um?

domingo, 29 de abril de 12

Page 58: Flisol 2012

por que usar?sua equipe é de média a grande?

domingo, 29 de abril de 12

Page 59: Flisol 2012

por que usar?quer garantir que a cada commit seu projeto continua funcionando?

domingo, 29 de abril de 12

Page 60: Flisol 2012

por que usar?você precisa de resposta instantânea

para erros de integração?

domingo, 29 de abril de 12

Page 61: Flisol 2012

use o jenkins com seu projeto androidroda tanto com o roboletric como com o emulador

domingo, 29 de abril de 12

Page 62: Flisol 2012

domingo, 29 de abril de 12

Page 63: Flisol 2012

tem como usar BDD no android?behavior driven development

domingo, 29 de abril de 12

Page 64: Flisol 2012

calabash-android

https://github.com/calabash/calabash-android

domingo, 29 de abril de 12

Page 65: Flisol 2012

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

Page 66: Flisol 2012

calabash-android

domingo, 29 de abril de 12

Page 67: Flisol 2012

ter os benefícios do BDD em seu projeto android

por que usar?

domingo, 29 de abril de 12

Page 68: Flisol 2012

e quando dá pau na sua app?como saber quando isso aconteceu

domingo, 29 de abril de 12

Page 69: Flisol 2012

Google Playeles lhe dão uma forcinha, mas...

...e se você quiser mais informações?e um relatório personalizado?

domingo, 29 de abril de 12

Page 70: Flisol 2012

Application Crash Report for Android

http://acra.googlecode.com/

domingo, 29 de abril de 12

Page 71: Flisol 2012

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

Page 72: Flisol 2012

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

Page 73: Flisol 2012

domingo, 29 de abril de 12

Page 74: Flisol 2012

domingo, 29 de abril de 12

Page 75: Flisol 2012

você não está satisfeito com as opções do Google Play

por que usar?

domingo, 29 de abril de 12

Page 76: Flisol 2012

você quer personalizar seu relatório

por que usar?

domingo, 29 de abril de 12

Page 77: Flisol 2012

você quer dar um feedback mais elegante para o

usuário

por que usar?

domingo, 29 de abril de 12

Page 78: Flisol 2012

você quer mais detalhes sobre o erro

por que usar?

domingo, 29 de abril de 12

Page 79: Flisol 2012

é só isso!

domingo, 29 de abril de 12

Page 80: Flisol 2012

androidbahia.info

domingo, 29 de abril de 12