SlideShare uma empresa Scribd logo
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 :)
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
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/
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 4/105
Coding Dojo - Turma 2015-2016 – Tec Informática Senac
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 5/105
O quê?
Onde?
Como?
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
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 7/105
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 8/105
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 9/105
Go https://www.android.com/intl/pt-BR_br/
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 10/105
Aprofundando
SILBERCHATZ, 2013
Android/Linux
Java - JVM
Multithread
Sai swap entra
application state
...
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 11/105http://source.android.com/source/index.html
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 12/105
Mais (ou menos) em https://www.android.com/intl/pt-BR_br/history/
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 13/105
https://developer.android.com
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 14/105
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 15/105
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 16/105
javac -version
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-
downloads-2133151.html
android-studio/bin/studio.sh
dependências lib32z1 lib32ncurses5 lib32bz2-1.0 lib32stdc++6
Bora instalar? (Enquanto isso, mais teoria)
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 17/105
2005 – comprou startup Android, Inc. (SO para câmeras)
2006 – Protótipo “Sooner” mirando em BlackBerry
2007 – Mirarão no IPhone*
2007 – Fundação Open Handset Alliance (Google, HTC, Dell,
Intel, Motorola, Qualcomm, Texas Instruments, Samsung, LG,
T-Mobile, Nvidia…
https://pt.wikipedia.org/wiki/Open_Handset_Alliance)
2007 – Primeira SDK para desenvolver Android
2007 – Google registrou várias patentes sobre smartphone
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 18/105
2008 – HTC Dream/ T-Mobile G/ G1
com Android
2010 – Linha Nexus (HTC, Samsung, LG,
Asus, Motorola)
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 19/105
http://www.androidpit.com.br/evolucao-dos-smartphones-a-linha-nexus
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 20/105
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 21/105
http://www.gadgetdetail.com/androi
d-version-market-share-
distribution/
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 22/105
http://www.gadgetdetail.com/androi
d-version-market-share-
distribution/
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 23/105
http://www.for
bes.com/sites/
eladnatanson/
2016/06/06/br
eaking-the-
android-ios-
duopoly-will-
android-and-
ios-ever-get-
a-serious-
third-
competitor/#e
62c5104cad0
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 24/105
http://www.for
bes.com/sites/
eladnatanson/
2016/06/06/br
eaking-the-
android-ios-
duopoly-will-
android-and-
ios-ever-get-
a-serious-
third-
competitor/#e
62c5104cad0
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 25/105
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 26/105
https://github.com/googlesamples/
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 27/105
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 28/105
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 29/105
fonte: developer.android.com
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 30/105
Resumo de
https://developer.android.com/guide/components/fundamentals.html
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).
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…).
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).
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”.
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.
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.
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.
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
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*
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).
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
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.
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
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...
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.
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…
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”.
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)
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)
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 50/105
Tutorial Introdução
https://developer.android.com/training/basics/firstapp/index.html
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 51/105
Tutorial Fragmentos
https://developer.android.com/training/basics/fragments/index.html
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 52/105
http://www.cyanogenmod.org/
+400 modelos
https://wiki.cyanogenmod.org/w/About
https://wiki.cyanogenmod.org/w/Main_Page
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 53/105
http://www.replicant.us/
Nexus S (I902x) Galaxy S (I9000) Galaxy S 2 (I9100) Galaxy Note
(N7000) Galaxy Nexus (I9250) Galaxy S 3 (I9300) Galaxy Note
(N7000) Galaxy Note 2 (N7100) Galaxy Tab 2 10.1 (P51xx) Galaxy
Tab 2 7.0 (P31xx) Galaxy Tab 2 10.1 (P51xx) Galaxy Tab 2 10.1
(P51xx) Uncompleted devices GTA04 Unmaintained devices
Dream/Magic Nexus One
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 54/105
https://www.tizen.org/
Mobile + Wearable + TV + IVI
https://source.tizen.org/
https://www.tizen.org/about/about-linux-foundation
Android + HTLM5 +Jquery + Bada + Cordova + River Trail
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 55/105
https://cordova.apache.org/
Fonte: Loiane Groner
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 56/105
Fonte: Loiane Groner
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 57/105
Fonte: Loiane Groner
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 58/105
Fonte: Loiane Groner
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 59/105
Fonte: Loiane Groner
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 60/105
Fonte: Loiane Groner
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 61/105
Fonte: Loiane Groner
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 62/105
Fonte: Loiane Groner
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 63/105
https://cordova.apache.org/
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 64/105
https://cordova.apache.org/
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 65/105
https://cordova.apache.org/
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 66/105
https://cordova.apache.org/
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 67/105
https://cordova.apache.org/
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)
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)
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)
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
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
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 73/105
https://pt.wikipedia.org/wiki/PhoneGap
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 74/105
Dá até pra transformar site html5 -> app html5 -> app nativo :D
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 75/105
https://cordova.apache.org/docs/en/latest/config_ref/index.html
app/www/config.xml
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 76/105
www/index.html
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 77/105
apt-get install npn :)
https://nodejs.org/en/download/
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 78/105
apt-get install npn :)
https://nodejs.org/en/download/
Fonte: Rodrigo Branas
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 79/105
apt-get install npn :)
https://nodejs.org/en/download/
Fonte: Rodrigo Branas
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 80/105
npm install -g cordova
cordova create hello com.example.hello HelloWorld
cordova platform add ios --save
cordova platform add android --save
cordova platform ls
cordova requirements
cordova build
cordova build ios
cordova build android
cordova emulate android
cordova run android
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 81/105
https://cordova.apache.org/plugins/ (1382 result(s) found)
cordova plugin search camera
cordova plugin add cordova-plugin-camera
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 82/105
https://cordova.apache.org/docs/en/latest/plugin_ref/plugman.html
npm install -g plugman
plugman install --platform <ios|android|blackberry10|wp8> --project
<directory> --plugin <name|url|path> [--plugins_dir <directory>] [--www
<directory>] [--variable <name>=<value> [--variable
<name>=<value> ...]]
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 83/105
https://netbeans.org/kb/docs/webclient/html5-gettingstarted_pt_BR.html
https://netbeans.org/kb/docs/webclient/cordova-
gettingstarted_pt_BR.html
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 84/105
npm install -g ionic
ionic start appnome blank
http://tableless.com.br/tutorial-ionic-meu-primeiro-app/
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 85/105
http://www.cssreflex.com/2015/11/xamarin-vs-cordova-main-
counterpoints.html/
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"
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
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 88/105
Fonte: Loiane groner
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 89/105
Facilitando
http://fabricadeaplicativos.com.br/
http://www.appmachine.com/pt-pt/
http://www.apps-builder.com/pt/home
http://pt.goodbarber.com/
http://www.shoutem.com/
https://www.easyeasyapps.net/
http://webrobotapps.com/
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
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
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/
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>.
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
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 95/105
<!DOCTYPE html>
<html>
<head>
<script>document.createElement("myHero")</script>
<style>
myHero {
display: block;
background-color: #dddddd;
padding: 50px;
font-size: 30px;
}
</style>
</head>
<body>
<h1>A Heading</h1>
<p>A paragraph.</p>
<myHero>My Hero Element</myHero>
</body>
</html>
fonte: loiane groner
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 96/105
Acceleration
function onSuccess(acceleration) {
alert('Acceleration X: ' + acceleration.x + 'n' +
'Acceleration Y: ' + acceleration.y + 'n' +
'Acceleration Z: ' + acceleration.z + 'n' +
'Timestamp: ' + acceleration.timestamp + 'n');
};
!
function onError() {
alert('onError!');
};
!
navigator.accelerometer.getCurrentAcceleration(onSuccess,
onError);
fonte: loiane groner
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 97/105
Capturar Foto
function capturePhoto() {
navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 50,
destinationType: destinationType.DATA_URL });
}
Capturar Foto com Edição
function capturePhotoEdit() {
navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 20,
allowEdit: true,
destinationType: destinationType.DATA_URL });
}
Busca Foto do Dispositivo
function getPhoto(source) {
navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 50,
destinationType: destinationType.FILE_URI,
sourceType: source });
}
<button onclick="getPhoto(pictureSource.PHOTOLIBRARY);">Biblioteca</button><br>
<button onclick="getPhoto(pictureSource.SAVEDPHOTOALBUM);">Album de Fotos</button>
fonte: loiane groner
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 98/105
Compass/Bússula
function onSuccess(heading) {
alert('Heading: ' + heading.magneticHeading);
};
!
function onError(error) {
alert('CompassError: ' + error.code);
};
!
navigator.compass.getCurrentHeading(onSuccess, onError);
fonte: loiane groner
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 99/105
Conexão
function checkConnection() {
var networkState = navigator.connection.type;
!
var states = {};
states[Connection.UNKNOWN] = 'Unknown connection';
states[Connection.ETHERNET] = 'Ethernet connection';
states[Connection.WIFI] = 'WiFi connection';
states[Connection.CELL_2G] = 'Cell 2G connection';
states[Connection.CELL_3G] = 'Cell 3G connection';
states[Connection.CELL_4G] = 'Cell 4G connection';
states[Connection.NONE] = 'No network connection';
!
alert('Connection type: ' + states[networkState]);
}
!
checkConnection();
fonte: loiane groner
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 100/105
Propriedades do Dispositivo
function onDeviceReady() {
var element = document.getElementById('deviceProperties');
!
element.innerHTML = 'Device Name: ' + device.name + '<br />' +
'Device Cordova: ' + device.cordova + '<br />' +
'Device Platform: ' + device.platform + '<br />' +
'Device UUID: ' + device.uuid + '<br />' +
'Device Model: ' + device.model + '<br />' +
'Device Version: ' + device.version + '<br />';
}
fonte: loiane groner
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 101/105
In App Browser
var ref = window.open('http://loiane.com', '_blank', 'location=yes');
ref.addEventListener('loadstart', function() { alert('start: ' + event.url); });
ref.addEventListener('loadstop', function() { alert('stop: ' + event.url); });
ref.addEventListener('exit', function() { alert(event.type); });
fonte: loiane groner
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 102/105
Notification - Alert
navigator.notification.alert(
'Alerta!', // message
alertDismissed,
// callback
'Titulo',
// title
'Botão'
// buttonName
);
fonte: loiane groner
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 103/105
Notification - Confirm
function showConfirm() {
navigator.notification.confirm(
'Confirmar?', // message
onConfirm,
// callback to invoke with index of button pressed
'Titulo',
// title
'OK,Cancel'
// buttonLabels
);
}
fonte: loiane groner
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 104/105
Notification - Beep
// Beepa 3 vezes
function playBeep() {
navigator.notification.beep(3);
}
Não funciona no iOS
fonte: loiane groner
CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 105/105
Notification - Vibrar
// Vibra por 2 segundos
function vibrate() {
navigator.notification.vibrate(2000);
}
fonte: loiane groner

