Slide 1

Slide 1 text

Android Training Program PORTUGAL Aula #0 Pronto para começar

Slide 2

Slide 2 text

● Sejam excelentes uns para os outros ● Fale mais alto se vir ou ouvir alguma coisa ● O assédio não é tolerado ● Pratique "Sim e" um ao outro Código de conduta Mais informações: http://bit.ly/2IhF0l3

Slide 3

Slide 3 text

Olá Mundo!

Slide 4

Slide 4 text

Log.d(“Olá Mundo ”)

Slide 5

Slide 5 text

● Apresentação do programa ● Introdução ao Git/GitHub ● Introdução ao Kotlin ● Android Studio ● Cria a tua aplicação Sumário Photo by Mika Baumeister on Unsplash

Slide 6

Slide 6 text

Andres-Leonardo Martinez-Ortiz Google Carlos Mota Formador Renato Almeida Formador @davilagrau @cafonsomota @tallnato Equipa

Slide 7

Slide 7 text

● 14 eventos ● 11 cidades ● 11 instituições ● 3267 participantes Edições anteriores

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

Apresentação do programa

Slide 10

Slide 10 text

● Aprender Android desde os conceitos mais simples aos mais avançados: ○ Android Jetpack ○ Firebase ○ TensorFlow Lite ○ ML Kit ● Todo o código será escrito em Kotlin ● Desenvolvimento de uma aplicação Android de raiz ● Recorrendo às últimas novidades: ○ Android 11 ○ Jetpack Compose Desenhado para o Android 11! Apresentação do programa

Slide 11

Slide 11 text

● Adicionalmente teremos ainda uma breve introdução ao Flutter ● Suporte contínuo durante todo o programa ● Complemento às aulas dadas nas diferentes instituições de ensino ● Grátis Apresentação do programa

Slide 12

Slide 12 text

● 12 aulas ● 1h30 cada aula ● ~1 aula por semana ● 14 Outubro a 16 Dezembro ● YouTube live ● Suporte assíncrono contínuo via Discord/email ● Todo o código disponível no GitHub Photo by Arif Riyanto on Unspla Apresentação do programa

Slide 13

Slide 13 text

#0 14 de Outubro Pronto para começar #1 21 de Outubro Bem-vindos ao Android #2 28 de Outubro Fundações I #3 04 de Novembro Fundações II #4 11 de Novembro Fundações III #5 18 de Novembro Listas, listas e mais listas #6 25 de Novembro Jetpack, Jetpack, Jetpack! #7 - #8 02 - 03 de Dezembro Firebase #9 - #10 09 - 10 de Dezembro MLKit & TensorFlow #11 16 de Dezembro Resumo Semana Semana Calendário

Slide 14

Slide 14 text

● [05 mins] Apresentação do curso, resumo da sessão anterior e da atual ● [30 mins] Conteúdo da aula ● [15 mins] Formador convidado: parceiro, Googler, GDE, etc. ● [30 mins] Continuação do conteúdo da aula ● [10 mins] Q&A ● [05 mins] Resumo Aulas

Slide 15

Slide 15 text

http://events.withgoogle.com/atp2020 ✉ [email protected] http://bit.ly/atp2020-youtube http://bit.ly/atp2020-discord Links

Slide 16

Slide 16 text

A evolução das aplicações móveis

Slide 17

Slide 17 text

Nokia 3310 Snake

Slide 18

Slide 18 text

Pixel 3 Pokémon Go (AR)

Slide 19

Slide 19 text

Android

Slide 20

Slide 20 text

(quando começamos, 2009) ● Android 1.6 (Donut) ● 528MHz CPU ● 288MB RAM ● Ecrã TFT 65k ● Trackball ● Sem câmera frontal ● 3.15MP câmera HTC Magic (actualmente) Pixel 5 ● Android 11 ● Octa-core CPU ● 8GB RAM ● Ecrã OLED, 90Hz ● Todo o ecrã é tátil ● 8MP câmera frontal ● 12.2 e 16MP câmera Android

Slide 21

Slide 21 text

❌ (quando começamos, 2009) HTC Magic (actualmente) Pixel 5 Android

