Ao longo das aulas temos vindo a utilizar algumas das bibliotecas do Android Jetpack, nesta aula vamos focar-nos essencialmente em três:
- Room
- CameraX
- Introdução a Compose
● 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
Andres-Leonardo Martinez-Ortiz Google Carlos Mota Formador Renato Almeida Formador @davilagrau @cafonsomota @tallnato Equipa Daniela Ferreira Gestora de comunidades
● 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 O programa
#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 ✅ ✅ ✅ ✅ Direto ✅ ✅
● É a evolução da ListView ○ Com uma maior performance e flexibilidade ● Permite criar uma lista de objetos facilmente ● Esta lista tanto pode ser horizontal como vertical ○ Dependendo do LayoutManager definido ● É possibilidade adicionar animações (incríveis) por cada item modificado RecyclerView
● Cliente REST fortemente tipado ● Facilita a transferência de JSON através de um webservice ○ JSON ou outro tipos de dados Retrofit https://github.com/square/retrofit
● Glide é uma biblioteca de carregamento de imagens para Android ● Descarrega, descodifica e mostra ○ Imagens ○ GIF’s ● Permite também redimensionar imagens ● Cache automática e simplificada das imagens ● Expõe uma API flexível e simples de utilizar Vantagens https://github.com/bumptech/glide
Seguir boas práticas Construídas com base em boas práticas de design modernas, as bibliotecas do Android Jetpack permitem menos crashes e memory leaks, com compatibilidade com versões anteriores já incluídas Porquê usar Android Jetpack?
Seguir boas práticas Construídas com base em boas práticas de design modernas, as bibliotecas do Android Jetpack permitem menos crashes e memory leaks, com compatibilidade com versões anteriores já incluídas Porquê usar Android Jetpack? Eliminar código boilerplate O Android Jetpack gere aquelas atividades chatas, como processamento em background, navegação e gestão do ciclo de vida da aplicação, para que os programadores se possam concentrar no que torna a aplicação espetacular.
Seguir boas práticas Construídas com base em boas práticas de design modernas, as bibliotecas do Android Jetpack permitem menos crashes e memory leaks, com compatibilidade com versões anteriores já incluídas Porquê usar Android Jetpack? Eliminar código boilerplate O Android Jetpack gere aquelas atividades chatas, como processamento em background, navegação e gestão do ciclo de vida da aplicação, para que os programadores se possam concentrar no que torna a aplicação espetacular. Reduzir a fragmentação Reduzir a complexidade através de bibliotecas que funcionam de forma consistente nas várias versões e dispositivos de Android.
“Com os Componentes de Arquitetura do Android, estamos a re-arquitetar toda a nossa aplicação. É ótimo existir uma forma recomenda, opinativa, e clara de construir uma aplicação Android que facilita suportar alteração de configurações” - Drew Hannay, Engenheiro de Software, LinkedIn https://developer.android.com/jetpack/testimonials LinkedIn Testemunhos
“Nós utilizamos dezenas de diferentes tecnologias, e o ‘Room’ foi uma grande melhoria. A ênfase na testabilidade é enorme. - Andy Lawton, responsável pela plataforma Android no Tinder https://developer.android.com/jetpack/testimonials Tinder Testemunhos
● Camada de abstração sobre SQLite (base de dados) ● Reduz a quantidade de código repetitivo ● Acesso à base de dados de forma mais robusta ● Valida as consultas em tempo de compilação ● Utilizado como cache da aplicação ● Compatível com LiveData Room https://developer.android.com/topic/libraries/architecture/room
Como utilizar? Importar a biblioteca Room Resto da aplicação Data Access Object Entidades Obter os DAOs Obter as entidades da BD Persistir os dados para a BD get / set valores
@Dao interface DogDAO { @Query("SELECT * FROM dog ORDER BY name ASC") fun getAlphabetizedDogs(): LiveData> @Insert(onConflict = OnConflictStrategy.IGNORE) fun insert(dog: Dog) @Query("DELETE FROM dog") fun deleteAll() } Como utilizar? Definir o DAO (Data access object) DogDAO.kt
@Dao interface DogDAO { @Query("SELECT * FROM dog ORDER BY name ASC") fun getAlphabetizedDogs(): LiveData> @Insert(onConflict = OnConflictStrategy.IGNORE) fun insert(dog: DogModel) @Query("DELETE FROM dog") fun deleteAll() } Como utilizar? Definir o DAO (Data access object) DogDAO.kt
@Dao interface DogDAO { @Query("SELECT * FROM dog ORDER BY name ASC") fun getAlphabetizedDogs(): LiveData> @Insert(onConflict = OnConflictStrategy.IGNORE) fun insert(dog: DogModel) @Query("DELETE FROM dog") fun deleteAll() } Como utilizar? Definir o DAO (Data access object) DogDAO.kt
@Dao interface DogDAO { @Query("SELECT * FROM dog ORDER BY name ASC") fun getAlphabetizedDogs(): LiveData> @Insert(onConflict = OnConflictStrategy.IGNORE) fun insert(dog: DogModel) @Query("DELETE FROM dog") fun deleteAll() } Como utilizar? Definir o DAO (Data access object) DogDAO.kt
@Dao interface DogDAO { @Query("SELECT * FROM dog ORDER BY name ASC") fun getAlphabetizedDogs(): LiveData> @Insert(onConflict = OnConflictStrategy.IGNORE) fun insert(dog: Dog) @Query("DELETE FROM dog") fun deleteAll() } Como utilizar? Definir o DAO (Data access object) DogDAO.kt
class MainViewModelFactory( private val repository: DogRepository ) : ViewModelProvider.Factory { override fun create(modelClass: Class): T { if (modelClass.isAssignableFrom(MainViewModel::class.java)) { @Suppress("UNCHECKED_CAST") return MainViewModel(repository) as T } throw IllegalArgumentException("Unknown ViewModel class") } } Como utilizar? No ViewModelProvider MainViewModel.kt
class BobiApplication: Application() { val database by lazy { KennelDatabase.getDatabase(this) } val repository by lazy { DogRepository(database.dogDao()) } } Como utilizar? O Application BobiApplication.kt
class MainActivity : AppCompatActivity() { private val viewModel: MainViewModel by viewModels { MainViewModelFactory((application as BobiApplication).repository) } ... } Como utilizar? Na Activity MainActivity.kt
class MainActivity : AppCompatActivity() { private val viewModel: MainViewModel by viewModels { MainViewModelFactory((application as BobiApplication).repository) } fun showDogs() { viewModel.getDogsDatabase().observe(this){ Log.d(TAG, "$it") } } ... } Como utilizar? Na Activity MainActivity.kt
Em vez de chamarmos a câmera nativa Câmera private fun openNativeCamera() { val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) startActivityForResult(intent, REQUEST_IMAGE_CAPTURE) }
Em vez de chamarmos a câmera nativa Câmera private fun openNativeCamera() { val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE) startActivityForResult(intent, REQUEST_IMAGE_CAPTURE) } Passamos a criar tudo de raiz...
Compose ● Forma inovadora de criar layouts nativos (em Android) ● Permite construir componentes gráficos de forma declarativa ● Interoperável com os componentes nativos ● Reduz a quantidade de código necessário para criar interfaces gráficas ● Tira partido das vantagens de Kotlin para facilitar a escrita de código α
Para mudar a fonte do código: 1. Carregar em Android Studio na barra de ações 2. Preferences 3. Pesquisar por Font 4. Editor → General → Font 5. Alterar para a fonte pretendida
Para mudar a fonte do código: 1. Carregar em Android Studio na barra de ações 2. Preferences 3. Pesquisar por Font 4. Appe... & Behavior → Appearance 5. Alterar para a fonte pretendida
Para mudar a fonte do código: 1. Carregar em Android Studio na barra de ações 2. Preferences 3. Pesquisar por Font 4. Appe... & Behavior → Appearance 5. Alterar para a fonte pretendida
O teu telemóvel, no teu computador. ● O ecrã do teu telemóvel no teu computador ● Permite controlares o teu telemóvel remotamente ● Funciona em GNU/Linux, Windows e macOS
O teu telemóvel, no teu computador. ● O ecrã do teu telemóvel no teu computador ● Permite controlares o teu telemóvel remotamente ● Funciona em GNU/Linux, Windows e macOS apt install scrcpy //Linux choco install scrcpy //Windows brew install scrcpy //macOS https://github.com/genymobile/scrcpy
Trabalho para casa ● Implementar um modo de navegação diferente ○ BottomNavigationView ■ Main (MainFragment.kt) ■ Lista de raças (ListFragment.kt) ■ Raças favoritas (FavoritesFragment.kt) ■ About (AboutFragment.kt)
● Implementar um novo ecrã - FavoritesFragment.kt ● Contém todos as raças favoritas do utilizador ● Permite adicionar/remover uma raça aos/dos favoritos Trabalho para casa