Mais conteúdo relacionado

PDF
Bancos de Dados: Access, Base e SQL
PDF
Workshop Museus– trabalho colaborativo e tecnologias sociais
PDF
Utilização de APIs do Windows Live
PDF
Criação Web com Bootstrap e Material Design
ODP
Web 2.0 - Colaboração acima de tudo!
PPTX
A utilização do Bootstrap Para a Otimização de Páginas
PDF
WordPress da instalação à criação de temas personalizados para seu site
PDF
Conhecendo o WordPress
Bancos de Dados: Access, Base e SQL
Workshop Museus– trabalho colaborativo e tecnologias sociais
Utilização de APIs do Windows Live
Criação Web com Bootstrap e Material Design
Web 2.0 - Colaboração acima de tudo!
A utilização do Bootstrap Para a Otimização de Páginas
WordPress da instalação à criação de temas personalizados para seu site
Conhecendo o WordPress

Destaque (8)

PPTX
Adobe phonegap / Cordova API
PDF
Herramientas para Desarrollo de Aplicaciones Moviles
PDF
Sistemas Operativos Moviles, Android y IOs
PPTX
Curso: Desenvolvimento de aplicativos híbridos (dia 1)
PPTX
Sistemas Operativos Moviles
KEY
Phonegap/Cordova vs Native Application
PPTX
Curso de Desenvolvimento de Aplicativos Híbridos com PhoneGap/Cordova, e Ionic
PPTX
Coresic2016 - Desarrollo de aplicaciones Multiplataforma con Visual Studio
Adobe phonegap / Cordova API
Herramientas para Desarrollo de Aplicaciones Moviles
Sistemas Operativos Moviles, Android y IOs
Curso: Desenvolvimento de aplicativos híbridos (dia 1)
Sistemas Operativos Moviles
Phonegap/Cordova vs Native Application
Curso de Desenvolvimento de Aplicativos Híbridos com PhoneGap/Cordova, e Ionic
Coresic2016 - Desarrollo de aplicaciones Multiplataforma con Visual Studio
Anúncio