Slide 22

Slide 22 text

versões Android 11 Android 10 Apple Pie 1.0 Cupcake 1.5 Donut 1.6 Eclair 2.0/2.1 Froyo 2.2 Gingerbread 2.3.x Honeycomb 3.x Ice Cream Sandwich 4.0 Jelly Bean 4.1-4.3 KitKat 4.4 Lollipop 5.0 Marshmallow 6.0 Nougat 7.0 Oreo 8.0 Pie 9.0 Android

Slide 23

Slide 23 text

*ícones de flaticon.com Rabanadas 11 Queijadinha 10 Arroz Doce 1.0 Cornucópia 1.5 Filhoses 2.2 Gargantas de Freira 2.3.x 3.x 4.0 Jesuítas 4.1-4.3 Molotoff 6.0 Nata 7.0 Ovos Moles 8.0 Pudim de Abade de Priscos 9.0 Leite Creme 5.0 Doce da Casa 1.6 Escarpiada 2.0/2.1 4.4 versões Portuguesas Android

Slide 24

Slide 24 text

Android 11 Android 10 Apple Pie 1.0 Cupcake 1.5 Donut 1.6 Eclair 2.0/2.1 Froyo 2.2 Gingerbread 2.3.x Honeycomb 3.x Ice Cream Sandwich 4.0 Jelly Bean 4.1-4.3 KitKat 4.4 Lollipop 5.0 Marshmallow 6.0 Nougat 7.0 Oreo 8.0 Pie 9.0 que sobremesas seriam no teu país? (envia-nos uma mensagem no discord/YouTube) versões > Android

Slide 25

Slide 25 text

Apple Pie Ice Cream Sandwich KitKat Lollipop Oreo Pie Android 1.0 Android 4.0 Android 4.4 Android 5.0 Android 8.0 Android 9.0 evoluções da UI Android *adaptado a partir do tweet Luke Wroblewski, https://twitter.com/lukew/status/996461585693540352

Slide 26

Slide 26 text

Porque Android?

Slide 27

Slide 27 text

2.5 mil milhões de pessoas usam um dispositivo Android todos os dias

Slide 28

Slide 28 text

~75% de todos os smartphones são Android *https://gs.statcounter.com/os-market-share/mobile/worldwide

Slide 29

Slide 29 text

1.2 mil milhões de empregos são gerados diretamente pela plataforma Android, só na Europa

Slide 30

Slide 30 text

em todos os dispositivos Android

Slide 31

Slide 31 text

Que versão de Android devo escolher? distribuição Android

Slide 32

Slide 32 text

distribuição Android

Slide 33

Slide 33 text

distribuição Android

Slide 34

Slide 34 text

Diferentes frameworks para programar para Android

Slide 35

Slide 35 text

Photo by Lucas Miguel on Unsplash

Slide 36

Slide 36 text

Photo by Brandon Hoogenboom on Unsplash

Slide 37

Slide 37 text

Qualquer tecnologia suficientemente avançada é indistinguível da magia. - Arthur C. Clarke

Slide 38

Slide 38 text

● Desenvolvimento nativo ○ Java/ Kotlin ❤ ○ Bibliotecas nativas escritas em C/C++ ● Híbrido ○ PhoneGap, Ionic, etc. ● Cross platform ○ Flutter, React Native, Xamarin, NativeScript, Ionic, Ruby Motion, etc. ● Multiplatforma ○ Kotlin (toda a lógica é partilhada por diferentes plataformas, e a UI desenvolvida nativamente) Android

Slide 39

Slide 39 text

✅ Melhor performance ✅ Kotlin! Tiras o partido de todas as funcionalidades que esta linguagem oferece ✅ Acesso directo a todas as API’s/ funcionalidades ✅ UI nativa Quando o OS é actualizado esta também vai ser ✅ Facilidade em debug ✅ Possibilidade de criar UI’s complexas e fluidas facilmente™ desenvolvimento nativo Android

Slide 40

Slide 40 text

