Migração pra android

Post on 08-Feb-2017

74 views 1 download

Transcript of Migração pra android

//Migração pra Android

/** * Created by Eduardo Cucharro */

Eduardo Cucharro//Desenvolvedor desde 2007

//Aplicações Desktop

//Aplicações web e Sites

//Apis Restful / WebServices

//Processos backend / integrações

//Aplicações Mobile

//Grupo Minha Vida (Time Dieta e Saúde)

Tecnologias//Desenvolvedor desde 2007

//Delphi Forms, Windows forms (Delphi, VB.NET, C#)

//Asp.NET MVC/Webforms, Javascript, Jquery, CSS, KnockoutJS

//Asp.NET WebAPI

//IIS WindowsServices, Console applications

//Android (Java, Android Studio, Gradle, JUnit, Espresso)

//Grupo Minha Vida (Time Dieta e Saúde)

//Resultado pro usuário, o que ele podia fazer...

//UI, velocidade, beleza, flexibilidade (responsive)

//Militante Padrões web (w3c conf, Mix, BrazilJS, TDC…)

//Novos frameworks que fazia o mesmo de formas diferentes

//Evolução lenta do browser como plataforma

//Backend no mesmo cenário (ADO.NET, LinqToSQl, Entity F..)

//Sempre atrás...

Frustração

Nova plataforma...

//Apis (O que dá pra fazer com isso?)

//Comunidade (Empresas e desenvolvedores)

//Frameworks (ui, database, rede…)

//Acesso (Custo de uso, custo de compra)

//Ferramentas e produtividade (IDE, linguagem, deploy)

//Mercado (Potenciais clientes, empresas, investimentos, $)

//Potencial de evolução (Até onde dá pra chegar…)

Plataforma

//Apis - Evolução lenta, adoção mais lenta (Padrões web)

//Comunidade - Excelente, colaborativa, humilde...

//Frameworks - Evolução insana (Angular, React, Knockout…)

//Acesso - Grátis (linux, apache, node, ruby, python…)

//Ferramentas - Boas grátis, melhores…$ (sublime, webstorm)

//Mercado - Gigante (desktop, android, ios, corporativo…)

//Potencial de evolução - Baixo (vide apis)

Web

//Apis - Baixa evolução (UI e performance)

//Frameworks - Foco performance, produtividade (EF, MVC)

//Comunidade - Forte e replicadora...

//Acesso - Custo alto (servidores SO, ferramental pago…)

//Ferramentas - Constante evolução, veloz, produtiva...

//Mercado - Estagnado, empresas estabelecidas...

//Potencial de evolução - Baixo

Backend

Smart devices

//GPS (Aonde a pessoa está)

//BLE (Comunicação P2P de alta velocidade)

//2 Cameras de alta resolução

//Touch screen

//Acesso a GPU e open GL

//NFC, Giroscópio, Acelerometro...

Smart devices

//Apis - GPS, Camera, Barometro, GPU, Pagamentos...

//Frameworks - Expresso, JUnit, ReactNative, Ionic, Xamarin

//Comunidade - Solicita, humilde, open source, 2000 slack

//Acesso - Baixo custo (Quase grátis...)

//Ferramentas - Constante evolução, veloz, produtiva...

//Mercado - Gigante, velhas e novas empresas investindo

//Potencial de evolução - Gigantesco, IOT, Carros, TV, Smart

Android

+1 Bilhão de devices

//Código público no github

//Apps publicados

//Experiência provada

//Tempo de trabalho como complementa

//Freelance, remoto, contrato

//Mercado Mundial

Valorização por trabalho realizado

//Apache Cordova

//Phone Gap

//Ionic

//React Native

//Titanium

//Xamarin

//Java

Sei javascript, html, css...