Semelhante a Apps Android e Hibridas (20)

PDF
Android - Notas de aula
PPTX
Introdução ao Android
PDF
Descomplicando o Android
PDF
Introdução à programação em Android Senac 15/05/2012
PPTX
PPTX
Android - Activities and services
PDF
Android - Conceito e Arquitetura
PDF
Desenvolvimento android
PDF
Introdução a programação em Android
PDF
Palestra Iniciando o desenvolvimento de aplicativos com o Club do Android
PDF
Minicurso iniciando com Android no Androidos Day
PPT
Android Palestra
PDF
Básico de desenvolvimento com Android
PPTX
O novo desenvolvedor android conceitos básicos e a comunidade em joão pessoa
PDF
Minicurso de Desenvolvimento Android - Iguatu - CE
PDF
Curso de Android Aula 4
PDF
Introdução ao Android
PDF
Indrodução ao android 1º Encontro JUG VALE 2012
PDF
Conhecendo android
PDF
Apostilaandroidfatecnormal
Android - Notas de aula
Introdução ao Android
Descomplicando o Android
Introdução à programação em Android Senac 15/05/2012
Android - Activities and services
Android - Conceito e Arquitetura
Desenvolvimento android
Introdução a programação em Android
Palestra Iniciando o desenvolvimento de aplicativos com o Club do Android
Minicurso iniciando com Android no Androidos Day
Android Palestra
Básico de desenvolvimento com Android
O novo desenvolvedor android conceitos básicos e a comunidade em joão pessoa
Minicurso de Desenvolvimento Android - Iguatu - CE
Curso de Android Aula 4
Introdução ao Android
Indrodução ao android 1º Encontro JUG VALE 2012
Conhecendo android
Apostilaandroidfatecnormal
Anúncio