❌ Não existe suporte direto para multi platforma Reutilização de código apenas existe entre aplicações nativas É necessário desenvolver uma segunda aplicação Os custos e o tempo de desenvolvimento (em horas) duplicam desenvolvimento nativo Android

Slide 41

Slide 41 text

No content

Slide 42

Slide 42 text

Google Maps Pinterest Netflix Pokémon Go *as aplicações são muitas vezes reescritas, por isso é possível que esta informação deixe de ser válida no futuro exemplo de aplicações nativas Android

Slide 43

Slide 43 text

✅ Estas aplicações tanto têm código nativo como Web HTML/CSS/JS para desenhar a app e plugins para aceder às funcionalidades nativas Apesar de ser uma aplicação, está a correr dentro de um browser (WebKit) ✅ Custos de desenvolvimento mais baixos Não é necessário ter duas equipas (uma de Android e outra de iOS) ✅ Tempos de desenvolvimento (em horas) mais rápidos ✅ Curva de aprendizagem para programadores Web reduzida Grande parte destas ferramentas têm por base linguagens Web já conhecidas desenvolvimento híbrido Android

Slide 44

Slide 44 text

❌ Aceder a novas API’s pode implicar que tenhas de escrever código nativo ❌ A performance não é a mesma comparativamente com nativo ❌ Suporte offline na maior parte das vezes é inexistente ❌ A UX pode não ser a melhor desenvolvimento híbrido Android

Slide 45

Slide 45 text

Evernote Gmail Untappd JustWatch *as aplicações são muitas vezes reescritas, por isso é possível que esta informação deixe de ser válida no futuro exemplo de aplicações híbridas Android

Slide 46

Slide 46 text

✅ Custos de desenvolvimento mais baixos Não é necessário ter duas equipas (uma de Android e outra de iOS) ✅ Tempos de desenvolvimento (em horas) mais rápidos Consegues desenvolver com poucos ajustes para duas plataformas distintas Base de código única ✅ Melhor performance que as soluções híbridas ✅ Visualmente é mais difícil de distinguir de uma aplicação nativa desenvolvimento cross-platform Android

Slide 47

Slide 47 text

❌ Dependem da implementação da UI que a framework oferece Novos updates no SO, não se refletem imediatamente na aplicação ❌ Apesar de melhor, a performance continua a não ser igual à nativa ❌ As funcionalidades disponíveis dependem se a framework tem esse suporte Se uma das plataformas não tem uma funcionalidade, esta pode não ser disponibilizada para a outra ❌ Estás a confiar o teu projecto a uma framework/ linguagem O que vai acontecer daqui a 10 anos? Ainda vai ter actualizações a framework? desenvolvimento cross-platform Android

Slide 48

Slide 48 text

Airbnb Uber Eats Instagram Discord *as aplicações são muitas vezes reescritas, por isso é possível que esta informação deixe de ser válida no futuro exemplo de aplicações cross-platform Android

Slide 49

Slide 49 text

Instagram exemplo de aplicações cross-platform Android

Slide 50

Slide 50 text

✅ A camada lógica é partilhada entre Android e iOS (e até outras plataformas) Consistência entre as várias plataformas Custos de desenvolvimento mais baixos ✅ Baixo risco Não és obrigado a partilhar tudo. Tu decides o que queres partilhar entre ambas as plataformas ✅ A UI é desenvolvida nativamente Android em Java/Kotlin, iOS em objective-c/swift ✅ O código partilhado é desenvolvido em Kotlin Tiras partido de todas as funcionalidades que a linguagem te oferece ✅ Grande suporte da JetBrains e da comunidade desenvolvimento multiplatforma Android

Slide 51

Slide 51 text

❌ Ainda se encontra em alpha ❌ Os tempos de compilação para native (iOS) ainda são demorados ❌ Fazer debug em iOS não é uma tarefa fácil desenvolvimento multiplatforma Android

Slide 52

Slide 52 text

No content

Slide 53

Slide 53 text

*as aplicações são muitas vezes reescritas, por isso é possível que esta informação deixe de ser válida no futuro Space Cash App Yandex Maps Workspace exemplo de aplicações multiplatforma Android

Slide 54

Slide 54 text

