{"id":4113,"date":"2023-06-08T20:32:40","date_gmt":"2023-06-08T23:32:40","guid":{"rendered":"https:\/\/devkico.itexto.com.br\/?p=4113"},"modified":"2023-06-08T20:45:30","modified_gmt":"2023-06-08T23:45:30","slug":"desenvolvimento-android-nativo-com-jetpack-compose-um-plano-de-estudos","status":"publish","type":"post","link":"https:\/\/devkico.itexto.com.br\/?p=4113","title":{"rendered":"Desenvolvimento Android nativo com Jetpack Compose &#8211; Um plano de estudos"},"content":{"rendered":"\n<figure class=\"wp-block-image alignfull size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"840\" height=\"473\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/capa.jpg\" alt=\"\" class=\"wp-image-4115\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/capa.jpg 840w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/capa-300x169.jpg 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/capa-768x432.jpg 768w\" sizes=\"(max-width: 840px) 100vw, 840px\" \/><\/figure>\n\n\n\n<p>Uma das coisas que mais tenho gostado de estudar atualmente \u00e9 desenvolvimento nativo para Android com Jetpack Compose. Com alguns projetos em execu\u00e7\u00e3o e os resultados tem sido incr\u00edveis (vou escrever mais sobre isto em breve), mas o processo de aprendizado n\u00e3o tem sido trivial.<\/p>\n\n\n\n<p>O motivo \u00e9 ir\u00f4nico: apesar de a documenta\u00e7\u00e3o oficial do Google ter me parecido <strong>excelente<\/strong>, n\u00e3o \u00e9 claro qual caminho voc\u00ea deve seguir ao navegar por ela. \u00c9 muito extensa e f\u00e1cil de voc\u00ea se perder. Tanto que terminei com uma p\u00e1gina enorme de links no meu <a href=\"https:\/\/obsidian.md\">Obsidian<\/a> (app lindo, experimente) que acabei transformando neste post.<\/p>\n\n\n\n<p>Meu objetivo \u00e9 lhe dar os insumos para que voc\u00ea possa come\u00e7ar a desenvolver suas pr\u00f3prias aplica\u00e7\u00f5es nativas no Android sem precisar gastar um centavo sequer com cursos (n\u00e3o que estes sejam ruins (muitos s\u00e3o), mas por que para o caminho que vou expor se tornam desnecess\u00e1rios).<\/p>\n\n\n\n<p>Minha sugest\u00e3o \u00e9 que voc\u00ea guarde este post: primeiro o leia do in\u00edcio ao fim e, na sequ\u00eancia, execute os treinamentos que sugiro (todos gratuitos) e guarde os links que cito aqui para que voc\u00ea possa se aprofundar. Muita aten\u00e7\u00e3o aos alertas que darei daqui pra frente.<\/p>\n\n\n\n<p>O primeiro passo \u00e9 ter a \u00faltima vers\u00e3o do Android Studio em seu computador. Voc\u00ea pode baix\u00e1-lo <a href=\"https:\/\/developer.android.com\/studio\">aqui<\/a>, e ele \u00e9 a ferramenta que voc\u00ea precisar\u00e1 para fazer tudo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Este mundo nativo do Android<\/h2>\n\n\n\n<figure class=\"wp-block-image alignfull size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"483\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/mapa_android-1024x483.jpg\" alt=\"\" class=\"wp-image-4114\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/mapa_android-1024x483.jpg 1024w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/mapa_android-300x142.jpg 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/mapa_android-768x362.jpg 768w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/mapa_android.jpg 1460w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>A primeira coisa \u00e9 saber aonde voc\u00ea est\u00e1: neste post falo sobre desenvolvimento de aplica\u00e7\u00f5es nativas para Android usando Jetpack, que \u00e9 a abordagem atual recomendada pelo Google para o desenvolvimento de aplica\u00e7\u00f5es nativas hoje. <\/p>\n\n\n\n<p>Isto quer dizer que h\u00e1 dois caminhos a serem seguidos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>O desenvolvimento <strong>antes do Jetpack<\/strong>: baseado em Views (layout baseado em XML) e Java. <\/li>\n\n\n\n<li>Desenvolvimento<strong> baseado em Jetpack<\/strong> &#8211; que \u00e9 o novo modo recomendado pelo Google para come\u00e7ar novos projetos.<\/li>\n<\/ul>\n\n\n\n<p>Se voc\u00ea navegar pela <a href=\"https:\/\/developer.android.com\/docs\">documenta\u00e7\u00e3o oficial<\/a> do Android hoje este direcionamento para o novo modo de desenvolvimento \u00e9 claro: est\u00e1 mais dif\u00edcil encontrar o conte\u00fado sobre views e Java (vai l\u00e1: tenta!). <\/p>\n\n\n\n<p>Ent\u00e3o precisamos come\u00e7ar entendendo o que o Google est\u00e1 chamando de &#8220;novo caminho para o desenvolvimento Android&#8221;. A primeira mudan\u00e7a radical diz respeito \u00e0 linguagem de programa\u00e7\u00e3o.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Sai Java, entra Kotlin<\/h3>\n\n\n\n<figure class=\"wp-block-image alignfull size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"840\" height=\"480\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/sai_java_entra_kotlin.jpg\" alt=\"\" class=\"wp-image-4116\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/sai_java_entra_kotlin.jpg 840w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/sai_java_entra_kotlin-300x171.jpg 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/sai_java_entra_kotlin-768x439.jpg 768w\" sizes=\"(max-width: 840px) 100vw, 840px\" \/><\/figure>\n\n\n\n<p>Ainda \u00e9 poss\u00edvel usar Java para o desenvolvimento de novas aplica\u00e7\u00f5es Android, mas voc\u00ea n\u00e3o conseguir\u00e1 (ou pelo menos ter\u00e1 muita dificuldade) em usar o Jetpack Compose (que \u00e9 o novo toolkit gr\u00e1fico para constru\u00e7\u00e3o de interfaces gr\u00e1ficas) em seus projetos. Ent\u00e3o o primeiro passo aqui \u00e9 ignorar o Java ( :( ) e partir pro Kotlin.<\/p>\n\n\n\n<p>Na minha experi\u00eancia como &#8220;javeiro&#8221; (desde 1996),  as maiores dificuldades podem ser:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>O modo como Kotlin lida com nulidade pra evitar os famigerados NullpointerExceptions da vida. Leva tempo at\u00e9 pegar o jeito da coisa (ao menos pra mim levou (a linguagem deixa bem claro o trauma com estes problemas e realmente \u00e9 uma solu\u00e7\u00e3o interessante para a quest\u00e3o gerando c\u00f3digo que pode ser bem mais seguro)).<\/li>\n\n\n\n<li>O uso que a linguagem faz de fun\u00e7\u00f5es: voc\u00ea n\u00e3o precisa ter classes em um arquivo Kotlin, pode ter s\u00f3 fun\u00e7\u00f5es. Isto me gerou muito estranhamento. Se voc\u00ea tem uma boa experi\u00eancia com o conceito de lambdas no Java (a partir do 8) ent\u00e3o a coisa vai ser bem mais tranquila.<\/li>\n\n\n\n<li>A sintaxe: n\u00e3o se iluda achando que &#8220;\u00e9 muito parecida com Java&#8221;. \u00c9 ilus\u00e3o.<\/li>\n<\/ul>\n\n\n\n<p>Minha dificuldade s\u00f3 n\u00e3o foi maior devido \u00e0 minha longa experi\u00eancia com Groovy. Ent\u00e3o aqui seguem os primeiros materiais que sugiro para voc\u00eas.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized coblocks-animate\" data-coblocks-animation=\"slideInLeft\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/alerta.png\" alt=\"\" class=\"wp-image-4118\" width=\"144\" height=\"144\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/alerta.png 512w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/alerta-300x300.png 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/alerta-150x150.png 150w\" sizes=\"(max-width: 144px) 100vw, 144px\" \/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Alguns alertas<\/h4>\n\n\n\n<p>Na minha experi\u00eancia h\u00e1 duas formas de se aprender uma nova linguagem de programa\u00e7\u00e3o: apanhando e pondo seus clientes em risco ou maximizando seu tempo e minimizando o risco para seus clientes. Opto por falar sobre a segunda alternativa aqui.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Nos cursos que cito abaixo, execute-os do in\u00edcio ao fim, sem pular. As aulas muitas vezes s\u00e3o encadeadas: se voc\u00ea ignorar uma delas ter\u00e1 dificuldades em entender o conte\u00fado posterior.<\/li>\n\n\n\n<li>No caso dos cursos h\u00e1 exerc\u00edcios: fa\u00e7a-os. Se n\u00e3o houver, tente reproduzir o c\u00f3digo dos instrutores no seu ambiente de desenvolvimento local. Aprendi horrores assim.<\/li>\n\n\n\n<li>Se voc\u00ea v\u00eam do Java, <strong>n\u00e3o caia na ilus\u00e3o de que j\u00e1 sabe como os elementos b\u00e1sicos do Kotlin ir\u00e3o funcionar<\/strong>. H\u00e1 diferen\u00e7as e elas podem te tomar boa parte do seu tempo.<\/li>\n\n\n\n<li><strong>Cuidado com as tradu\u00e7\u00f5es do Google<\/strong>: vou incluir v\u00e1rios links que direcionam para a documenta\u00e7\u00e3o oficial do Android e esta normalmente \u00e9 traduzida, mas em alguns pontos encontrei erros.<\/li>\n\n\n\n<li>Voc\u00ea n\u00e3o conseguir\u00e1 fazer muita coisa (se \u00e9 que conseguir\u00e1 fazer algo) sem ter no\u00e7\u00f5es m\u00ednimas de Kotlin.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Voltando ao conte\u00fado sobre Kotlin<\/h3>\n\n\n\n<p><strong>Bootcamp Kotlin para Programadores na Udacity (grautito)<\/strong> &#8211;<a href=\" https:\/\/www.udacity.com\/course\/kotlin-bootcamp-for-programmers--ud9011 \"> https:\/\/www.udacity.com\/course\/kotlin-bootcamp-for-programmers&#8211;ud9011 <\/a><\/p>\n\n\n\n<p>\u00c9 um treinamento bem interessante: totalmente em ingl\u00eas. Confesso que minha maior dificuldade foram os instrutores que, apesar de bons, s\u00e3o &#8220;divertidos demais&#8221; pro meu gosto. Mesmo com este &#8220;problema&#8221;, foi meu primeiro contato com Kotlin e ajudou <strong>muito<\/strong>.<\/p>\n\n\n\n<p>Se o ingl\u00eas for um problema, n\u00e3o desanime, h\u00e1 um outro treinamento muito legal tamb\u00e9m que encontra-se no site do Google e que possui tradu\u00e7\u00e3o para o portugu\u00eas:<\/p>\n\n\n\n<p><strong>Treinamento Kotlin para programadores<\/strong> &#8211; <a href=\"https:\/\/developer.android.com\/courses\/kotlin-bootcamp\/overview\">https:\/\/developer.android.com\/courses\/kotlin-bootcamp\/overview<\/a><\/p>\n\n\n\n<p>\u00c9 essencialmente o primeiro treinamento, mas com uma vantagem (pra mim): sem os v\u00eddeos dos instrutores que mencionei acima.<\/p>\n\n\n\n<p>Finalmente, h\u00e1 a <strong>documenta\u00e7\u00e3o oficial da linguagem<\/strong>, que tamb\u00e9m \u00e9 bem legal como fonte de refer\u00eancia (n\u00e3o \u00e9 um curso) e pode ser acessada neste link: <a href=\"https:\/\/kotlinlang.org\/docs\/home.html \">https:\/\/kotlinlang.org\/docs\/home.html <\/a><\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Assuntos que voc\u00ea deve prestar muita aten\u00e7\u00e3o:<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Coroutines<\/strong> &#8211; \u00e9 a solu\u00e7\u00e3o para programa\u00e7\u00e3o ass\u00edncrona n\u00e3o bloqueante no Kotlin que ser\u00e1 <strong>vital<\/strong> no desenvolvimento de aplica\u00e7\u00f5es Android. Link na documenta\u00e7\u00e3o oficial: <a href=\"https:\/\/kotlinlang.org\/docs\/coroutines-overview.html \">https:\/\/kotlinlang.org\/docs\/coroutines-overview.html <\/a><\/li>\n\n\n\n<li><strong>Null safety<\/strong> &#8211; especialmente voc\u00ea javeiro! Como Kotlin lida com nulidades de forma segura. Link para a documenta\u00e7\u00e3o oficial: <a href=\"https:\/\/kotlinlang.org\/docs\/null-safety.html \">https:\/\/kotlinlang.org\/docs\/null-safety.html <\/a><\/li>\n\n\n\n<li><strong>Lambdas<\/strong> &#8211; <a href=\"https:\/\/kotlinlang.org\/docs\/lambdas.html\">https:\/\/kotlinlang.org\/docs\/lambdas.html<\/a><\/li>\n\n\n\n<li><strong>Data classes<\/strong> &#8211; a solu\u00e7\u00e3o para &#8220;DTOs&#8221; em Kotlin &#8211; vai ser muito \u00fatil na cria\u00e7\u00e3o de DTOs, especialmente quando precisar escrever clientes REST. Link para a documental\u00e7\u00e3o oficial: <a href=\"https:\/\/kotlinlang.org\/docs\/data-classes.html\">https:\/\/kotlinlang.org\/docs\/data-classes.html<\/a><\/li>\n\n\n\n<li><strong>Sealed classes<\/strong> &#8211; especialmente para voc\u00ea javeiro! Em Kotlin \u00e9 poss\u00edvel escrever classes que impossibilitem a cria\u00e7\u00e3o de subclasses. Muito \u00fatil. &#8211; <a href=\"https:\/\/kotlinlang.org\/docs\/sealed-classes.html\">https:\/\/kotlinlang.org\/docs\/sealed-classes.html<\/a><\/li>\n\n\n\n<li><strong>Generics em Kotlin<\/strong> &#8211; <a href=\"https:\/\/kotlinlang.org\/docs\/generics.html\">https:\/\/kotlinlang.org\/docs\/generics.html<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\">Muito al\u00e9m do Android<\/h4>\n\n\n\n<p>Houve um momento que me empolguei com Kotlin: foi quando descobri que existe uma vers\u00e3o nativa da linguagem que permite gerar execut\u00e1veis que n\u00e3o dependem de uma m\u00e1quina virtual. Trata-se do projeto &#8220;<strong>Kotlin Multiplatform<\/strong>&#8221; que permite escrever aplica\u00e7\u00f5es para Android (claro), iOS, Windows, Linux, macOS e web. Mais detalhes neste link: <a href=\"https:\/\/kotlinlang.org\/lp\/multiplatform\/\">https:\/\/kotlinlang.org\/lp\/multiplatform\/<\/a><\/p>\n\n\n\n<p>Pode inclusive ser uma alternativa bem interessante ao Rust em alguns cen\u00e1rios (vou escrever sobre isto no futuro, pode aguardar). Bora voltar pro Android?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">MAD &#8211; Modern Android Development<\/h2>\n\n\n\n<figure class=\"wp-block-image alignwide size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"840\" height=\"644\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/mad.jpg\" alt=\"\" class=\"wp-image-4122\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/mad.jpg 840w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/mad-300x230.jpg 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/mad-768x589.jpg 768w\" sizes=\"(max-width: 840px) 100vw, 840px\" \/><\/figure>\n\n\n\n<p>Voc\u00ea encontrar\u00e1 este termo MAD (&#8220;MAD Skills&#8221; &#8211; <a href=\"https:\/\/developer.android.com\/modern-android-development?hl=pt-br\">link oficial<\/a>) em diversos materiais no site oficial do Android: \u00e9 este o tal &#8220;novo modo&#8221; de se desenvolver aplica\u00e7\u00f5es. \u00c9 composto por essencialmente tr\u00eas componentes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Kotlin ao inv\u00e9s de Java (j\u00e1 falei a respeito).<\/li>\n\n\n\n<li>O conjunto de bibliotecas Jetpack.<\/li>\n\n\n\n<li>Compose para interfaces.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Arquitetura<\/h3>\n\n\n\n<p>Antes de pular para o Jetpack e o Compose (que t\u00e1 dentro do Jetpack :) ) \u00e9 muito importante que voc\u00ea entenda os conceitos essenciais por tr\u00e1s da arquitetura de uma aplica\u00e7\u00e3o Android e, talvez mais importante, conhecer as recomenda\u00e7\u00f5es dadas pelo Google a respeito.<\/p>\n\n\n\n<p>Eu sei: h\u00e1 aquela ansiedade em pular no c\u00f3digo e escrever as aplica\u00e7\u00f5es o mais r\u00e1pido poss\u00edvel, mas recomendo que voc\u00ea d\u00ea uma lida neste material aqui antes. N\u00e3o precisa se aprofundar: uma leitura r\u00e1pida inicial j\u00e1 vai servir para que ao menos voc\u00ea entenda os conceitos principais.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/alerta.png\" alt=\"\" class=\"wp-image-4118\" width=\"129\" height=\"129\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/alerta.png 512w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/alerta-300x300.png 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/alerta-150x150.png 150w\" sizes=\"(max-width: 129px) 100vw, 129px\" \/><\/figure>\n\n\n\n<p><strong>Aviso: <\/strong>vale muito \u00e0 pena investir algum tempo neste ponto. A maior parte das coisas que mencionarei adiante ficar\u00e3o muito mais claras passando pelo treinamento que menciono a seguir. (nem que seja uma passada r\u00e1pida pelos textos)<\/p>\n\n\n\n<p><strong>Curso Modern Android App Architecture<\/strong> &#8211; <a href=\"https:\/\/developer.android.com\/courses\/pathways\/android-architecture\">https:\/\/developer.android.com\/courses\/pathways\/android-architecture<\/a><\/p>\n\n\n\n<p> Acho muito interessante que voc\u00ea passe por este curso. Nele voc\u00ea vai entender quais as recomenda\u00e7\u00f5es do Google para que organizemos nosso c\u00f3digo de tal forma que obtenhamos projetos que sejam f\u00e1ceis de serem mantidos no longo prazo (e no curto e m\u00e9dio tamb\u00e9m) e, talvez mais importante: adquirir vocabul\u00e1rio.<\/p>\n\n\n\n<p>Pontos que voc\u00ea deve prestar <strong>muita aten\u00e7\u00e3o:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Entenda as camadas:<\/strong> UI (interface gr\u00e1fica), Data (dados), Dom\u00ednio.<\/li>\n\n\n\n<li><strong>Eventos:<\/strong> vai te poupar muito tempo em seus primeiros prot\u00f3tipos (quando voc\u00ea topar com situa\u00e7\u00f5es do tipo &#8220;por que meus dados s\u00f3 aparecem quando rotaciono o device?&#8221; lembre disto)<\/li>\n\n\n\n<li><strong>Estado:<\/strong> como a interface mant\u00e9m o estado (esta \u00e9 uma das coisas mais dif\u00edceis na minha opini\u00e3o)<\/li>\n<\/ul>\n\n\n\n<p>O treinamento acima \u00e9 demais pra voc\u00ea? Tem um caminho um pouco mais curto mas que pode te ajudar tamb\u00e9m. \u00c9 este link da documenta\u00e7\u00e3o: <strong>Guide to app architecture<\/strong> &#8211; <a href=\"https:\/\/developer.android.com\/topic\/architecture \">https:\/\/developer.android.com\/topic\/architecture <\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Jetpack<\/h3>\n\n\n\n<p>\u00c9 o conjunto de bibliotecas desenvolvidas pelo Google com o objetivo de facilitar a vida do desenvolvedor provendo diversas funcionalidades que podem ser aplicadas tanto em novos projetos quanto pr\u00e9 existentes do Android. Cito os que, para o meu caso, tem sido mais importantes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/developer.android.com\/jetpack\/androidx\/releases\/room\">Room<\/a> &#8211; ORM para persist\u00eancia de dados no SQLite.<\/li>\n\n\n\n<li><a href=\"https:\/\/developer.android.com\/jetpack\/androidx\/releases\/camera\">Camera<\/a> &#8211; para lidar com a c\u00e2mera do celular.<\/li>\n\n\n\n<li><a href=\"https:\/\/developer.android.com\/jetpack\/androidx\/releases\/navigation\">Navigation<\/a> &#8211; biblioteca usada para que voc\u00ea possa implementar a navega\u00e7\u00e3o de uma forma muito f\u00e1cil entre as telas da sua aplica\u00e7\u00e3o.<\/li>\n\n\n\n<li><a href=\"https:\/\/developer.android.com\/jetpack\/androidx\/releases\/hilt\">Hilt<\/a> &#8211; uma implementa\u00e7\u00e3o do padr\u00e3o de inje\u00e7\u00e3o de depend\u00eancias pra Android (pense no Spring pessoal do Java, mas simplificado)<\/li>\n<\/ul>\n\n\n\n<p>O perigo aqui \u00e9 que s\u00e3o <strong>diversas<\/strong> bibliotecas, e voc\u00ea n\u00e3o ter\u00e1 tempo h\u00e1bil para ver todas elas. Ent\u00e3o o que recomendo \u00e9 que voc\u00ea comece pelos links abaixo:<\/p>\n\n\n\n<p><strong>Getting started with Android Jetpack<\/strong> &#8211; <a href=\"https:\/\/developer.android.com\/jetpack\/getting-started \">https:\/\/developer.android.com\/jetpack\/getting-started <\/a>&#8211; vai te mostrar como incluir as bibliotecas no seu projeto e tamb\u00e9m d\u00e1 uma vis\u00e3o geral sobre o Jetpack. Aproveite e navegue pelos links expostos na barra lateral. N\u00e3o precisa se aprofundar, apenas leia o que est\u00e1 aqui (\u00e9 um conte\u00fado bem pequeno).<\/p>\n\n\n\n<p><strong>Navegue pelas bibliotecas<\/strong> &#8211; <a href=\"https:\/\/developer.android.com\/jetpack\/androidx\/explorer?case=data\">https:\/\/developer.android.com\/jetpack\/androidx\/explorer?case=data<\/a> &#8211; Para n\u00e3o ficar preso apenas \u00e0s bibliotecas que mencionei aqui, \u00e9 legal ver a variedade <strong>incr\u00edvel<\/strong> de bibliotecas liberadas pelo Google. Tem biblioteca pra quase tudo aqui.<\/p>\n\n\n\n<p><strong>Dica sobre a documenta\u00e7\u00e3o das bibliotecas:<\/strong> aten\u00e7\u00e3o aos links &#8220;User Guide&#8221; e &#8220;Codelab&#8221; que aparecem no t\u00edtulo de cada biblioteca, tal como no print a seguir:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"266\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/image-1024x266.png\" alt=\"\" class=\"wp-image-4125\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/image-1024x266.png 1024w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/image-300x78.png 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/image-768x200.png 768w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/image.png 1069w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Clique nestes links! S\u00e3o cursos muito bons, pr\u00e1ticos e que mostram como aplicar a biblioteca de uma forma bem f\u00e1cil de entender.<\/p>\n\n\n\n<p><strong>Sobre Java:<\/strong> at\u00e9 onde vi a maior parte das bibliotecas vai funcionar no Java (at\u00e9 por que o Kotlin \u00e9 compat\u00edvel), mas nem sempre. O Compose por exemplo n\u00e3o \u00e9 t\u00e3o simples assim de ser adotado nesta linguagem. De novo: aprenda Kotlin pra prosseguir, \u00e9 importante.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Links para aprofundamento<\/h3>\n\n\n\n<p>Use estes links para se aprofundar em algumas bibliotecas muito importantes do Jetpack.<\/p>\n\n\n\n<p><strong>Codelab do Room<\/strong> &#8211; <a href=\"https:\/\/developer.android.com\/codelabs\/basic-android-kotlin-compose-persisting-data-room\">https:\/\/developer.android.com\/codelabs\/basic-android-kotlin-compose-persisting-data-room<\/a> &#8211; para voc\u00ea aprender como este ORM opera.<\/p>\n\n\n\n<p><strong>Using Hilt in your Android app<\/strong> &#8211; <a href=\"https:\/\/developer.android.com\/codelabs\/android-hilt\">https:\/\/developer.android.com\/codelabs\/android-hilt<\/a> &#8211; conforme sua aplica\u00e7\u00e3o cresce voc\u00ea uma hora ou outra precisar\u00e1 lidar com a complexidade. E o Hilt como container de inje\u00e7\u00e3o de depend\u00eancias pode ajudar HORRORES.<\/p>\n\n\n\n<p><strong>Working with Preferences DataStore &#8211; <\/strong><a href=\"https:\/\/developer.android.com\/codelabs\/android-preferences-datastore#0\">https:\/\/developer.android.com\/codelabs\/android-preferences-datastore#0<\/a> &#8211; para diversas aplica\u00e7\u00f5es o SQLite \u00e9 mais complexo que o necess\u00e1rio. Se voc\u00ea precisa armazenar apenas informa\u00e7\u00f5es simples e n\u00e3o t\u00e3o bem estruturadas, pense no DataStore.<\/p>\n\n\n\n<p><strong>Testando &#8211;<\/strong> <a href=\"https:\/\/developer.android.com\/training\/testing\/fundamentals\">https:\/\/developer.android.com\/training\/testing\/fundamentals<\/a> &#8211; \u00e9 <strong>vital<\/strong> que voc\u00ea aprenda a testar seus projetos. Dica: use os testes para aprender as bibliotecas do Jetpack! Vai te poupar muito tempo e \u00e9 uma ferramenta pedag\u00f3gica bem interessante.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Jetpack Compose<\/h1>\n\n\n\n<figure class=\"wp-block-image alignfull size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"840\" height=\"473\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/jetpack-compose.jpg\" alt=\"\" class=\"wp-image-4126\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/jetpack-compose.jpg 840w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/jetpack-compose-300x169.jpg 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/jetpack-compose-768x432.jpg 768w\" sizes=\"(max-width: 840px) 100vw, 840px\" \/><\/figure>\n\n\n\n<p>Deixei meu favorito para o final: a primeira vez que comecei a brincar com o Jetpack Compose foi meu momento &#8220;eureka&#8221; pro desenvolvimento nativo com Android. Muda bastante o modo como \u00e9 feita a constru\u00e7\u00e3o das nossas interfaces gr\u00e1ficas.<\/p>\n\n\n\n<p>Ah: o Jetpack Compose \u00e9 o toolkit gr\u00e1fico usado para criar interfaces para Android nativo.<\/p>\n\n\n\n<p>At\u00e9 ent\u00e3o n\u00f3s t\u00ednhamos o desenvolvimento do frontend baseado nas Views do Android, que sempre me lembraram muito o <a href=\"https:\/\/learn.microsoft.com\/pt-br\/dotnet\/desktop\/wpf\/xaml\/?view=netdesktop-7.0\">XAML<\/a> da Microsoft, o <a href=\"https:\/\/pt.wikipedia.org\/wiki\/JavaServer_Faces\">JSF<\/a> do Java ou mesmo o HTML.  Voc\u00ea essencialmente cria suas p\u00e1ginas usando XML ou um editor visual e faz todo o desenvolvimento baseando-se no modelo baseado em eventos (&#8220;ao clicar&#8221;, &#8220;ao pressionar&#8221;, etc).<\/p>\n\n\n\n<p>\u00c9 um modelo bacana pra se trabalhar: e o fato de existir um editor visual ajuda bastante. Tenho uma not\u00edcia ruim aqui: n\u00e3o temos este editor visual com o Compose, mas sim um outro modelo de desenvolvimento, declarativo, baseado em estado &#8220;imut\u00e1vel&#8221; e muito, muito parecido com o que temos no desenvolvimento com <a href=\"https:\/\/react.dev\/\">React<\/a> (especialmente o <a href=\"https:\/\/reactnative.dev\/\">Native<\/a>), <a href=\"https:\/\/flutter.dev\/\">Flutter<\/a> ou<a href=\"https:\/\/developer.apple.com\/xcode\/swiftui\/\"> Swift UI<\/a>. <\/p>\n\n\n\n<p>Se voc\u00ea j\u00e1 tem experi\u00eancia em qualquer uma destas ferramentas acima o Compose vai te parecer bastante familiar. Ali\u00e1s, recomendo que voc\u00ea leia este texto (<a href=\"https:\/\/react.dev\/learn\/thinking-in-react\">Thinking in React<\/a>) pois as ideias ali descritas s\u00e3o <strong>muito<\/strong> parecidas com as que ser\u00e3o expostas no Jetpack Compose. N\u00e3o \u00e9 por acaso que a pr\u00f3pria equipe do Google lan\u00e7ou sua &#8220;vers\u00e3o&#8221; deste texto: Thinking in Compose (<a href=\"https:\/\/developer.android.com\/jetpack\/compose\/mental-model\">https:\/\/developer.android.com\/jetpack\/compose\/mental-model<\/a>). <strong>Leia antes de come\u00e7ar.<\/strong><\/p>\n\n\n\n<p>Um bom caminho pra come\u00e7ar s\u00e3o os cursos abaixo.<\/p>\n\n\n\n<p><strong>Jetpack Compose for Android Developers<\/strong> &#8211; <a href=\"https:\/\/developer.android.com\/courses\/jetpack-compose\/course\">https:\/\/developer.android.com\/courses\/jetpack-compose\/course<\/a><\/p>\n\n\n\n<p>Este treinamento \u00e9 composto por trilhas. Fa\u00e7a ao menos a primeira: <a href=\"https:\/\/developer.android.com\/courses\/pathways\/jetpack-compose-for-android-developers-1\">Compose Essentials<\/a>. Voc\u00ea ir\u00e1 adquirir o &#8220;feeling&#8221; sobre como trabalhar com o Compose para coisas bem simples. Repito: <strong>coisas bem simples.<\/strong><\/p>\n\n\n\n<p>Na sequ\u00eancia siga para as outras trilhas:<\/p>\n\n\n\n<p><a href=\"https:\/\/developer.android.com\/courses\/pathways\/jetpack-compose-for-android-developers-2\">Layouts, Theming and Animation<\/a> &#8211; aqui voc\u00ea vai aprender como deixar sua aplica\u00e7\u00e3o bonita. <\/p>\n\n\n\n<p><a href=\"https:\/\/developer.android.com\/courses\/pathways\/jetpack-compose-for-android-developers-3\">Architecture and State<\/a> &#8211; de longe na minha opini\u00e3o a <strong>parte mais dif\u00edcil do aprendizado<\/strong>. E aqui voc\u00ea vai me agradecer por ter lhe pedido para que antes de chegar aqui lesse um pouco sobre arquitetura. Voc\u00ea ir\u00e1 aprender como as aplica\u00e7\u00f5es gerenciam seu estado (isto \u00e9, as &#8220;vari\u00e1veis&#8221; por tr\u00e1s de cada view). Fa\u00e7a e refa\u00e7a quantas vezes for necess\u00e1rio esta trilha at\u00e9 que tudo fique claro.<\/p>\n\n\n\n<p><strong>Cuidado: <\/strong>este curso \u00e9 de 2022 e h\u00e1 alguns pontos desatualizados nele. Especialmente no que diz respeito ao uso do Android Studio.<\/p>\n\n\n\n<p>\u00c9 ali que voc\u00ea aprender\u00e1 o que s\u00e3o os view models, que s\u00e3o um componente essencial da arquitetura. Se voc\u00ea j\u00e1 conhece o padr\u00e3o de projeto MVC, pense nos view models como o &#8220;Controlador&#8221; da hist\u00f3ria.<\/p>\n\n\n\n<p>Lembra l\u00e1 no in\u00edcio quando falei pra voc\u00ea come\u00e7ar pelo Kotlin? Aquele esfor\u00e7o se pagar\u00e1 muito aqui.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">O &#8220;outro&#8221; treinamento (o &#8220;grand\u00e3o&#8221;)<\/h2>\n\n\n\n<figure class=\"wp-block-image alignfull size-full coblocks-animate\" data-coblocks-animation=\"zoomIn\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"512\" src=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/alerta.png\" alt=\"\" class=\"wp-image-4118\" srcset=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/alerta.png 512w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/alerta-300x300.png 300w, https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/alerta-150x150.png 150w\" sizes=\"(max-width: 512px) 100vw, 512px\" \/><\/figure>\n\n\n\n<p>H\u00e1 um outro treinamento online que voc\u00ea tamb\u00e9m pode tirar proveito: &#8220;<strong>Android Basics with Compose<\/strong>&#8221; &#8211;<a href=\" https:\/\/developer.android.com\/courses\/android-basics-compose\/course\"> https:\/\/developer.android.com\/courses\/android-basics-compose\/course<\/a><\/p>\n\n\n\n<p>Este \u00e9 o treinamento completo: vai desde o b\u00e1sico do Kotlin, passa pelo Compose, lida com as camadas de dados, ensina a fazer requisi\u00e7\u00f5es \u00e0 Internet (REST), como lidar com execu\u00e7\u00e3o em segundo plano e at\u00e9 mesmo como integrar projetos que usam Views (legado) com Compose.<\/p>\n\n\n\n<p>Se voc\u00ea tiver muita paci\u00eancia e seguir apenas este treinamento j\u00e1 te d\u00e1 um belo passo a frente. Por que n\u00e3o falei dele antes? Por que quis te dar alternativas. Pense neste como o &#8220;resum\u00e3o da obra&#8221;.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conte\u00fado adicional sobre o Compose<\/h2>\n\n\n\n<p>Se voc\u00ea realizou o treinamento acima vai ser importante voc\u00ea se aprofundar em alguns temas. Seguem aqui mais alguns links para que voc\u00ea possa se aprofundar.<\/p>\n\n\n\n<p><strong>Codelab do Navigation<\/strong> &#8211; <a href=\"https:\/\/developer.android.com\/codelabs\/android-navigation\">https:\/\/developer.android.com\/codelabs\/android-navigation<\/a> &#8211; para que voc\u00ea possa se focar neste ponto que \u00e9 muito importante.<\/p>\n\n\n\n<p><strong>Material Components and Layouts &#8211; <\/strong><a href=\"https:\/\/developer.android.com\/jetpack\/compose\/layouts\/material\">https:\/\/developer.android.com\/jetpack\/compose\/layouts\/material<\/a> &#8211; Material \u00e9 a linguagem de design do Google, e neste link voc\u00ea ir\u00e1 aprender a como come\u00e7ar a tirar proveito dele. Muita aten\u00e7\u00e3o ao uso do &#8220;scaffolding&#8221;, que pode poupar MUITO tempo no desenvolvimento.<\/p>\n\n\n\n<p><strong>ViewModel Overview<\/strong> &#8211; <a href=\"https:\/\/developer.android.com\/topic\/libraries\/architecture\/viewmodel\">https:\/\/developer.android.com\/topic\/libraries\/architecture\/viewmodel<\/a> &#8211; digo e repito: minha maior dificuldade foi entender o conceito de estado em aplica\u00e7\u00f5es Android. Quanto mais voc\u00ea ler sobre o ViewModel, melhor. E este texto pode te ajudar a entender os conceitos por tr\u00e1s deste elemento.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">E isto \u00e9 s\u00f3 o come\u00e7o<\/h1>\n\n\n\n<p>Espero que este guia lhe seja \u00fatil tal como tem sido para mim e nossa equipe. De tempos em tempos voltarei a este post para atualizar os links caso mudem ou para adicionar mais conte\u00fados.<\/p>\n\n\n\n<p>E meus pr\u00f3ximos posts aqui ser\u00e3o sobre como tem sido nossa experi\u00eancia no desenvolvimento deste tipo de aplica\u00e7\u00e3o e por que tem nos parecido t\u00e3o interessante. At\u00e9 l\u00e1!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">PS: &#8220;one more thing&#8221;<\/h2>\n\n\n\n<p>Lembra quando mencionei o &#8220;Kotlin Multiplatform&#8221;? Ent\u00e3o: existe tamb\u00e9m o Compose Multiplatform, que permite usar a mesma base de c\u00f3digo para Android, iOS, desktop e web. Ainda em desenvolvimento, mas <strong>bastante<\/strong> promissor. <a href=\"https:\/\/www.jetbrains.com\/lp\/compose-multiplatform\/ \">https:\/\/www.jetbrains.com\/lp\/compose-multiplatform\/ <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Um plano de estudos para quem quer aprender desenvolvimento nativo para Android usando apenas material gratuito da internet.<\/p>\n","protected":false},"author":1,"featured_media":4115,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-gradient":""}},"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[153,136,154],"tags":[155,160,158,156,157,159],"class_list":["post-4113","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-android","category-arquitetura-de-software","category-desenvolvimento-nativo","tag-android","tag-compose","tag-desenvolvimento-nativo","tag-jetpack","tag-jetpack-compose","tag-native"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Desenvolvimento Android nativo com Jetpack Compose - Um plano de estudos - \/dev\/Kico<\/title>\n<meta name=\"description\" content=\"Um plano de estudo para aprender Android nativo com Jetpack Compose usando apenas material gratuito na Internet!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/devkico.itexto.com.br\/?p=4113\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Um guia para aprender desenvolvimento nativo para Android com Jetpack Compose\" \/>\n<meta property=\"og:description\" content=\"Um plano de estudo para aprender Android nativo com Jetpack Compose usando apenas material gratuito na Internet!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/devkico.itexto.com.br\/?p=4113\" \/>\n<meta property=\"og:site_name\" content=\"\/dev\/Kico\" \/>\n<meta property=\"article:published_time\" content=\"2023-06-08T23:32:40+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-08T23:45:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/capa.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"840\" \/>\n\t<meta property=\"og:image:height\" content=\"473\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Kico (Henrique Lobo Weissmann)\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Um guia para aprender a desenvolver para Android nativo com Jetpack Compose\" \/>\n<meta name=\"twitter:description\" content=\"Um plano de estudo para aprender Android nativo com Jetpack Compose usando apenas material gratuito na Internet!\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/capa.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@loboweissmann\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Kico (Henrique Lobo Weissmann)\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=4113\",\"url\":\"https:\/\/devkico.itexto.com.br\/?p=4113\",\"name\":\"Desenvolvimento Android nativo com Jetpack Compose - Um plano de estudos - \/dev\/Kico\",\"isPartOf\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=4113#primaryimage\"},\"image\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=4113#primaryimage\"},\"thumbnailUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/capa.jpg\",\"datePublished\":\"2023-06-08T23:32:40+00:00\",\"dateModified\":\"2023-06-08T23:45:30+00:00\",\"author\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\"},\"description\":\"Um plano de estudo para aprender Android nativo com Jetpack Compose usando apenas material gratuito na Internet!\",\"breadcrumb\":{\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=4113#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/devkico.itexto.com.br\/?p=4113\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=4113#primaryimage\",\"url\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/capa.jpg\",\"contentUrl\":\"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/capa.jpg\",\"width\":840,\"height\":473},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/devkico.itexto.com.br\/?p=4113#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/devkico.itexto.com.br\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Desenvolvimento Android nativo com Jetpack Compose &#8211; Um plano de estudos\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#website\",\"url\":\"https:\/\/devkico.itexto.com.br\/\",\"name\":\"\/dev\/Kico\",\"description\":\"Desenvolvendo software\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/devkico.itexto.com.br\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7\",\"name\":\"Kico (Henrique Lobo Weissmann)\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g\",\"caption\":\"Kico (Henrique Lobo Weissmann)\"},\"sameAs\":[\"https:\/\/x.com\/loboweissmann\"],\"url\":\"https:\/\/devkico.itexto.com.br\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Desenvolvimento Android nativo com Jetpack Compose - Um plano de estudos - \/dev\/Kico","description":"Um plano de estudo para aprender Android nativo com Jetpack Compose usando apenas material gratuito na Internet!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/devkico.itexto.com.br\/?p=4113","og_locale":"pt_BR","og_type":"article","og_title":"Um guia para aprender desenvolvimento nativo para Android com Jetpack Compose","og_description":"Um plano de estudo para aprender Android nativo com Jetpack Compose usando apenas material gratuito na Internet!","og_url":"https:\/\/devkico.itexto.com.br\/?p=4113","og_site_name":"\/dev\/Kico","article_published_time":"2023-06-08T23:32:40+00:00","article_modified_time":"2023-06-08T23:45:30+00:00","og_image":[{"width":840,"height":473,"url":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/capa.jpg","type":"image\/jpeg"}],"author":"Kico (Henrique Lobo Weissmann)","twitter_card":"summary_large_image","twitter_title":"Um guia para aprender a desenvolver para Android nativo com Jetpack Compose","twitter_description":"Um plano de estudo para aprender Android nativo com Jetpack Compose usando apenas material gratuito na Internet!","twitter_image":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/capa.jpg","twitter_creator":"@loboweissmann","twitter_misc":{"Escrito por":"Kico (Henrique Lobo Weissmann)","Est. tempo de leitura":"17 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/devkico.itexto.com.br\/?p=4113","url":"https:\/\/devkico.itexto.com.br\/?p=4113","name":"Desenvolvimento Android nativo com Jetpack Compose - Um plano de estudos - \/dev\/Kico","isPartOf":{"@id":"https:\/\/devkico.itexto.com.br\/#website"},"primaryImageOfPage":{"@id":"https:\/\/devkico.itexto.com.br\/?p=4113#primaryimage"},"image":{"@id":"https:\/\/devkico.itexto.com.br\/?p=4113#primaryimage"},"thumbnailUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/capa.jpg","datePublished":"2023-06-08T23:32:40+00:00","dateModified":"2023-06-08T23:45:30+00:00","author":{"@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7"},"description":"Um plano de estudo para aprender Android nativo com Jetpack Compose usando apenas material gratuito na Internet!","breadcrumb":{"@id":"https:\/\/devkico.itexto.com.br\/?p=4113#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/devkico.itexto.com.br\/?p=4113"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/?p=4113#primaryimage","url":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/capa.jpg","contentUrl":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/capa.jpg","width":840,"height":473},{"@type":"BreadcrumbList","@id":"https:\/\/devkico.itexto.com.br\/?p=4113#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/devkico.itexto.com.br\/"},{"@type":"ListItem","position":2,"name":"Desenvolvimento Android nativo com Jetpack Compose &#8211; Um plano de estudos"}]},{"@type":"WebSite","@id":"https:\/\/devkico.itexto.com.br\/#website","url":"https:\/\/devkico.itexto.com.br\/","name":"\/dev\/Kico","description":"Desenvolvendo software","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/devkico.itexto.com.br\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"pt-BR"},{"@type":"Person","@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/502ab8892631bb005d6da2269fe5a3a7","name":"Kico (Henrique Lobo Weissmann)","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/devkico.itexto.com.br\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/dd6973d86a689bc63122b2e603f25be3?s=96&d=mm&r=g","caption":"Kico (Henrique Lobo Weissmann)"},"sameAs":["https:\/\/x.com\/loboweissmann"],"url":"https:\/\/devkico.itexto.com.br\/?author=1"}]}},"jetpack_featured_media_url":"https:\/\/devkico.itexto.com.br\/wp-content\/uploads\/2023\/06\/capa.jpg","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/4113"}],"collection":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=4113"}],"version-history":[{"count":9,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/4113\/revisions"}],"predecessor-version":[{"id":4130,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/posts\/4113\/revisions\/4130"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=\/wp\/v2\/media\/4115"}],"wp:attachment":[{"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=4113"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=4113"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devkico.itexto.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=4113"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}