Mais de Luiz Henrique Rauber Rodrigues (20)

ODP
Meus 7 anos no Tchelinux. Pq entrei? Q ganhei? E algumas dicas
ODP
Pelo empoderamento do Hacker/ Maker/ Educador e Nerds afins!
PDF
PDF
Plataforma e Lingaguem Java + Swing
PDF
.Net (dotnet) e C# (csharp)
ODP
De Hackerspaces a Comunidades, e como participo disto?
ODP
Hackerspaces e Makerspaces, e tu com isso?
ODP
Pequenos hackers: Programação para as crianças!
PDF
ENSINO DE LÓGICA DE PROGRAMAÇÃO À CRIANÇAS DO 5o ANO DA ESCOLA DA URI, UTILIZ...
ODP
Dá para ganhar dinheiro com Software Livre?
ODP
Vendo o óbvio do não óbvio do Python imediatamente!
PDF
Da Academia ao Mercado de Trabalho passando por Eventos e Hackerspaces - FGSL...
PDF
PDF
Interações Software Livre/ Mercado/ Academia/ Escola/ Jogos
PDF
Na busca da cura do câncer com o OpenSource Cytoscape (Bioinformática)
PDF
Explore o que os outros não exploram do LibreOffice na sua escola/ universidade
PDF
Ti verde sem mimimi, vamos é economizar dinheiro
PDF
Oficio Patrocinador Tchelinux
PDF
TCC Especialização Gerenciamento de Projetos
Meus 7 anos no Tchelinux. Pq entrei? Q ganhei? E algumas dicas
Pelo empoderamento do Hacker/ Maker/ Educador e Nerds afins!
Plataforma e Lingaguem Java + Swing
.Net (dotnet) e C# (csharp)
De Hackerspaces a Comunidades, e como participo disto?
Hackerspaces e Makerspaces, e tu com isso?
Pequenos hackers: Programação para as crianças!
ENSINO DE LÓGICA DE PROGRAMAÇÃO À CRIANÇAS DO 5o ANO DA ESCOLA DA URI, UTILIZ...
Dá para ganhar dinheiro com Software Livre?
Vendo o óbvio do não óbvio do Python imediatamente!
Da Academia ao Mercado de Trabalho passando por Eventos e Hackerspaces - FGSL...
Interações Software Livre/ Mercado/ Academia/ Escola/ Jogos
Na busca da cura do câncer com o OpenSource Cytoscape (Bioinformática)
Explore o que os outros não exploram do LibreOffice na sua escola/ universidade
Ti verde sem mimimi, vamos é economizar dinheiro
Oficio Patrocinador Tchelinux
TCC Especialização Gerenciamento de Projetos

