52
Desvendando as ferramentas e serviços para o desenvolvedor Android João Bosco Monteiro

Desvendando as ferramentas e serviços para o desenvolvedor Android

Embed Size (px)

DESCRIPTION

Diversos frameworks e serviços para facilitar o seu dia a dia com desenvolvimento Android serão apresentadas, tais como Spring Android, Roboguice, Robolectric, Android Query, Flurry e Xtify. Saiba as características de cada uma, suas vantagens e desvantagens e faça as suas escolhas!

Citation preview

Page 1: Desvendando as ferramentas e serviços para o desenvolvedor Android

Desvendando as ferramentas e serviços para o

desenvolvedor Android

João Bosco Monteiro

Page 2: Desvendando as ferramentas e serviços para o desenvolvedor Android

Quem sou

Sócio e desenvolvedor na

Ex-JavaEE

Desenvolvendo software há 10 anos

Page 3: Desvendando as ferramentas e serviços para o desenvolvedor Android

Autor do livro

Page 4: Desvendando as ferramentas e serviços para o desenvolvedor Android

Lado B

Page 5: Desvendando as ferramentas e serviços para o desenvolvedor Android

Por que utilizar frameworks?

Page 6: Desvendando as ferramentas e serviços para o desenvolvedor Android

Onde utilizar

UtilitáriosInterface Gráfica

Persistência

Injeção de Dependências

Build Testes

Integração Contínua

Page 7: Desvendando as ferramentas e serviços para o desenvolvedor Android

Utilitários, UI e IoC

Page 8: Desvendando as ferramentas e serviços para o desenvolvedor Android

Ajax Callback

XML Parsing

Localização (beta)

Manipulação de Imagens

Autenticação Twitter e Facebook

Page 9: Desvendando as ferramentas e serviços para o desenvolvedor Android
Page 10: Desvendando as ferramentas e serviços para o desenvolvedor Android

public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);

final TextView textView = (TextView) findViewById(R.id.text);

textView.setText("Clique no botão");Button button =

(Button) findViewById(R.id.button);button.setText("clique aqui");button.setOnClickListener(

new View.OnClickListener() {@Overridepublic void onClick(View v) {

textView.setText("QCon 2012");}

});}

Page 11: Desvendando as ferramentas e serviços para o desenvolvedor Android

public void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);

aq = new AQuery(this);aq.id(R.id.text).text("Clique no botão");aq.id(R.id.button).text("clique aqui") .clicked(this, "onClick");

}

public void onClick(View v) {aq.id(R.id.text).text("QCon 2012");

}

Page 12: Desvendando as ferramentas e serviços para o desenvolvedor Android

public void async() {String url = "http://search.twitter.com/…";

aq.ajax(url, JSONObject.class, this, "callback");

}

public void callback(String url, JSONObject json,

AjaxStatus status) {if (json != null) {

// successful ajax call}

}

Page 13: Desvendando as ferramentas e serviços para o desenvolvedor Android

String imageUrl = "http://qcon.com.br/images/infoq.gif";

//carregamento assíncrono, com cacheaq.id(R.id.image).image(imageUrl);

//carregamento assíncrono, com cache e fallbackaq.id(R.id.image).image(imageUrl, true, true, 0,

R.drawable.default_image);

//limita a largura da imagem em 200pxaq.id(R.id.image).image(imageUrl, true, true,

200, 0);

Page 14: Desvendando as ferramentas e serviços para o desenvolvedor Android

RoboGuice

Injeção de dependências Powered by Google Guice

É possível injectar views, recursos,serviços do sistema...

Page 15: Desvendando as ferramentas e serviços para o desenvolvedor Android

class AndroidWay extends Activity {     TextView name;     ImageView thumb;     LocationManager loc;     Drawable icon;     String myName;

    public void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.main);        name = (TextView) findViewById(R.id.name);         thumb = (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 );     } }

Page 16: Desvendando as ferramentas e serviços para o desenvolvedor Android

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

Page 17: Desvendando as ferramentas e serviços para o desenvolvedor Android

Android Annotations

Annotation Processing Tool para gerar boilerplate code

Injeção de dependência em tempo de compilação

Threading e Event Handlig

REST Client (Spring Android Wrapper)

Page 18: Desvendando as ferramentas e serviços para o desenvolvedor Android

@EActivity(R.layout.my_activity)public class MyActivity extends Activity {

@ViewById EditText myEditText;

@StringRes(R.string.hello) String helloFormat;

@ColorRes int androidColor;

@BooleanRes boolean someBoolean;

@SystemService NotificationManager notificationManager;

}

Page 19: Desvendando as ferramentas e serviços para o desenvolvedor Android

@Rest("http://company.com/ajax/services")public interface MyRestClient { @Get("/events") EventList getEvents();}

@EActivitypublic class MyActivity extends Activity {

@RestServiceMyRestClient myRestClient;

@AfterViewsvoid afterViews() {

myRestClient.getEvents(); }

}

Page 20: Desvendando as ferramentas e serviços para o desenvolvedor Android

@Click void anotherButton() {}

@Background void someBackgroundWork(String param) {} @UiThread void doInUiThread(String param) {} @Transactional void doSomeDbWork(SQLiteDatabase db) {}

Page 21: Desvendando as ferramentas e serviços para o desenvolvedor Android