Epic fail :(

//2 cursos de Android no Coursera (3 meses)

//Papo com gestor de interesse em trabalhar no Time Mobile

//Time mobile (4 Android e 2 IOS) saíram

//Enfim time mobile só que sozinho :)

//Dieta e saúde - 300 mil usuários no Android

//O desafio começou

Depois de um tempo...

Entendendo o Android de verdade

//Se ficar com sensores ligados o tempo todo fica cansado

//Se pensar demais fica cansado

//Se olhar tudo o tempo todo tb, avisos

//Disputa a atenção, vive com os outros

//"Dinheiro limitado" (rede, energia, armazenamento, cpu)

//Eficiência e inteligência pra se manter vivo

Android (super pessoa eletrônica)

//Devices com N configurações e recursos

//Recursos variáveis (pouco armazenamento, memória, cpu)

//Telas de densidades e tamanhos diferentes

//Código pausado e reiniciado o tempo todo

//Rede intermitente, bateria acabando

//Comunicação entre apps, apps por função

//N versões de android, Apis, UI...

Desafios (Resiliência, performance...)

Fragmentação e versões

Fragmentação e versões

IE6 feelings? :)

//Support libraries (UI, novos recursos e compatibilidade)

//Google Apis (Location, Geofencing, Vision)

//Google Services (Signing, Analytics, Maps, Invites…)

//Google play services (Pagamentos, Divulgação, Infra Download, rollouts)

Ajudinha google

Arquitetura android

Threading Model

V8/Node/"Chromium" Threading Model

//Thread única

//Ajax

//Web Workers

//Service Workers

Web (browser)

//Cada app um processo

//Multiplas Threads

//Thread pool

//C# async await save lives

Backend/ASPNET Threading model

Android Threading/process

//Cada app um processo

//Multiplas Threads

//Thread pool

//Sem C# async await :(

//Handler/MessageQueue

Android Threading/process

//Uma Intent > Vários Apps

//Activity

//Services

//Broadcast receivers

//Content Resolvers

Intent System / Principais componentes

Componentes e interação

Android (SO)

BroadcastReceivers(Bus)

Content Resolver (Dados)

Activity (Tela)

//SharedPreferences (Xml chave/valor)

//Sqlite (Sql primitivo)

//NoSQL não nativo (Realm)

//Stetho do Facebook

Persistencia de dados

//Visual Studio

//Sublime/Atom

//Chrome dev tools

//Android Studio

//Chrome dev tools

//Show it

Ferramentas e Debugging

//MVC - Model View Controller

//MVP - Model View Presenter

//MVVM - Model View ViewModel

//Clean Architecture

Arquiteturas

Clean Architecture

//Funcionamento da UI - MSTestManager/Selenium/Espresso

//Integração entre componentes do próprio app - Espresso

//Lógica do negócio/UnitTesting - MSTest/Karma/JUnit/Mockito

Testabilidade

//Espresso Core - Basic Interaction, Matches Assertions

//Espresso Contrib - RecyclerView, NavDrawer, Picker

//Hamcrest - Muitos outros matches

//Espresso Web - Uso com webviews

//Espresso Idling - Sincronização de Jobs

Espresso libs

Hermetic env

92% dos problemas, podem ser resolvidos com testes…

Performance

Distribuição/Deploy

Distribuição

//Cadastro por $25,00

//Integração com Testes Firebase/GCP

//Canais de distribuição Alpha/Beta/Prod

//Gestão loja (Teste A/B, Comentários)

//Estatísticas

Google play

//Web - Deploy servers (app atualizado pra todos)

//Desktop - Click once (depende usuário)

//Multiplas versões em prod

//Versões por recursos

//Gestão de atualizações planejada

//Qualidade essencial ou prejuizo gigantesco

Deploy

Monitoramento

//Crashlytics

//New relic

//Analytics

//Web page test

//PhantomJS

Monitoramento

//Análise plataforma

//Potencial mercado

//Mindset de desenvolvimento diferente

//Importância Threading no Android

//Processo e componentes app android

//Build, Publicação e monitoramento de um app

Resumo

Perguntas?

ArrayList<String> aListContatos = new ArrayList<String>();

//Na Comunidade AndroidDevBR (slack)aListContatos.add(“@cuchas“);

//No TwitteraListContatos.add(“@eduardocucharro“);

//BlogaListContatos.add(“http://cucha.com.br“);

//SlideshareaListContatos.add(“http://www.slideshare.net/eduardocucharro“);

Obrigado ;)