Git & GitHub

Slide 55

Slide 55 text

ProjetoATP 1 1 Android Studio ProjetoATP_1 ProjetoATP_Aula3 ProjetoATP_Final ProjetoATP_este ProjetoATP_Funciona ProjetoATP_FINAL_2 ProjetoATP_2 ProjetoATP_FINAL_ FINAL ProjetoATP_FINAL_ FINAL_A_ENVIAR_E STE ProjetoATP_FINAL_ FINAL_A_ENVIAR_E STE_2

Slide 56

Slide 56 text

Sistema de versionamento

Slide 57

Slide 57 text

● Sistema de controlo de versões distribuído ● Criado por Linus Torvalds (Linux) ● Lançado em 2005 ● Multiplataforma, Linux, Mac OS e Windows Git

Slide 58

Slide 58 text

Main Git

Slide 59

Slide 59 text

Main Requisito 1 Git

Slide 60

Slide 60 text

Git Main Requisito 1

Slide 61

Slide 61 text

Main Requisito 1 Requisito 2 Git

Slide 62

Slide 62 text

Main Requisito 1 Requisito 2 Git

Slide 63

Slide 63 text

Git

Slide 64

Slide 64 text

Como instalar?

Slide 65

Slide 65 text

highlight this link https://git-scm.com/book/en/v2/Getting-Started-Installing-Git

Slide 66

Slide 66 text

GitHub

Slide 67

Slide 67 text

● Plataforma de armazenamento de código ● Grátis para projetos de código aberto ● Repositórios privados gratuitos para contas pessoais ● Todas as funcionalidades disponíveis para contas de Universidade GitHub

Slide 68

Slide 68 text

No content

Slide 69

Slide 69 text

No content

Slide 70

Slide 70 text

No content

Slide 71

Slide 71 text

No content

Slide 72

Slide 72 text

https://github.com/android-training-program

Slide 73

Slide 73 text

Photo by Austin Distel on Unsplash

Slide 74

Slide 74 text

Uma pausa com Android 4.4

Slide 75

Slide 75 text

Uma pausa com Mas não saiam dos vossos lugares (Não patrocinado infelizmente ) Kitkat

Slide 76

Slide 76 text

Kotlin

Slide 77

Slide 77 text

No content

Slide 78

Slide 78 text

● Criada pela JetBrains em 2011 ● Adotada como oficial para Android em 2017 ● 100% interoperável com Java ● Multiplataforma ● Orientada a objetos e funcional, concisa e estaticamente tipada ● Nome de uma ilha na Rússia Kotlin

Slide 79

Slide 79 text

No content

Slide 80

Slide 80 text

Kotlin não é apenas sobre desenvolveres a tua aplicação com menos linhas de código mas sim para escreveres aplicações melhores e mais seguras. - Arnaud Giuliani, Android Makers 2017 Kotlin

Slide 81

Slide 81 text

Null safety Type inference Extensions String interpolation Default values Mutability Sealed Classes Data classes Collections When Kotlin

Slide 82

Slide 82 text

null safety Kotlin

Slide 83

Slide 83 text

var nameThatCanBeNull: String? var name: String null safety Kotlin null can not be a value of a non-null type String name = null nameThatCanBeNull = null Photo by Aziz Acharki on Unsplash

Slide 84

Slide 84 text

printDog(name ?: "Bobi") printDog(name ?: "Bobi") var name: String? fun printDog(tag: String) printDog(name) null safety Kotlin Type mismatch Photo by Stephanie Klepacki on Unsplash

Slide 85

Slide 85 text

dog = Dog("Max") val dog = Dog("Bobi") var doggo = Dog("Bobi") mutability Kotlin Val cannot be reassigned doggo = Dog("Max") val(ue) var(iable)

Slide 86

Slide 86 text

when(dog.legs) { 0 -> println("Humm... Será mesmo um cão? ") 1 -> println("Oh, coitadinho ") 2, 3 -> println("Ao menos consegue caminhar ") 4 -> { println("Quem é lindo? Busca... ") } in 5..10 -> println("Assim mais parece uma ") else -> println("Pois, ninguém sabe ") } when Kotlin

