flisol 2012
DESCRIPTION
Apresentação sobre Ferramentas Livres para Desenvolvimento Android feita no Flisol 2012, em Salvador.TRANSCRIPT
![Page 1: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/1.jpg)
DESENVOLVENDO PARA ANDROIDCOM FERRAMENTAS LIVRES
MARLON SILVA CARVALHO domingo, 29 de abril de 12
![Page 2: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/2.jpg)
twitter.com/marlonscarvalho
marlon.silvacarvalho.net
domingo, 29 de abril de 12
![Page 3: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/3.jpg)
domingo, 29 de abril de 12
![Page 4: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/4.jpg)
domingo, 29 de abril de 12
![Page 5: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/5.jpg)
domingo, 29 de abril de 12
![Page 6: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/6.jpg)
o inevitável para os desenvolvendores......era surgir uma grande quantidade de ferramentas opensource
domingo, 29 de abril de 12
![Page 7: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/7.jpg)
domingo, 29 de abril de 12
![Page 8: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/8.jpg)
vamos começar do começo...
...ao criar seu projeto.
domingo, 29 de abril de 12
![Page 9: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/9.jpg)
dependências para bibliotecas
domingo, 29 de abril de 12
![Page 10: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/10.jpg)
lib-dep-1.1 lib-dep-1.2
lib-xml lib-json
domingo, 29 de abril de 12
![Page 11: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/11.jpg)
domingo, 29 de abril de 12
![Page 12: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/12.jpg)
ou você pode usar o:
e gerenciar seu projeto por ele!
domingo, 29 de abril de 12
![Page 13: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/13.jpg)
o processo de build é complexo? requer muitas regras?
por que usar?
domingo, 29 de abril de 12
![Page 14: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/15.jpg)
sua aplicação possui muitas dependências para bibliotecas externas?
por que usar?
domingo, 29 de abril de 12
![Page 16: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/16.jpg)
quer automatizar tarefas repetitivas no seu processo de build?
por que usar?
domingo, 29 de abril de 12
![Page 17: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/17.jpg)
você usa um servidor de integração contínua?
por que usar?
domingo, 29 de abril de 12
![Page 18: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/18.jpg)
sua aplicação está dividida em vários módulos?
por que usar?
domingo, 29 de abril de 12
![Page 19: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/19.jpg)
foi feito para você!
então,
domingo, 29 de abril de 12
![Page 20: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/20.jpg)
dependency injectionevents, logs, factories, fragments, services, resources
http://roboguice.googlecode.com/
domingo, 29 de abril de 12
![Page 21: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/21.jpg)
- =
a simples equação
+AOP
domingo, 29 de abril de 12
![Page 22: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/22.jpg)
“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](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/23.jpg)
com DI eu não faço isso:
MinhaInterface objeto =
new UmaClasseQueImplementaInterface();
domingo, 29 de abril de 12
![Page 24: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/24.jpg)
com DI eu faço apenas isso:
@InjectUmaInterface obj;
domingo, 29 de abril de 12
![Page 25: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/25.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/26.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/27.jpg)
@Inject
domingo, 29 de abril de 12
![Page 28: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/28.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/29.jpg)
quem usa isso?será que presta mesmo?
domingo, 29 de abril de 12
![Page 30: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/30.jpg)
eliminar código repetitivopor que usar?
domingo, 29 de abril de 12
![Page 31: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/31.jpg)
focar no negócio da aplicação
por que usar?
domingo, 29 de abril de 12
![Page 32: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/32.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/33.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/34.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/35.jpg)
testes unitários em qualquer jvm
http://roboletric.org/
domingo, 29 de abril de 12
![Page 36: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/36.jpg)
o maldito emulador!
domingo, 29 de abril de 12
![Page 37: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/37.jpg)
testes rodando na própria IDE
por que usar?
domingo, 29 de abril de 12
![Page 38: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/38.jpg)
testes rodando em servidores de integração
por que usar?
domingo, 29 de abril de 12
![Page 39: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/39.jpg)
@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](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/40.jpg)
mas... um rápido parênteses... (
domingo, 29 de abril de 12
![Page 41: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/41.jpg)
por que você faz testes unitários em android?
domingo, 29 de abril de 12
![Page 42: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/42.jpg)
regras de negócio em serviços
domingo, 29 de abril de 12
![Page 43: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/43.jpg)
dados nas nuvens
domingo, 29 de abril de 12
![Page 44: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/44.jpg)
)
domingo, 29 de abril de 12
![Page 45: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/45.jpg)
e a maldita persistência de dados?
domingo, 29 de abril de 12
![Page 46: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/46.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/47.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/48.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/49.jpg)
database.delete(“tabela”, “_id” + " = " + id, null);
MeuHelper helper = new MeuHelper();SQLiteDatabase database = helper.getWritableDatabase();
domingo, 29 de abril de 12
![Page 50: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/50.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/51.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/52.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/53.jpg)
tabela criada automaticamente
domingo, 29 de abril de 12
![Page 54: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/54.jpg)
colunas mapeadas para os atributos
domingo, 29 de abril de 12
![Page 55: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/55.jpg)
minimiza a necessidade de códigos SQL
por que usar?
domingo, 29 de abril de 12
![Page 56: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/56.jpg)
automatiza tarefas repetitivaspor que usar?
domingo, 29 de abril de 12
![Page 57: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/57.jpg)
integração contínuaserá que você precisa de um?
domingo, 29 de abril de 12
![Page 58: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/58.jpg)
por que usar?sua equipe é de média a grande?
domingo, 29 de abril de 12
![Page 59: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/59.jpg)
por que usar?quer garantir que a cada commit seu projeto continua funcionando?
domingo, 29 de abril de 12
![Page 60: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/60.jpg)
por que usar?você precisa de resposta instantânea
para erros de integração?
domingo, 29 de abril de 12
![Page 61: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/61.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/62.jpg)
domingo, 29 de abril de 12
![Page 63: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/63.jpg)
tem como usar BDD no android?behavior driven development
domingo, 29 de abril de 12
![Page 64: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/64.jpg)
calabash-android
https://github.com/calabash/calabash-android
domingo, 29 de abril de 12
![Page 65: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/65.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/66.jpg)
calabash-android
domingo, 29 de abril de 12
![Page 67: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/67.jpg)
ter os benefícios do BDD em seu projeto android
por que usar?
domingo, 29 de abril de 12
![Page 68: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/68.jpg)
e quando dá pau na sua app?como saber quando isso aconteceu
domingo, 29 de abril de 12
![Page 69: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/69.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/70.jpg)
Application Crash Report for Android
http://acra.googlecode.com/
domingo, 29 de abril de 12
![Page 71: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/71.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/72.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/73.jpg)
domingo, 29 de abril de 12
![Page 74: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/74.jpg)
domingo, 29 de abril de 12
![Page 75: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/75.jpg)
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](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/76.jpg)
você quer personalizar seu relatório
por que usar?
domingo, 29 de abril de 12
![Page 77: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/77.jpg)
você quer dar um feedback mais elegante para o
usuário
por que usar?
domingo, 29 de abril de 12
![Page 78: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/78.jpg)
você quer mais detalhes sobre o erro
por que usar?
domingo, 29 de abril de 12
![Page 79: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/79.jpg)
é só isso!
domingo, 29 de abril de 12
![Page 80: Flisol 2012](https://reader033.vdocuments.com.br/reader033/viewer/2022042700/55526e54b4c9052e1f8b51dd/html5/thumbnails/80.jpg)
androidbahia.info
domingo, 29 de abril de 12