Último (19)

PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
Apple Pippin Uma breve introdução. - David Glotz
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PDF
Aula04-Academia Heri- Tecnologia Geral 2025
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PPTX
Aula 18 - Manipulacao De Arquivos python
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Processos na gestão de transportes, TM100 Col18
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Custos e liquidação no SAP Transportation Management, TM130 Col18
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Apple Pippin Uma breve introdução. - David Glotz
COBITxITIL-Entenda as diferença em uso governança TI
Aula04-Academia Heri- Tecnologia Geral 2025
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Aula 18 - Manipulacao De Arquivos python
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Processos na gestão de transportes, TM100 Col18
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...

Apps Android e Hibridas

  • 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/
  • 4. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 4/105 Coding Dojo - Turma 2015-2016 – Tec Informática Senac
  • 5. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 5/105 O quê? Onde? Como?
  • 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
  • 7. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 7/105
  • 8. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 8/105
  • 9. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 9/105 Go https://www.android.com/intl/pt-BR_br/
  • 10. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 10/105 Aprofundando SILBERCHATZ, 2013 Android/Linux Java - JVM Multithread Sai swap entra application state ...
  • 11. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 11/105http://source.android.com/source/index.html
  • 12. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 12/105 Mais (ou menos) em https://www.android.com/intl/pt-BR_br/history/
  • 13. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 13/105 https://developer.android.com
  • 14. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 14/105
  • 15. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 15/105
  • 16. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 16/105 javac -version http://www.oracle.com/technetwork/java/javase/downloads/jdk8- downloads-2133151.html android-studio/bin/studio.sh dependências lib32z1 lib32ncurses5 lib32bz2-1.0 lib32stdc++6 Bora instalar? (Enquanto isso, mais teoria)
  • 17. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 17/105 2005 – comprou startup Android, Inc. (SO para câmeras) 2006 – Protótipo “Sooner” mirando em BlackBerry 2007 – Mirarão no IPhone* 2007 – Fundação Open Handset Alliance (Google, HTC, Dell, Intel, Motorola, Qualcomm, Texas Instruments, Samsung, LG, T-Mobile, Nvidia… https://pt.wikipedia.org/wiki/Open_Handset_Alliance) 2007 – Primeira SDK para desenvolver Android 2007 – Google registrou várias patentes sobre smartphone
  • 18. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 18/105 2008 – HTC Dream/ T-Mobile G/ G1 com Android 2010 – Linha Nexus (HTC, Samsung, LG, Asus, Motorola)
  • 19. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 19/105 http://www.androidpit.com.br/evolucao-dos-smartphones-a-linha-nexus
  • 20. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 20/105
  • 21. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 21/105 http://www.gadgetdetail.com/androi d-version-market-share- distribution/
  • 22. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 22/105 http://www.gadgetdetail.com/androi d-version-market-share- distribution/
  • 23. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 23/105 http://www.for bes.com/sites/ eladnatanson/ 2016/06/06/br eaking-the- android-ios- duopoly-will- android-and- ios-ever-get- a-serious- third- competitor/#e 62c5104cad0
  • 24. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 24/105 http://www.for bes.com/sites/ eladnatanson/ 2016/06/06/br eaking-the- android-ios- duopoly-will- android-and- ios-ever-get- a-serious- third- competitor/#e 62c5104cad0
  • 25. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 25/105
  • 26. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 26/105 https://github.com/googlesamples/
  • 27. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 27/105
  • 28. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 28/105
  • 29. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 29/105 fonte: developer.android.com
  • 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
  • 52. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 52/105 http://www.cyanogenmod.org/ +400 modelos https://wiki.cyanogenmod.org/w/About https://wiki.cyanogenmod.org/w/Main_Page
  • 53. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 53/105 http://www.replicant.us/ Nexus S (I902x) Galaxy S (I9000) Galaxy S 2 (I9100) Galaxy Note (N7000) Galaxy Nexus (I9250) Galaxy S 3 (I9300) Galaxy Note (N7000) Galaxy Note 2 (N7100) Galaxy Tab 2 10.1 (P51xx) Galaxy Tab 2 7.0 (P31xx) Galaxy Tab 2 10.1 (P51xx) Galaxy Tab 2 10.1 (P51xx) Uncompleted devices GTA04 Unmaintained devices Dream/Magic Nexus One
  • 54. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 54/105 https://www.tizen.org/ Mobile + Wearable + TV + IVI https://source.tizen.org/ https://www.tizen.org/about/about-linux-foundation Android + HTLM5 +Jquery + Bada + Cordova + River Trail
  • 55. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 55/105 https://cordova.apache.org/ Fonte: Loiane Groner
  • 56. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 56/105 Fonte: Loiane Groner
  • 57. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 57/105 Fonte: Loiane Groner
  • 58. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 58/105 Fonte: Loiane Groner
  • 59. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 59/105 Fonte: Loiane Groner
  • 60. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 60/105 Fonte: Loiane Groner
  • 61. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 61/105 Fonte: Loiane Groner
  • 62. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 62/105 Fonte: Loiane Groner
  • 63. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 63/105 https://cordova.apache.org/
  • 64. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 64/105 https://cordova.apache.org/
  • 65. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 65/105 https://cordova.apache.org/
  • 66. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 66/105 https://cordova.apache.org/
  • 67. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 67/105 https://cordova.apache.org/
  • 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
  • 73. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 73/105 https://pt.wikipedia.org/wiki/PhoneGap
  • 74. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 74/105 Dá até pra transformar site html5 -> app html5 -> app nativo :D
  • 75. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 75/105 https://cordova.apache.org/docs/en/latest/config_ref/index.html app/www/config.xml
  • 76. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 76/105 www/index.html
  • 77. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 77/105 apt-get install npn :) https://nodejs.org/en/download/
  • 78. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 78/105 apt-get install npn :) https://nodejs.org/en/download/ Fonte: Rodrigo Branas
  • 79. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 79/105 apt-get install npn :) https://nodejs.org/en/download/ Fonte: Rodrigo Branas
  • 80. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 80/105 npm install -g cordova cordova create hello com.example.hello HelloWorld cordova platform add ios --save cordova platform add android --save cordova platform ls cordova requirements cordova build cordova build ios cordova build android cordova emulate android cordova run android
  • 81. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 81/105 https://cordova.apache.org/plugins/ (1382 result(s) found) cordova plugin search camera cordova plugin add cordova-plugin-camera
  • 82. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 82/105 https://cordova.apache.org/docs/en/latest/plugin_ref/plugman.html npm install -g plugman plugman install --platform <ios|android|blackberry10|wp8> --project <directory> --plugin <name|url|path> [--plugins_dir <directory>] [--www <directory>] [--variable <name>=<value> [--variable <name>=<value> ...]]
  • 83. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 83/105 https://netbeans.org/kb/docs/webclient/html5-gettingstarted_pt_BR.html https://netbeans.org/kb/docs/webclient/cordova- gettingstarted_pt_BR.html
  • 84. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 84/105 npm install -g ionic ionic start appnome blank http://tableless.com.br/tutorial-ionic-meu-primeiro-app/
  • 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
  • 88. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 88/105 Fonte: Loiane groner
  • 89. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 89/105 Facilitando http://fabricadeaplicativos.com.br/ http://www.appmachine.com/pt-pt/ http://www.apps-builder.com/pt/home http://pt.goodbarber.com/ http://www.shoutem.com/ https://www.easyeasyapps.net/ http://webrobotapps.com/
  • 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
  • 95. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 95/105 <!DOCTYPE html> <html> <head> <script>document.createElement("myHero")</script> <style> myHero { display: block; background-color: #dddddd; padding: 50px; font-size: 30px; } </style> </head> <body> <h1>A Heading</h1> <p>A paragraph.</p> <myHero>My Hero Element</myHero> </body> </html> fonte: loiane groner
  • 96. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 96/105 Acceleration function onSuccess(acceleration) { alert('Acceleration X: ' + acceleration.x + 'n' + 'Acceleration Y: ' + acceleration.y + 'n' + 'Acceleration Z: ' + acceleration.z + 'n' + 'Timestamp: ' + acceleration.timestamp + 'n'); }; ! function onError() { alert('onError!'); }; ! navigator.accelerometer.getCurrentAcceleration(onSuccess, onError); fonte: loiane groner
  • 97. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 97/105 Capturar Foto function capturePhoto() { navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 50, destinationType: destinationType.DATA_URL }); } Capturar Foto com Edição function capturePhotoEdit() { navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 20, allowEdit: true, destinationType: destinationType.DATA_URL }); } Busca Foto do Dispositivo function getPhoto(source) { navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 50, destinationType: destinationType.FILE_URI, sourceType: source }); } <button onclick="getPhoto(pictureSource.PHOTOLIBRARY);">Biblioteca</button><br> <button onclick="getPhoto(pictureSource.SAVEDPHOTOALBUM);">Album de Fotos</button> fonte: loiane groner
  • 98. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 98/105 Compass/Bússula function onSuccess(heading) { alert('Heading: ' + heading.magneticHeading); }; ! function onError(error) { alert('CompassError: ' + error.code); }; ! navigator.compass.getCurrentHeading(onSuccess, onError); fonte: loiane groner
  • 99. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 99/105 Conexão function checkConnection() { var networkState = navigator.connection.type; ! var states = {}; states[Connection.UNKNOWN] = 'Unknown connection'; states[Connection.ETHERNET] = 'Ethernet connection'; states[Connection.WIFI] = 'WiFi connection'; states[Connection.CELL_2G] = 'Cell 2G connection'; states[Connection.CELL_3G] = 'Cell 3G connection'; states[Connection.CELL_4G] = 'Cell 4G connection'; states[Connection.NONE] = 'No network connection'; ! alert('Connection type: ' + states[networkState]); } ! checkConnection(); fonte: loiane groner
  • 100. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 100/105 Propriedades do Dispositivo function onDeviceReady() { var element = document.getElementById('deviceProperties'); ! element.innerHTML = 'Device Name: ' + device.name + '<br />' + 'Device Cordova: ' + device.cordova + '<br />' + 'Device Platform: ' + device.platform + '<br />' + 'Device UUID: ' + device.uuid + '<br />' + 'Device Model: ' + device.model + '<br />' + 'Device Version: ' + device.version + '<br />'; } fonte: loiane groner
  • 101. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 101/105 In App Browser var ref = window.open('http://loiane.com', '_blank', 'location=yes'); ref.addEventListener('loadstart', function() { alert('start: ' + event.url); }); ref.addEventListener('loadstop', function() { alert('stop: ' + event.url); }); ref.addEventListener('exit', function() { alert(event.type); }); fonte: loiane groner
  • 102. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 102/105 Notification - Alert navigator.notification.alert( 'Alerta!', // message alertDismissed, // callback 'Titulo', // title 'Botão' // buttonName ); fonte: loiane groner
  • 103. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 103/105 Notification - Confirm function showConfirm() { navigator.notification.confirm( 'Confirmar?', // message onConfirm, // callback to invoke with index of button pressed 'Titulo', // title 'OK,Cancel' // buttonLabels ); } fonte: loiane groner
  • 104. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 104/105 Notification - Beep // Beepa 3 vezes function playBeep() { navigator.notification.beep(3); } Não funciona no iOS fonte: loiane groner
  • 105. CC BY-SA luizrauber@gmail.com || fb.com/luizrauber 105/105 Notification - Vibrar // Vibra por 2 segundos function vibrate() { navigator.notification.vibrate(2000); } fonte: loiane groner