Slide 87

Slide 87 text

val dog: Dog = Dog() val dog = Dog() dog.legs = 4 // Int var legs = dog.legs dog.legs = 4L //Long type inference Kotlin val animal = getAnimal() fun printDog(dog: Dog) if(animal is Dog){ printDog(animal) } The integer literal does not conform to the expected type Int

Slide 88

Slide 88 text

sealed class Animal { data class Dog(val name: String): Animal() data class Cat(val name: String): Animal() data class Penguin(val name: String): Animal() } sealed class Kotlin Photo by Amy Asher on Unsplash

Slide 89

Slide 89 text

public class Dog { private String name; public Dog(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Dog dog = (Dog) o; return Objects.equals(name, dog.name); } @Override public int hashCode() { return Objects.hash(name); } @Override public String toString() { return "Dog{" + "name='" + name + '\'' + '}'; } } data class Dog(var name: String) data class Kotlin

Slide 90

Slide 90 text

fun Int.plus2(): Int { return this + 2 } val result = 5.plus2() // 7 extensions Kotlin

Slide 91

Slide 91 text

fun printDog(dog: Dog, legs: Int) { println("O " + dog.name + " tem " + legs + " patas") fun printNails(dog: Dog, legs: Int) { println("O ${dog.name} tem ${legs * 3} unhas") } printNails(Dog("Bobi"), 4) // “O Bobi tem 12 unhas” println("O ${dog.name} tem $legs patas") } string interpolation Kotlin

Slide 92

Slide 92 text

fun printDog(name: String = "Bobi", legs: Int = 4) { println("O $name tem $legs patas) } fun printDog(name: String = "Bobi", legs: Int = 4) { println("O $name tem $legs patas) } printDog() // O Bobi tem 4 patas printDog("Max") // O Max tem 4 patas printDog("Toy", 2) // O Toy tem 2 patas printDog( legs = 2, name = "Toy") // O Toy tem 2 patas default values Kotlin

Slide 93

Slide 93 text

● getOrElse() ● find() ● filter() ● filterNot() ● fitletNotNull() ● flatMap() ● take() ● takeLast() ● sortBy() ● sortByDescending() ● groupBy() ● map() ● mapNotNull() ● all() ● any() ● sumBy() ● zip() ● ... collections Kotlin

Slide 94

Slide 94 text

mutableListOf(1, null, 2, null, 3, 4, 5, 6, 7, 8, 9) .filterNotNull() .filter { it % 2 == 0 } .sortedDescending() > [1, null, 2, null, 3, 4, 5, 6, 7, 8, 9] collections Kotlin

Slide 95

Slide 95 text

mutableListOf(1, null, 2, null, 3, 4, 5, 6, 7, 8, 9) .filterNotNull() .filter { it % 2 == 0 } .sortedDescending() > [1, 2, 3, 4, 5, 6, 7, 8, 9] collections Kotlin

Slide 96

Slide 96 text

mutableListOf(1, null, 2, null, 3, 4, 5, 6, 7, 8, 9) .filterNotNull() .filter { it % 2 == 0 } .sortedDescending() > [2, 4, 6, 8] collections Kotlin

Slide 97

Slide 97 text

mutableListOf(1, null, 2, null, 3, 4, 5, 6, 7, 8, 9) .filterNotNull() .filter { it % 2 == 0 } .sortedDescending() > [8, 6, 4, 2] collections Kotlin

Slide 98

Slide 98 text

Android Server side Native em todo o lado Kotlin Web

Slide 99

Slide 99 text

Kotlin Koans

Slide 100

Slide 100 text

https://play.kotlinlang.org/koans/overview

Slide 101

Slide 101 text

Semana 0 Pronto para começar

Slide 102

Slide 102 text

Desenvolver uma aplicação móvel

Slide 103

Slide 103 text

1. Ter uma ideia (o passo mais difícil na realidade)

Slide 104

Slide 104 text

2. Desenhá-la no papel Um título Algum texto, não muito. O suficiente para conseguir aqui ocupar três linhas. Feito.

Slide 105

Slide 105 text

3. Programá-la

Slide 106

Slide 106 text

No content

Slide 107

Slide 107 text

4. Testar todas as funcionalidades ♂

Slide 108

Slide 108 text

5. Corrigir os problemas encontrados

Slide 109

Slide 109 text

6. (Re)testar todas as funcionalidades ♂

Slide 110

Slide 110 text

7. Submeter na Google Play Store

Slide 111

Slide 111 text

https://play.google.com/console

Slide 112

Slide 112 text

8. Anunciar a todos os amig@s para partilharem

Slide 113

Slide 113 text

9. Adicionar funcionalidades pagas

Slide 114

Slide 114 text

10. Reformar e viver dos lucros

Slide 115

Slide 115 text

Android Studio

Slide 116

Slide 116 text

● Editor oficial para desenvolvimento Android ● Baseado no JetBrains' IntelliJ IDE ● Multiplataforma (Mac OS, Windows, Linux) ● Emulador e gestor de SDK’s pré-instalado ● Inspecção de base de dados, visualização e inspeção de UI, etc. Android Studio https://developer.android.com/studio/

Slide 117

Slide 117 text

https://developer.android.com/studio/

Slide 118

Slide 118 text

No content

Slide 119

Slide 119 text

Vista de todos os ficheiros do projecto

Slide 120

Slide 120 text

Compilar o projeto

Slide 121

Slide 121 text

Dispositivos disponíveis

Slide 122

Slide 122 text

No content

Slide 123

Slide 123 text

Gestor emuladores ☝

Slide 124

Slide 124 text

Gestor dos SDKs instalados ☝

Slide 125

Slide 125 text

Sincronizar ficheiros Gradle

Slide 126

Slide 126 text

Modo Debug ☝

Slide 127

Slide 127 text

Correr a aplicação no dispositivo ☝

Slide 128

Slide 128 text

No content

Slide 129

Slide 129 text

Parar a aplicação

Slide 130

Slide 130 text

Output do último comando

Slide 131

Slide 131 text

No content

Slide 132

Slide 132 text

No content

Slide 133

Slide 133 text

Logs da aplicação

Slide 134

Slide 134 text

No content

Slide 135

Slide 135 text

Limpar logs

Slide 136

Slide 136 text

No content

Slide 137

Slide 137 text

Vista de um layout

Slide 138

Slide 138 text

Paleta de componentes gráficos

Slide 139

Slide 139 text

Atributos da View selecionada

Slide 140

Slide 140 text

Vista do código

Slide 141

Slide 141 text

Vista partilhada

Slide 142

Slide 142 text

Uma novidade fresquinha

Slide 143

Slide 143 text

Novidades de hoje! AS 4.1

Slide 144

Slide 144 text

Criar uma aplicação

Slide 145

Slide 145 text

No content

Slide 146

Slide 146 text

Emulador

Slide 147

Slide 147 text

No content

Slide 148

Slide 148 text

Telemóvel

Slide 149

Slide 149 text

No content

Slide 150

Slide 150 text

Materiais

Slide 151

Slide 151 text

● Android Developers ● Android Codelabs ● Android YouTube ● Android Medium ● Android GitHub ● Android Twitter ● Google Courses Queres aprender mais sobre Android?

Slide 152

Slide 152 text

● Kotlin Reference Manual ● Android Kotlin Fundamentals 01.1: Get started ● Kotlin Bootcamp for Programmers ● Kotlin Slack ● Kotlin Koans ● Kotlin Playground Mais sobre Kotlin

Slide 153

Slide 153 text

● Android Developers Backstage ● Ícones do Material Design ● Asset Generator ● Introduction to Github E ainda...

Slide 154

Slide 154 text

● Google Computer Science Curriculum ● Udacity Nanodegree ● Codecademy ● Udemy ● Coursera ● Khanacademy Queres aprender programar?

Slide 155

Slide 155 text

Dúvidas?

Slide 156

Slide 156 text

Obrigado ‍♀

Slide 157

Slide 157 text

Android Training Program PORTUGAL Aula #1 Bem-vindos ao Android Próxima aula: 21 de Outubro