Spring Android

Rest Client

OAuth

Page 22: Desvendando as ferramentas e serviços para o desenvolvedor Android

public <T> T getForObject(URI url, Class<T> responseType);

public <T> T postForObject(URI url, Object request, Class<T> rType);

public void put(String url, Object request, Object... variables);

public void delete(String url, Object... urlVariables);

Page 23: Desvendando as ferramentas e serviços para o desenvolvedor Android

final String url = "https://ajax.googleapis.com/ajax/services/search/web?v=1.0&q={query}";

RestTemplate restTemplate = new RestTemplate();

GoogleSearch response = restTemplate.getForObject(url,

GoogleSearch.class, "Google Android");

Page 24: Desvendando as ferramentas e serviços para o desenvolvedor Android

ORM Lite

ORM já existente

Configuração via anotações

Generic DAO e ActiveRecord

QueryBuilders

Page 25: Desvendando as ferramentas e serviços para o desenvolvedor Android
Page 26: Desvendando as ferramentas e serviços para o desenvolvedor Android

queryForAll()queryForId(ID id)queryForFieldValues(Map<String, Object> fieldValues)queryRaw(String query)

create(T object)createOrUpdate(T object)update(T object)delete(T object)

countOf()

Generic DAO

Page 27: Desvendando as ferramentas e serviços para o desenvolvedor Android

projetoDao = getHelper().getProjetoDao();

QueryBuilder<Projeto, Integer> queryBuilder;queryBuilder = projetoDao.queryBuilder();

List<Projeto> projetos = queryBuilder.where() .eq("nome", "QCon") .and()

.eq("cid", 1) .query();

Page 28: Desvendando as ferramentas e serviços para o desenvolvedor Android

GreenDroid

Widgets e Layouts

Estilos e temas

Custom ActionBar

Page 29: Desvendando as ferramentas e serviços para o desenvolvedor Android
Page 30: Desvendando as ferramentas e serviços para o desenvolvedor Android
Page 31: Desvendando as ferramentas e serviços para o desenvolvedor Android

ActionBarSherlock

ActionBar para todos!

Page 32: Desvendando as ferramentas e serviços para o desenvolvedor Android
Page 33: Desvendando as ferramentas e serviços para o desenvolvedor Android
Page 34: Desvendando as ferramentas e serviços para o desenvolvedor Android
Page 35: Desvendando as ferramentas e serviços para o desenvolvedor Android

Testes

Page 36: Desvendando as ferramentas e serviços para o desenvolvedor Android

Robolectric

Roda os testes diretamente na JVM

Mocking não é necessário

Shadow Objects

Page 37: Desvendando as ferramentas e serviços para o desenvolvedor Android

@RunWith(RobolectricTestRunner.class)public class HomeActivityTest { private HomeActivity activity; private Button pressMeButton;

@Before public void setUp() throws Exception { activity = new HomeActivity(); activity.onCreate(null); pressMeButton = (Button)

activity.findViewById(R.id.press_me_button); }

@Test public void shouldHaveAButtonThatSaysPressMe()

throws Exception { assertThat((String) pressMeButton.getText(),

equalTo("Tests Rock!")); }}

Page 38: Desvendando as ferramentas e serviços para o desenvolvedor Android

Tests run: 86, Failures: 0, Errors: 0, Skipped: 0

[INFO] ------------------------------------------------------------------------[INFO] BUILD SUCCESS[INFO] ------------------------------------------------------------------------[INFO] Total time: 15.875s[INFO] Finished at: Sun Jul 29 15:54:58 GMT-04:00 2012[INFO] Final Memory: 14M/81M[INFO] ------------------------------------------------------------------------

Page 39: Desvendando as ferramentas e serviços para o desenvolvedor Android

Robotium

Testes caixa-preta

Legibilidade dos casos de testes é melhor do que os de instrumentação

Integração com Maven

Page 40: Desvendando as ferramentas e serviços para o desenvolvedor Android
Page 41: Desvendando as ferramentas e serviços para o desenvolvedor Android

Maven

mvn archetype:generate \ -DarchetypeArtifactId=android-with-test -DarchetypeGroupId=de.akquinet.android.archetypes -DarchetypeVersion=1.0.6 -DgroupId=com.foo.bar -DartifactId=my-android-project -Dpackage=com.foo.bar.android

Page 42: Desvendando as ferramentas e serviços para o desenvolvedor Android
Page 43: Desvendando as ferramentas e serviços para o desenvolvedor Android

Serviços

PushLink

Page 44: Desvendando as ferramentas e serviços para o desenvolvedor Android
Page 45: Desvendando as ferramentas e serviços para o desenvolvedor Android
Page 46: Desvendando as ferramentas e serviços para o desenvolvedor Android
Page 47: Desvendando as ferramentas e serviços para o desenvolvedor Android
Page 48: Desvendando as ferramentas e serviços para o desenvolvedor Android
Page 49: Desvendando as ferramentas e serviços para o desenvolvedor Android
Page 50: Desvendando as ferramentas e serviços para o desenvolvedor Android
Page 51: Desvendando as ferramentas e serviços para o desenvolvedor Android

Discussões

Page 52: Desvendando as ferramentas e serviços para o desenvolvedor Android

Obrigado!

João Bosco [email protected]

@joaobmonteiro