1. Apps Android e Hibridas
16 horas de explanação, diálogo e prática
Julho 2016
por Luiz Henrique Rauber Rodrigues
luizrauber@gmail.com - fb.com/luizrauber
Exceto onde tiver outra referência, este material é Creative Commons com Atribuição-CompartilhaIgual (CC
BY-SA). Pode copiar, alterar e redistribuir à vontade, mesmo para fins comerciais, mas desde que me cite e
licenciem as novas criações sob termos idênticos. Like Free Software :)
2. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 2/105
Mas primeiro….
Conselhos Richard Feynman (1918-1988), Nobel de Física em 1965
2 tipos de sabedoria: “Saber o nome de algo” e o “Saber algo”
1) Escolha um conceito; tema ou objetivo do que quer saber
2) Escreva-o como se estivesse ensinando uma criança; nada subentendido
3) Volte no tema e pesquise sobre ele; especifique o 1-2 da forma 2)
4) Revise e simplifique ainda mais; sem jargões e sabendo usar analogias
http://www.bbc.com/portuguese/geral-36750825
3. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 3/105
Manifesto para o desenvolvimento ágil de software
Estamos descobrindo maneiras melhores de desenvolver software fazendo-o
nós mesmos e ajudando outros a fazê-lo. Através deste trabalho, passamos a
valorizar:
Indivíduos e interação entre eles mais que processos e ferramentas
Software em funcionamento mais que documentação abrangente
Colaboração com o cliente mais que negociação de contratos
Responder a mudanças mais que seguir um plano
Ou seja, mesmo havendo valor nos itens à direita, valorizamos mais os itens à
esquerda.
http://www.manifestoagil.com.br/
6. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 6/105
Touchscreem Resistivo/ Capacitivo
Sensores internos e acopláveis
SO parcialmente opensource
Versões por Google e por fabricantes
Intergração serviços Google
“Apps” via Google Play/ Lojas Terceiros/ .apk numa sandbox
SDK padrão e com o QEMU
30. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 30/105
Resumo de
https://developer.android.com/guide/components/fundamentals.html
31. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 31/105
Os “aplicativos” são feitos na linguagem Java. Para desenvolver é
necessário o SDK Android que compila e gera um Android Package
(.apk).
32. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 32/105
Os “apps” são adaptáveis em “tempo de execução” a vários
tamanhos de telas, se tiver vários XML de layout de tela, e
configurações de hardware (como presença/ ausência giroscópio,
câmera, gps…).
33. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 33/105
Cada “apps” rodando tem um ID de processo diferente sobre o Linux
e um JVM própria, por isso isolando os componentes e evitando
conflito de apps (princípio do privilégio mínimo).
34. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 34/105
Os “apps” são baseados e desenvolvidos orientados à
“componentes”, definidos como subclasses, que podem trabalhar
individualmente ou em conjunto, e a conexão de componentes é por
“intenção”.
35. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 35/105
O sistema operacional e os padrões de desenvolvimento, idealizam
o reaproveitamento de componentes, evitando redundância.
36. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 36/105
Quando um aplicativo requer o uso de um recurso, e já existe um
componente que pode entregar este recurso, o aplicativo, via
componente, envia uma intenção de uso ao Android solicitando o
recurso de um outro componente, se havendo a possilibidade, o
recurso é entregue.
37. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 37/105
As intenções por padrão são implícitas, sem definir qual mas sim
quais tipos de componentes lhe são úteis. Assim se uma aplicação
pede um recurso, e se existente mais de um componente que pode
entregar tal recurso, o usuário seleciona qual “aplicação” que irá
usar pra entregar o recurso a aplicação inicial.
38. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 38/105
As “comunicações” entre componentes são em “tempo de
execução”, via processos individuais, e direcionadas a um
componente em específico ou só ao tipo dele via intenções.
+https://developer.android.com/guide/components/intents-filters.html
39. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 39/105
4 tipos de componentes, sendo os 3 primeiros ativados por object
intent, o outro pode ser 1 por aplicativo*
40. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 40/105
4.1
Activity: foca na interação com o usuário, logo a interface de cada de
ação. Um único app pode ter vários componentes de atividades, que
podem ser compartilhadas (entre sí ou outros apps).
41. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 41/105
4.2
Service: realiza a entrega para o usuário, sem a necessidade de
uma interface diretamente. Roda em background (segundo plano)
podendo manter-se ou não vinculada a uma atividade e/ou se ligar a
outras que sejam iniciadas posteriormente.
+https://developer.android.com/guide/components/services.html
42. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 42/105
4.3
BroadcastReceiver: Fazem as notificações internamente no Android,
enviando ou recebendo dados para uma mesma, ou outra aplicação,
de acordo com alguma condição. Podem ou não, gerar notificação
para o usuário. Sempre vinculado a outros componentes.
43. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 43/105
4.4
ContentProvider: Compartilham e gerenciam o conteúdo do
aplicativo, lendo e gravando dados no local de persistência indicado
(dado, SQLite, cartão, nuvem…)
+https://developer.android.com/guide/topics/providers/content-
providers.html
44. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 44/105
Todo aplicativo Android tem o AndroidManifest.xml, onde estão
informados as compatibilidades de dispositivos, recursos externos
necessários pra execução, definições e requisitos dos aplicativos
que também devem ser mencionados ao “publicar” algo em uma loja
de aplicativos...
45. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 45/105
… e lista todos os componentes necessários pra aplicação funcionar,
indexando tipos, intenções e portanto é lido a cada chamada ao
aplicativo ou a um componente para verificar se o mesmo é
necessário.
46. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 46/105
Também lista e identifica: os usuários e permissões, as API e seus
níveis (versões Android) com suas respectivas bibliotecas, os
recursos de hardware e software necessários, outras informações
pertinentes como versão, desenvolver, licença…
47. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 47/105
… e por fim
Escalonamento padrão é pilha, setado através das indentações nas
Activities, sendo uma destas a “principal” que substitui a ideia de um
procedimento “main”.
48. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 48/105
E ai do mundo
Atenção a API Level, tamanho de tela e recursos (hw, sw, língua)
Mesma aplicação pode dar suporte a estes tipos, reconhecendo em
run-time as especificações do app, mas tem que estar res/
Ciclo de vida da atividade é importante
https://developer.android.com/training/basics/activity-
lifecycle/index.html (tá pt_br)
49. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 49/105
Ciclo de vida da atividade é importante
https://developer.android.com/training/basics/activity-lifecycle/index.html (tá pt_br)
50. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 50/105
Tutorial Introdução
https://developer.android.com/training/basics/firstapp/index.html
51. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 51/105
Tutorial Fragmentos
https://developer.android.com/training/basics/fragments/index.html
68. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 68/105
jQuery é uma biblioteca JavaScript cross-browser desenvolvida
para simplificar os scripts client side que interagem com o HTML.
[1] … Usada por cerca de 77% dos 10 mil sites mais visitados do
mundo, jQuery é a mais popular das bibliotecas JavaScript.[2]
[3] ... A sintaxe do jQuery foi desenvolvida para tornar mais
simples a navegação do documento HTML, a seleção de
elementos DOM, criar animações, manipular eventos e
desenvolver aplicações AJAX. A biblioteca também oferece a
possibilidade de criação de plugins sobre ela. Fazendo uso de tais
facilidades, os desenvolvedores podem criar camadas de
abstração para interações de mais baixo nível, simplificando o
desenvolvimento de aplicações web dinâmicas de grande
complexidade.
https://pt.wikipedia.org/wiki/AJAX_(programa%C3%A7%C3%A3o)
69. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 69/105
Ajax (acrônimo em língua inglesa de Asynchronous Javascript and
XML[1] , em português "Javascript e XML Assíncrono") é o uso
metodológico de tecnologias como Javascript e XML, providas por
navegadores, para tornar páginas Web mais interativas com o
usuário, utilizando-se de solicitações assíncronas de informações.
Foi inicialmente desenvolvida pelo estudioso Jessé James Garret
e mais tarde por diversas associações. Apesar do nome, a
utilização de XML não é obrigatória (JSON é frequentemente
utilizado) e as solicitações também não necessitam ser
assíncronas[2] .
https://pt.wikipedia.org/wiki/AJAX_(programa%C3%A7%C3%A3o)
70. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 70/105
JSON (com a pronúncia ['d ejz n], J-son em inglês, (Jay-son)), umʒ ə
acrônimo para "JavaScript Object Notation", é um formato leve para
intercâmbio de dados computacionais. JSON é um subconjunto da
notação de objeto de JavaScript, mas seu uso não requer JavaScript
exclusivamente.[1] [2] O formato JSON foi originalmente criado por
Douglas Crockford e é descrito no RFC 4627. O media-type oficial do
JSON é application/json e a extensão é .json.
A simplicidade de JSON tem resultado em seu uso difundido,
especialmente como uma alternativa para XML em AJAX. Uma das
vantagens reivindicadas de JSON sobre XML como um formato para
intercâmbio de dados neste contexto, é o fato de ser muito mais fácil
escrever um analisador JSON. Em JavaScript mesmo, JSON pode ser
analisado trivialmente usando a função eval(). Isto foi importante para a
aceitação de JSON dentro da comunidade AJAX devido a presença
deste recurso de JavaScript em todos os navegadores web atuais.
https://pt.wikipedia.org/wiki/AJAX_(programa%C3%A7%C3%A3o)
71. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 71/105
PhoneGap é uma plataforma para desenvolvimento de aplicativos
móveis em código aberto. Ela se utiliza da tecnologia Apache Cordova
para acessar a funções dos aparelhos móveis como acelerômetro,
câmera e geolocalização, e permite por meio de alguns que os
desenvolvedores criem aplicações utilizando HTML5, CSS3 e JavaScript
sem a necessidade de depender de APIs específicas. Os aplicativos
criados são compatíveis com iOS, Windows Phone e Android.
https://pt.wikipedia.org/wiki/PhoneGap
72. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 72/105
PhoneGap is Adobe’s productized version and ecosystem on top of
Cordova. Like PhoneGap, many other tools and frameworks are also
built on top of Cordova, including Ionic,[8] Monaca, TACO, the Intel XDK,
[9] and the Telerik Platform.[10] These tools use Cordova, and not
PhoneGap for their core tools.
Contributors to the Apache Cordova project include Adobe, BlackBerry,
Google, IBM, Intel, Microsoft, Mozilla, and others.[11]
https://en.wikipedia.org/wiki/Apache_Cordova
85. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 85/105
http://www.cssreflex.com/2015/11/xamarin-vs-cordova-main-
counterpoints.html/
86. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 86/105
Publicando Google Play
Criar e validar uma conta de desenvolvedor
https://play.google.com/apps/publish/signup/
Login com tua conta Google
Concordar e estar disposto a associar o meu registo de conta ao
Contrato de Distribuição para Programadores do Google Play.
Pagar 25 dolares
Enviar
https://play.google.com/apps/publish/ "Produção", "Beta" ou "Alfa"
87. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 87/105
Configurar testes Alfa/Beta na Google Play Developer Console
Enviar APK como Teste e vai pra testadores (até 20 listas de 2 mil)
As versões Beta abertas e fechadas do seu app não terão avaliações
públicas.
Google recomenda um Alfa fechado e um Beta aberto.
Fechado vai link via Google (CSV ou manual), Aberto na Google Play
“O relatório de pré-lançamento no seu Google Play Developer Console
identifica falhas, problemas de exibição e vulnerabilidades de
segurança.”
Versões novas em teste não derrubam a de produção.
Ainda tem lançamento gradual, via porcentagem aleatória
90. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 90/105
Mais links
http://appinventor.mit.edu/explore/
http://zeptojs.com/
http://handlebarsjs.com/
https://software.intel.com/pt-br/intel-xdk
91. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 91/105
Detalhes de divulgação da Google Play X Apple AppStore
Avaliações de todas as versões X Avaliações do app, atualizou zerou
Título com 30 caracteres X Título com 255 | keywords ambos
8 screenshots atualizáveis aloca X 5 screenshots só em nova versão
Mais texto e vídeo de minutos X Menores e 100 palavras chave
Pagou entrou X Pagou, revisam e ai entram
~Maioria grátis X ~Maioria pago (90% entre US$ 0,99 e 1,99)
Maioria usuários BRICS X Maioria US
Mais downloads X Mais rentabilidade
92. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 92/105
http://corporate.canaltech.com.br/noticia/desenvolvedores/quanto-os-
desenvolvedores-ganham-por-cada-aplicativo-criado-9931/
93. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 93/105
http://www.w3schools.com/html/html5_intro.asp
HTML5 API's (Application Programming Interfaces)
HTML Geolocation
HTML Drag and Drop
HTML Local Storage
HTML Application Cache
HTML Web Workers
HTML SSE
HTML5 Elements
semantic elements like <header>, <footer>, <article>, and <section>.
form control attributes like number, date, time, calendar, and range.
graphic elements: <svg> and <canvas>.
multimedia elements: <audio> and <video>.
94. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 94/105
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Title of the document</title>
</head>
<body>
Content of the document......
</body>
</html>
fonte: loiane groner