Os super-heróis são conhecidos por usar capas, combater vilões e sempre lutar para proteger o mundo contra o mal. Também existem os super-heróis que, silenciosamente, optam por usar seus superpoderes para explicar tecnologias para novos usuários, manter fóruns de comunidades, escrever postagens de blog, palestrar em eventos, liderar séries de vídeos, criar demonstrações, compartilhar amostras de código e muito mais. Tudo isso para ajudar outros desenvolvedores a serem bem-sucedidos, com o aprendizado de novas habilidades, a entrega de apps melhores e o avanço de suas carreiras. Na Google, nos referimos a essa segunda categoria de super-heróis como Especialistas do Google Developers, ou “GDEs”, na sigla em inglês.
O programa Google Developer Experts é uma rede global de especialistas em tecnologia altamente experientes, líderes de pensamento e influenciadores que dão suporte ativamente a comunidades de desenvolvedores em todo o mundo, compartilhando seu conhecimento e entusiasmo em uma extensa gama de tópicos, do Android até o Angular, o Google Assistant e o Google Cloud e, obviamente, o Google Workspace. Observe que todos os GDEs são voluntários que não só doam seu tempo para ajudar outros desenvolvedores, mas também ajudam a aprimorar nossos produtos oferecendo feedbacks valiosos, testando extensamente os novos recursos, muitas vezes antes do lançamento, e ainda ajudando a expandir casos de uso e segmentos.
Uma vez que a comunidade de GDEs do Google Workspace inclui membros de mais de uma dúzia de países, queríamos perguntar aos desenvolvedores especialistas o que é mais empolgante para eles na criação no Google Workspace e por que eles fazem o que fazem como nossos super-heróis, que ajudam outras pessoas a melhorarem suas habilidades de desenvolvimento do Google Workspace. Veja aqui o que alguns desses especialistas disseram:
“O Workspace me permitiu criar soluções inovadoras para fluxos de trabalho de professores que economizam tempo significativo e/ou permitem que eles usem o Workspace de forma mais eficiente com seus alunos.” - Alice Keeler (@alicekeeler), Kansas, EUA
- Alice Keeler (@alicekeeler), Kansas, EUA
“Não há uma curva de aprendizado para os usuários e é difícil pensar em algum problema que não se possa resolver com o Google Apps Script.” - Amit Agarwal (@labnol), Índia
- Amit Agarwal (@labnol), Índia
“A acessibilidade e a ampla presença do Google Workspace e, mais especificamente, a personalização com o Apps Script, me mantêm trabalhando (e empregado!) como desenvolvedor autônomo do Apps Script desde 2013!” - Andrew Roberts (@andrewroberts6), Llanwrda, País de Gales, RU
- Andrew Roberts (@andrewroberts6), Llanwrda, País de Gales, RU
“Há duas coisas que eu adoro no Google Workspace. Primeiro, tudo fica na nuvem, por isso ele é acessível em qualquer lugar e pode ser facilmente compartilhado. Segundo, as integrações das diferentes ferramentas do Workspace e as ferramentas de terceiros são superfácies de usar. Meus dados podem se movimentar automaticamente entre vários aplicativos diferentes, e isso me poupa dos tediosos fluxos de trabalho manuais.” - Ben Collins (@benlcollins), Costa Leste, EUA
- Ben Collins (@benlcollins), Costa Leste, EUA
“Com o Workspace, qualquer pessoa que tenha uma ideia pode criar soluções impactantes para solucionar problemas, e eu adoro mostrar aos iniciantes com pouca ou nenhuma experiência em codificação que eles podem criar soluções digitais!” - Cleo Espiritu (@cinfourthirds), Canadá
- Cleo Espiritu (@cinfourthirds), Canadá
“O que eu adoro no Google Workspace é o Google Apps Script. Desde 2009, ele é uma plataforma 100% sem servidor para automação, extensão e integração. Já desenvolvi muitos aplicativos pessoais e profissionais.” - Ivan Kutil (@ivankutil), Praga, República Tcheca
- Ivan Kutil (@ivankutil), Praga, República Tcheca
“Com os Add-Ons e o Apps Script, o Google Workspace vai muito além para permitir uma experiência personalizada nas mais comuns ferramentas profissionais. E ele as torna acessíveis em qualquer dispositivo que eu esteja utilizando.” - Jeremy Glassenberg (@jglassenberg), São Francisco, Califórnia
- Jeremy Glassenberg (@jglassenberg), São Francisco, Califórnia
“Com o Google Workspace, todos podemos ficar mais inteligentes e produtivos. A alegria de desenvolver no Google Workspace é que, muitas vezes, soluções poderosas podem ser criadas com duas linhas de código e, cada vez mais, sem nenhum código.” - Martin Hawksey (@mhawksey), Escócia, RU
- Martin Hawksey (@mhawksey), Escócia, RU
“Eu uso o Workspace pela capacidade de fazer coisas incríveis com o Apps Script quando há algo que não consigo fazer apenas com Planilhas, Formulários, Documentos e Apresentações.” - Max Brawer (@brawermd), Nova York, Nova York
- Max Brawer (@brawermd), Nova York, Nova York
“O que eu mais gosto é da capacidade de criar soluções que aumentam a colaboração. A estrutura aberta permite adicionar necessidades personalizadas. Uma interface simples e intuitiva; sem necessidade de mudanças, basta começar a criar!" - Niek Waarbroek (niekwaarbroek), Países Baixos
- Niek Waarbroek (niekwaarbroek), Países Baixos
“O Apps Script é a "cola" que une muitos serviços do Google para levar maravilhosas automações para seus fluxos de trabalho de dados pessoais, profissionais ou escolares. A qualquer momento, em qualquer lugar, tudo na nuvem. A rapidez e a facilidade de uso fazem dele a minha primeira opção para aproveitar todo o potencial do Google Workspace.” - Pablo Felip Monferrer (@pfelipm), Castelló de la Plana, Espanha
- Pablo Felip Monferrer (@pfelipm), Castelló de la Plana, Espanha
“Sempre fui bom com as fórmulas de planilha. Mas, mesmo sendo uma pessoa sem grandes conhecimentos técnicos ou de codificação, as ferramentas do Workspace tornaram muito mais simples e prático fazer as conexões entre elas e criar como uma equipe de engenharia ou produto faria. Isso me inspirou a conectar diferentes ferramentas de SaaS que têm APIs e criar meu próprio conjunto de integrações.” - Sourabh Choraria (@schoraria911), Bangalore, Índia
- Sourabh Choraria (@schoraria911), Bangalore, Índia
“Uso o Workspace porque ele é a única solução nos últimos 10 anos que me permite acessar meus documentos em qualquer lugar e me oferece uma interface de desenvolvimento fácil de usar para a API do Google com o Apps Script.” - Stéphane Giron (@st3phcloud), Lyon, França
- Stéphane Giron (@st3phcloud), Lyon, França
“Eu uso o Google Workspace porque a colaboração, as comunicações, as integrações e os fluxos de trabalho são ótimos. Recentemente, liderei nossa equipe na criação de uma solução para um cliente de uma barra de mensagens sobre COVID-19 no Gmail que utilizava o Planilhas, o Apps Script, o Firebase Notificações e as extensões do Chrome. Tudo é possível!” - Steve Webster (@SteveWebster22), Lakeland, Flórida
- Steve Webster (@SteveWebster22), Lakeland, Flórida
“O Workspace pode reduzir os custos de processo nos diversos trabalhos com o controle automático de aplicativos. Em especial, quando forem utilizados o Google Apps Script e as APIs, a possibilidade de uma eficiência ainda mais alta será infinita. Acredito que isso será um sopro de ar fresco em nossa vida diária.” - Kanshi Tanaike (@tanaikech), Osaka, Japão
- Kanshi Tanaike (@tanaikech), Osaka, Japão
“Porque podemos automatizar nosso trabalho com o Apps Script.” - Yuki Tanabe (@tanabee_en), Tóquio, Japão
- Yuki Tanabe (@tanabee_en), Tóquio, Japão
Se você tem interesse em se conectar e saber mais sobre o que os GDEs estão falando ou no que estão trabalhando, siga-os nos canais sociais. A maioria dos GDEs é bastante ativa no compartilhamento de dicas diárias, eventos ou projetos totalmente em código aberto. Use os links acima, nos perfis dos GDEs, ou consulte o diretório completo de GDEs para ver especialistas em todas as tecnologias do Google para desenvolvedores.
A comunidade de GDEs do Google Workspace também tem alguns recursos muito úteis que vale a pena destacar aqui:
O BigQuery oferece a capacidade de importar rapidamente um arquivo CSV por meio da interface de usuário da Web e da linha de comando:
01 bq load --source_format CSV --autodetect \ 02 mydataset.mytable ./myfile.csv0
Na verdade, se você tentar abrir esse arquivo com o BigQuery:
01 bq load --source_format CSV --skip_leading_rows 1 \ 02 advdata.airbnb_nyc_2019 AB_NYC_2019.csv \ 03 id:string,name:string,host_id:string,host_name:string,neighbourhood_group:string,neighbourhood:string,latitude:float,longitude:float,room_type:string,price:float,minimum_nights:integer,number_of_reviews:integer,last_review:string,reviews_per_month:float,calculated_host_listings_count:integer,availability_365:integer
receberá erros como:
01 Error while reading data, error message: Error detected while 02 parsing row starting at position: 104942. Error: Missing close 03 double quote (") character.
Isso ocorre porque uma linha do arquivo é dividida em várias linhas de texto. Portanto, as aspas de abertura em uma linha não têm um fechamento. Esse não é um problema fácil de resolver. Muitas ferramentas têm dificuldades com arquivos CSV que contêm quebras de linha dentro de células.
O Planilhas Google, por outro lado, tem um mecanismo de importação de CSV muito melhor. Você abre uma planilha Google, importa o arquivo CSV e voilà…
O bacana é que, com uma planilha Google, você pode fazer a preparação interativa dos dados na planilha antes de carregá-la no BigQuery.
Comece excluindo a primeira linha (o cabeçalho) da planilha. Não queremos que ela faça parte dos dados.
Uma vez no Planilhas Google, podemos usar um truquezinho útil: o BigQuery consegue consultar diretamente as Planilhas Google! Para isso, definimos a planilha Google como uma tabela no BigQuery:
Etapas na IU do BigQuery
01 id:string,name:string,host_id:string,host_name:string,neighbourhood_group:string,neighbourhood:string,latitude:float,longitude:float,room_type:string,price:float,minimum_nights:integer,number_of_reviews:integer,last_review:string,reviews_per_month:float,calculated_host_listings_count:integer,availability_365:integer
Essa tabela não copia os dados da planilha. Ela consulta a planilha ao vivo.
Então, vamos copiar os dados da forma como estão para o BigQuery (é claro que podemos fazer também algumas transformações):
01 CREATE OR REPLACE TABLE advdata.airbnb_nyc_2019 AS 02 SELECT * FROM advdata.airbnb_raw_googlesheet
Você pode automatizar essas etapas:
Para importar arquivos CSV complexos para o BigQuery, crie um pipeline de ELT usando o Planilhas Google como intermediário. Com isso, você pode lidar com arquivos CSV com quebras de linha e outros caracteres especiais nas colunas. Divirta-se!
Artigo relacionado
Nossa nova série de blogs fornece uma visão geral do que é possível com o BigQuery.
Este é o Now in Android, seu guia atualizado de novidades e fatos importantes do mundo de desenvolvimento no Android.
Já faz algumas semanas que o Now in Android anterior foi publicado, antes das festas de final de ano. Vamos ver o que aconteceu no universo Android nesse período.
A série MAD Skills continua rolando, com conteúdo técnico sobre Modern Android Development.
A série sobre o uso do Kotlin com as APIs do Jetpack continua fervendo. Desde os episódios iniciais cobertos da última vez, tivemos mais três. Esses episódios oferecem informações sobre o uso das bibliotecas Room e WorkManager em geral, mas também oferecem orientação específica sobre o uso dos recursos do Kotlin, como as corrotinas, para simplificar tarefas.
Nesse episódio, Florina Muntenescu mostra como usar e testar as APIs Room do Kotlin para seus requisitos de armazenamento de banco de dados local.
Ou em formato de artigo:
Using and testing Room Kotlin APIs
Using WorkManager Kotlin APIsDesta vez, Florina mostra como usar o WorkManager para programar trabalho assíncrono, seja imediatamente ou de forma adiada:
WorkManager — Kotlin APIs
Community Tip: Kotlin para agilidade e qualidade no desenvolvimentoMagda Miu, especialista do Google Developers (GDE) para Android, explica como a equipe dela utiliza o Kotlin para escrever códigos mais simples e de manutenção mais fácil para extensões do fornecedor CameraX.
Finalmente, ainda esta semana, temos mais uma sessão de Perguntas e respostas com transmissão ao vivo para concluir a série sobre Kotlin e Jetpack. A sessão acontece na quinta-feira, às 10h (horário do Pacífico). Talvez ela já tenha acontecido quando você estiver lendo isto, mas sempre é possível assistir à gravação para ouvir a discussão e as respostas às perguntas que foram feitas.
Não deixe de conferir na próxima semana, quando daremos início a uma série MAD Skills novinha. Para ver o conteúdo atual, não deixe de conferir a playlist do MAD Skills no YouTube, os artigos no Medium ou esta página de destino útil, a qual fornece acesso a todo o conteúdo.
O curso Android Basics in Kotlin já tem mais uma unidade disponível.
Unit 3: NavigationEssa unidade oferece tutoriais e amostras sobre o componente de Navegação, além de outras APIs nas bibliotecas de Componentes da arquitetura do Android.
Isai Damier publicou um novo artigo sobre criptografia, autenticação e segurança. Ele fala sobre uma grande parte da interessante história da criptografia e explica por que uma solução segura que envolva criptografia também deve, geralmente, envolver a autenticação biométrica.
Improve your app’s cryptography, from message authentication to user presence
Florina Muntenescu publicou um artigo sobre os ganhos de produtividade com o uso do Kotlin. Se você já escreve muitos códigos em Kotlin, provavelmente já sabe disso. Mas, se está se perguntando se deve começar a se aprofundar no uso do Kotlin para seu trabalho ou se está tentando convencer outras pessoas de seu projeto a fazer isso, este artigo traz detalhes concretos que podem ajudar você a defender sua ideia.
More productivity with Kotlin
Meghan Mehta postou o terceiro artigo de sua atual série sobre o RecyclerView. Um dos requisitos mais comuns para o RecyclerView é o tratamento de cliques de usuário. Bom, clicar em um item de uma lista deveria… fazer algo, certo? Neste artigo, Meghan mostra uma forma recomendada de tratar essa funcionalidade.
Handling click events in RecyclerView
Desde o último Now in Android, publicamos outro episódio do Android Developers Backstage. Confira no link abaixo ou acesse seu cliente de podcast favorito:
Para terminar o ano (e que ano!), Tor Norbye, Romain Guy e eu gravamos um episódio cheio de anfitriões (e sem convidados?), no qual conversamos sobre algumas das coisas que aconteceram no ano passado, quando todos tivemos que descobrir formas diferentes de trabalhar, e também sobre alguns desenvolvimentos recentes nas ferramentas e no espaço de plataforma do Android.
Episódio 154: It’s a Wrap!
Isso é tudo, por enquanto. Então, acesse o MAD para ver mais conteúdo relacionado ao Kotlin/Jetpack. Faça um curso sobre Navegação. Leia alguns artigos sobre segurança, produtividade do Kotlin e RecyclerView. Ouça o podcast do ADB mais recente. Em breve, voltaremos com a próxima atualização do universo dos desenvolvedores Android.
A série MAD Skills continua rolando, com novo conteúdo técnico sobre Modern Android Development.
A série sobre App Bundles terminou com uma dica da desenvolvedora especialista da Google, Angélica Oliveira e com uma sessão de Perguntas e respostas ao vivo e gravada comigo (fazendo as perguntas) e com Ben Weiss, Wojtek Kaliciński e Iurii Makhno (fornecendo as respostas). Você também pode encontrar todos os episódios sobre App Bundles (em formato de vídeo e artigo) nos links do blog de encerramento:
MAD Skills - Become an Android App Bundle expert
Na semana passada, o MAD Skills apresentou uma nova série sobre componentes do Material Design, a biblioteca que simplifica a criação de aplicativos utilizando as diretrizes do Material Design.
O primeiro episódio foi o de Nick Butcher, sobre por que recomendamos que os desenvolvedores Android usem os componentes do Material Design. O vídeo inclui uma visão geral dos vários itens oferecidos pelo MDC, incluindo suporte a temas, transições integradas e componentes padrão no estilo do Material:
Esse conteúdo também foi abordado em um artigo anterior:
We Recommend Material Design Components
Em seguida, Nick Rout postou um episódio sobre os temas do Material, detalhando a amostra de projeto MaterialThemeBuilder para demonstrar o uso e a personalização de temas do Material:
Além do vídeo, você pode conferir também os artigos recentes sobre os temas do MDC para cor, tipografia e forma.
Esta semana, Chris Banes postou o terceiro episódio sobre a criação de um tema escuro com o MDC utilizando o recurso Force Dark do Android 10 e o tema DayNight do MDC.
Recentemente, Chris também publicou esse conteúdo em formato de artigo:
Dark Theme with MDC
Temos mais conteúdo sobre o MDC chegando esta semana, além de outra sessão de perguntas e respostas ao vivo, na próxima quinta-feira. Fique ligado na playlist do MDC para saber mais detalhes.
Para ver o conteúdo atual do MAD, não deixe de conferir a playlist do MAD Skills no YouTube, os artigos no Medium ou esta página de destino útil, que fornece acesso a todo o conteúdo.
No final de 2021, haverá requisitos de nível de API de destino (para apps novos e atualizados) e App Bundles. Hoi Lam fez uma postagem de blog com todos os detalhes. Resumidamente:
Agosto de 2021:
Novembro de 2021:
Novos requisitos de Android App Bundle e nível de API de destino em 2021
Os fragmentos fornecem um elemento arquitetônico importante para desenvolvedores de IUs, permitindo gerenciar blocos menores da IU de um app de forma autocontida. Seja com o uso da Navegação com fragmentos ou apenas de fragmentos, vale a pena saber como utilizá-los melhor nos apps. Sabemos como uma documentação completa e atualizada é importante para compreender como utilizar ferramentas e APIs. Embora as APIs obsoletas sejam uma indicação do que deve ser evitado, é a documentação que precisa apontar o caminho certo e explicar as práticas recomendadas.
Por isso, a equipe reescreveu quase toda a documentação sobre fragmentos, oferecendo orientações mais claras e atualizadas sobre vários aspectos dos fragmentos, incluindo ciclos de vida, estado, testes e muito mais. Confira aqui os documentos mais recentes (incluindo as subseções dos links a seguir):
Fragmentos | Android Developers
Ian Lake, que corrigiu e aprimorou os fragmentos no AndroidX, anotou essas mudanças de documentação neste feed do Twitter.
Também há um conjunto totalmente novo de documentos sobre o fluxo Kotlin, com informações sobre tudo, desde os conceitos básicos do uso do fluxo até os testes das novas APIs StateFlow e SharedFlow. Não deixe de conferir também o vídeo sobre o uso do fluxo (que será discutido a seguir).
Fluxos Kotlin | Android Developers
Na semana passada, postei um artigo sobre como automatizar alguns aspectos do desempenho da inicialização de aplicativos. Estive analisando o desempenho da inicialização em geral e queria encontrar uma forma automatizada e razoável de determinar a duração da inicialização para várias execuções consecutivas. Publiquei minha abordagem para todos os que tenham o mesmo interesse em testes de desempenho de inicialização.
Testing App Startup Performance
Em seu artigo, Migrating from Dagger to Hilt, Manuel Vivo apresenta a seguinte pergunta: “Vale a pena migrar do Dagger para o Hilt?” (alerta de spoiler: “Provavelmente… mas isso depende da situação”).
O artigo aborda alguns dos motivos importantes para se considerar a migração, incluindo testes de APIs, consistência e integração às extensões do AndroidX.
Migrating from Dagger to Hilt — Is it worth it?
Falando em Hilt, Filip Stanis postou este artigo para ajudar os desenvolvedores a dar os primeiros passos com o Hilt, mesmo que eles não tenham experiência anterior em injeção de dependências nem no Dagger. Então, se tudo isso é novidade para você, continue lendo.
Embora o título indique que o artigo é destinado aos desenvolvedores Kotlin, isso vale mais para os snippets de código do artigo. As abordagens e técnicas gerais do artigo também são aplicáveis aos desenvolvedores que utilizam a linguagem de programação Java.
A pragmatic guide to Hilt with Kotlin
Manuel Vivo postou um novo vídeo da série Vocabulário do Kotlin que discute o uso dos fluxos do Kotlin para a emissão de um stream de dados. Ele complementa seu vídeo anterior, The ABC of Coroutines, portanto, talvez você deva assistir a ele primeiro para… entrar no fluxo.
David Winer publicou um blog que fala sobre as propriedades sintéticas do Kotlin e também sobre a vinculação de visualizações (ambos mecanismos para eliminar aquelas incômodas chamadas a findViewById() no código). O artigo diz que o uso das propriedades sintéticas será suspenso em uma versão futura do plug-in do Kotlin (pelos motivos detalhados no artigo). O texto também discute a extensão @Parcelize, que continuará sendo recomendada e suportada.
O futuro do Android Kotlin Extensions
Houve muitas mudanças nas versões recentes do Android relacionadas à proteção de dados de usuários e ao aumento do controle dos usuários e da transparência sobre como os dados deles são acessados. Uma das principais áreas de foco foi a localização, já que talvez os usuários não queiram que os aplicativos acessem esses dados e prefiram controlar esse acesso com bastante cautela.
Nessa linha, a política do Google Play em breve exigirá que os apps que precisem de acesso à localização durante sua execução em segundo plano solicitem permissão (da Play Store) para isso. Esse artigo detalha o processo para essa solicitação.
Dicas para que seu app receba a aprovação de acesso à localização em segundo plano
Isso é tudo, por enquanto. Então, fique sabendo tudo sobre MAD, App Bundles e componentes do Material Design. Confira os requisitos do próximo ano relacionados a App Bundles e API de destino. Leia os documentos mais recentes sobre fragmentos e fluxo Kotlin. Confira o conteúdo mais recente para desenvolvedores na publicação Android Developers no Medium, no Blog de desenvolvedores Android e no canal Android Developers no YouTube. Em breve, voltaremos com a próxima atualização do universo dos desenvolvedores Android.
Em conjunto com a série MAD Skills, queríamos nos divertir um pouco e oferecer uma oportunidade para que você responda a uma pergunta importantíssima: Qual é o seu nível de MAD? Para descobrir, instale e execute o plug-in MAD Scorecard no Android Studio. Ele cria uma ficha para você, mostrando o nível de pontuação dos apps nos quatro pilares do Modern Android Development e que pode ser compartilhada no Twitter com a hashtag #MADscore.
Acesse o site MAD Score para saber os detalhes ou veja mais informações no blog de Christopher Katsaros:
Enquanto isso, a série MAD Skills continua rolando, com conteúdo técnico sobre Modern Android Development. Na semana passada, terminou a série sobre Componentes do Material Design. Desde o último Now in Android, a equipe postou mais três episódios:
Nº 4: Material MotionNo quarto episódio sobre MDC, Nick Rout fala sobre os quatro padrões de movimento no Material e como implementá-los nos aplicativos. Ele detalha a amostra de app Reply e um codelab baseado nesse app para mostrar como ele funciona na prática.
Nº 5 Community Tip de Zarah DominguezO quinto episódio sobre MDC é de Zarah Dominguez, especialista em desenvolvimento do Google. Ela fala sobre como sua equipe usa o app de catálogo do Material para ver como as coisas funcionam na prática e qual é a aparência do código-fonte como exemplo de implementação.
Nº 6: Perguntas e respostas ao vivoO episódio final sobre MDC foi, assim como nas séries anteriores sobre App Bundles e Navegação, uma sessão de Perguntas e respostas ao vivo com especialistas em MDC sobre os relacionamentos com desenvolvedores e as equipes de engenharia do Material. Recebemos muitas perguntas de vocês no Twitter e em tempo real no YouTube durante a sessão. Não tivemos tempo para responder a todas, mas tivemos um progresso… material.
Se você perdeu qualquer conteúdo da série MDC, Nick Rout escreveu um resumo da série neste artigo de encerramento, com links para todos os vídeos e artigos relevantes, além de amostras, documentos e codelabs associados e muito mais.
Esta semana, temos uma nova série MAD Skills sobre Kotlin e Jetpack. Especificamente, ela fala sobre como usar o Kotlin em conjunto com muitas das APIs do Jetpack. Florina Muntenescu fez a seguinte introdução:
Nº 1: Uso do KTXO primeiro episódio da série fala sobre o uso do KTX, as extensões do Kotlin que fornecem abordagens aprimoradas e mais simples para várias bibliotecas de plataforma e do Jetpack. Florina discute o KTX em geral, com exemplos de APIs de plataforma e do Jetpack, demonstrando como ela as utiliza junto com o LiveData e o ViewModel.
Nº 2: APIs simplificadas com corrotinasNesse segundo episódio, Manuel Vivo explica como usar as corrotinas do Kotlin para melhorar a experiência de uso de APIs existentes para desenvolvedores Kotlin. Por exemplo, é possível criar adaptadores que simplificam a complexidade de callbacks aninhadas com corrotinas. Ele traz um exemplo de criação de uma API mais simples para o provedor de localização combinada para demonstrar como fazer isso na prática.
Haverá mais episódios sobre Kotlin/Jetpack nas próximas semanas, que serão disponibilizados na playlist do YouTube e também em forma de arquivo, na publicação do Android Developers.
Para ver o conteúdo atual, não deixe de conferir a playlist do MAD Skills no YouTube, os artigos no Medium ou esta página de destino útil , a qual fornece acesso a todo o conteúdo.
Nas últimas versões, foram feitas várias mudanças nas permissões. Enquanto isso, continuamos nos concentrando no controle de usuários e na transparência de dados de usuários. Às vezes, isso envolve o trabalho de desenvolvedores, para acompanhar as últimas atualizações e mudanças de comportamento. Por isso, trabalhamos em nossa documentação, para ajudarmos nesse processo.
Como parte desse esforço, recentemente fizemos várias melhorias substanciais no guia de permissões no Android. Esse site agora fornece orientações mais otimizadas sobre o funcionamento das permissões, além de práticas recomendadas para o uso de permissões em apps. Em especial, você deve avaliar se realmente precisa declarar permissões, o que não é necessário na maioria dos casos comuns.
Dois guias da biblioteca Room foram reformulados para esclarecer como utilizar alguns dos aspectos das APIs:
Como acessar dados usando DAOs (objetos de acesso aos dados) da Room fornece uma visão geral do uso da interface DAO, incluindo o uso dos métodos de consulta integrados e também de métodos personalizados por meio da anotação @Query .
@Query
Writing asynchronous DAO queries cobre mais detalhes sobre como escrever consultas que ocorrem fora da linha de execução de IU, o que é bastante necessário para interações com bancos de dados. O guia discute várias alternativas que podem ser utilizadas, dependendo da linguagem e das preferências de API assíncrona.
Dentre todas as versões Alfa, Beta e RC recentes das várias bibliotecas do AndroidX, estão as seguintes versões estáveis:
Também chegaram algumas versões estáveis de correção de bugs, incluindo Exifinterface 1.3.2, Media 1.2.1 e Navigation 2.3.2.
Jamal Eason postou um artigo anunciando a próxima versão do Android Studio: o Arctic Fox já está no canal Canary e pronto para avaliação. A primeira coisa que você notará sobre essa versão é um novo esquema de nomenclatura e controle de versões, que é discutido detalhadamente no artigo. Além disso, algumas das coisas a serem conferidas nessa versão incluem uma IU para o emparelhamento com um dispositivo para depuração de Wi-Fi (por enquanto apenas para MacOS), uma ferramenta de validação de layout e o suporte continuado ao desenvolvimento no Jetpack Compose. (Note que a versão canário do Studio sempre deve ser utilizada para trabalhar com o Compose em seu estado inicial atual.)
Murat Yener também postou sobre as novidades do Android Studio em seu artigo sobre a nova versão Alfa do Plug-in do Android para Gradle, versão 7.0.0-alpha01. Observe que o AGP também passou por uma mudança de nomenclatura de versão. Agora, ele segue as versões do Gradle em vez de ser associado às versões do Android Studio. Isso explica por que parece que essa versão pulou ou omitiu algumas versões desde a atual 4.2. O artigo também fala sobre algumas das recentes mudanças de API no AGP 4.2.
Meghan Mehta postou mais um artigo em sua série sobre o RecyclerView. Embora o RecyclerView não seja novo (e provavelmente já esteja sendo utilizado em apps pela maioria dos desenvolvedores Android), achamos que a documentação e os exemplos de alguns dos fundamentos eram um pouco difíceis de encontrar (pelo menos em nossos documentos e artigos). Por isso, ela tem tentado explicar como usar alguns dos fundamentos, utilizando amostras de código para mostrar como fazer as coisas na prática.
Em seu artigo mais recente, Meghan fala especificamente sobre o uso do ListAdapter, que oferece uma forma simples de obter algumas funcionalidades ótimas para o RecyclerView, inclusive um desempenho melhor e animações automáticas de itens. O ListAdapter usa o DiffUtil para determinar as mudanças específicas que ocorreram, das quais o RecyclerView necessita para obter o máximo desempenho e as melhores animações.
Continuei com minha exploração do desempenho de inicialização com uma série em duas partes sobre a biblioteca do AndroidX App Startup, que recentemente chegou à versão 1.0 . A Parte um analisa como os provedores de conteúdo geralmente são utilizados para instanciar bibliotecas e como isso pode causar um impacto oculto sobre o tempo de inicialização dos aplicativos.
A Parte 2 investiga como usar a biblioteca App Startup para remover os provedores de conteúdo ocultos e agrupar as solicitações para iniciar as bibliotecas de forma lenta.
Há um artigo no blog do Android Developers que detalha melhorias adicionadas ao sistema e às APIs de localização para que seja possível obter informações de localização mais precisas em grandes cidades. O artigo discute o problema da derivação de localizações de GPS em grandes cidades, onde a suposição padrão da tecnologia de GPS utilizando a linha de visão é prejudicada pela forma como os sinais são refletidos pelos edifícios altos. (Tor e eu conversamos sobre isso com Marc Stogaitis, da equipe de localização, em um podcast do ADB em 2014: o fenômeno é conhecido como “vales urbanos”).
A equipe integrou modelos de edifícios 3D das principais cidades para atingir resultados de localização muito mais precisos. A versão 2 dessa tecnologia já está disponível em alguns dispositivos Pixel. Uma versão anterior foi disponibilizada para o ecossistema mais amplo, e essa versão mais recente também estará disponível mais globalmente no início do próximo ano.
É claro que tudo isso é um recurso para usuários, e o Now in Android é para desenvolvedores. Mas eu queria destacar isso aqui porque (a) acho o artigo e a tecnologia interessantes e (b) há um apelo para os desenvolvedores aqui, que é o de usar o provedor de localização combinada (FLP) para obter acesso a esses dados de localização aprimorados.
Além disso, há uma nova API no FLP que permite obter as informações de localização atuais com muito mais facilidade, simplesmente perguntando qual é a localização atual e obtendo um resultado, em vez de inscrever mudanças constantes de localização e, então, cancelar a inscrição depois de obter o primeiro resultado. Confira a documentação da API getCurrentLocation() do FLP, a nova amostra CurrentLocationKotlin e o artigo para obter mais informações.
Chris Banes migrou o app Tivi , deixando de usar o kit de ferramentas de IU atual e passando para o Jetpack Compose. Ele concluiu a maior parte dessa migração, com toda a IU agora sendo escrita no Compose, e reportou alguns resultados interessantes sobre tamanho do APK (muito menor!), contagem de métodos (menor) e duração da compilação (um pouco menor).
A API CameraView no CameraX estava trabalhando demais, lidando com a IU e a lógica de controle. Assim, essa lógica foi refatorada para o PreviewView e a nova classe CameraController . Este artigo descreve como usar o CameraController e como essa funcionalidade se compara com o que você pode ter utilizado no CameraView.
CameraController
CameraView
Desde o último Now in Android, publicamos outro episódio do Android Developers Backstage . Confira no link abaixo ou acesse em seu cliente de podcast favorito:
Romain Guy, Tor Norbye e eu conversamos com Jesse Wilson, da Square, sobre algumas das bibliotecas de código-aberto mais conhecidas nas quais ele está trabalhando, inclusive OkHttp, Okio e [Ok]Moshi. Falamos sobre essas e outras bibliotecas e também sobre desenvolvimento do Android, de bibliotecas, de frameworks e do Kotlin. E ainda falamos sobre aquele costume terrível que alguns engenheiros têm de transformar uma solicitação de recurso ou um pequeno problema em um projeto de criação de uma nova biblioteca de código aberto.
Isso é tudo, por enquanto. Então, obtenha seu MAD Scorecard. Acesse o MAD para saber mais sobre MDC e conteúdo do Kotlin/Jetpack. Conheça a documentação mais recente sobre Permissões e sobre a Room. Faça o download das versões estáveis mais recentes do AndroidX. Leia novos artigos sobre ListAdapter, desempenho de inicialização, localização de GPS aprimorada, migração para o Jetpack Compose e CameraController. Ouça o episódio mais recente do podcast do ADB. Em breve, voltaremos com a próxima atualização do universo dos desenvolvedores Android.
Este artigo faz parte de uma série sobre as mudanças de atributos de cookies SameSite:
SameSite
Schemeful Same-Site modifica a definição de um site (da Web) de apenas o domínio registrável para o esquema + o domínio registrável. Mais detalhes e exemplos podem ser encontrados em Understanding "same-site" and "same-origin".
Termo-chave: significa que a versão HTTP não segura de um site, como http://website.example, e a versão HTTPS segura desse mesmo site, https://website.example, agora são consideradas, uma em relação à outra, dentro de um contexto entre sites.
A boa notícia é que, se o upgrade do site para HTTPS já estiver concluído, você não precisa se preocupar com mais nada. Nada muda para você, nesse caso.
Se o upgrade do site ainda não estiver concluído, essa deve ser a prioridade. No entanto, se houver casos nos quais os visitantes do site alternem o HTTP e o HTTPS, alguns desses cenários comuns e o comportamento do cookie SameSite associado são descritos a seguir.
Aviso: no longo prazo, o plano é desativar gradual e totalmente o suporte a cookies de terceiros, substituindo-o por alternativas que preservem a privacidade. A definição de SameSite=None; Secure em um cookie para permitir que ele seja enviado entre esquemas só deve ser considerada como uma solução temporária na migração para o HTTPS total.
SameSite=None; Secure
Você pode ativar essas mudanças para teste no Chrome e no Firefox.
chrome://flags/#schemeful-same-site
network.cookie.sameSite.schemeful
true
about:config
Um dos motivos principais da mudança para SameSite=Lax como padrão para cookies foi a proteção contra ataques de falsificação de solicitação entre sites (CSRF, na sigla em inglês). No entanto, o tráfego HTTP não seguro ainda representa uma oportunidade para que invasores de redes adulterem cookies que são, então, utilizados na versão HTTPS segura do site. A criação desse limite adicional entre sites entre os esquemas oferece uma defesa melhor contra esses ataques.
SameSite=Lax
Termo-chave: nos exemplos abaixo, onde todos os URLs têm o mesmo domínio registrável, como site.example, mas esquemas diferentes, como http://site.example versus https://site.example, eles são referenciados como entre esquemas um em relação ao outro.
A navegação pelas versões entre esquemas de um site (por exemplo, um link de http://site.example para https://site.example) anteriormente permitiria o envio de cookies SameSite=Strict. Isso agora é tratado como uma navegação entre sites, o que significa que os cookies SameSite=Strict são bloqueados.
SameSite=Strict
SameSite=None;Secure
Aviso: todos os principais navegadores bloqueiam conteúdo misto ativo, como scripts ou iframes. Além disso, alguns navegadores, incluindo Chrome e Firefox, estão trabalhando no upgrade ou bloqueio de conteúdo misto passivo.
Quaisquer mudanças feitas aqui só devem ser consideradas correções temporárias enquanto você trabalha no upgrade para o HTTPS total.
Exemplos de sub-recursos incluem imagens, iframes e solicitações de rede feitas com XHR ou Fetch.
O carregamento de um sub-recurso entre esquemas em uma página anteriormente permitira o envio ou a definição de cookies SameSite=Strict ou SameSite=Lax. Agora, isso é tratado da mesma forma que qualquer outro sub-recurso entre sites ou de terceiros, o que significa que todos os cookies SameSite=Strict ou SameSite=Lax são bloqueados.
Além disso, mesmo que o navegador permita o carregamento de recursos de esquemas não seguros em uma página segura, todos os cookies são bloqueados nessas solicitações, porque os cookies entre sites ou de terceiros exigem Secure.
Secure
A postagem entre versões entre esquemas de um site anteriormente permitiria que cookies definidos com SameSite=Lax ou SameSite=Strict fossem enviados. Isso agora é tratado como um POST entre sites — apenas os cookies SameSite=None podem ser enviados. Esse cenário pode ser encontrado em sites que apresentam a versão não segura por padrão, mas que fazem upgrade dos usuários para a versão segura no envio do formulário de login ou da finalização da compra.
SameSite=None
Assim como no caso dos sub-recursos, se a solicitação for de um contexto seguro, como HTTPS, para um não seguro, como HTTP, todos os cookies são bloqueados nessas solicitações, uma vez que os cookies entre sites ou de terceiros exigem Secure.
Aviso: a melhor solução nesse caso é garantir que a página e o destino do formulário estejam em uma conexão segura, como HTTPS. Isso é especialmente importante se o usuário estiver inserindo informações confidenciais no formulário.
As mensagens e ferramentas para desenvolvedores estão disponíveis no Chrome e no Firefox.
No Chrome 86, a guia Issue em DevTools inclui os problemas relacionados ao Schemeful Same-Site. Os seguintes problemas podem ser destacados para um site.
Problemas de navegação:
Problemas de carregamento de sub-recursos:
Mais detalhes podem ser encontrados em Testing and Debugging Tips for Schemeful Same-Site.
No Firefox 79, com network.cookie.sameSite.schemeful definido como true via about:config, o console exibe a mensagem para problemas com o Schemeful Same-Site. Você pode ver o seguinte em seu site:
cookie_name
http://site.example/
É possível que alguns dos links e sub-recursos ainda apontem para URLs não seguros.
Uma forma de corrigir o problema é usar o HSTS HTTP Strict-Transport-Security e a diretiva includeSubDomain. Com o HSTS + includeSubDomain, mesmo que uma das páginas acidentalmente inclua um link não seguro, o navegador usa automaticamente a versão segura.
includeSubDomain
Embora seja altamente recomendável fazer upgrade do site totalmente para HTTPS a fim de proteger os usuários, se você não puder fazer isso, sugerimos falar com seu provedor de hospedagem para ver se ele oferece essa opção. Se a hospedagem for própria, a Let's Encrypt oferece várias ferramentas para instalar e configurar um certificado. Outra opção é tentar colocar o site por trás de um CDN ou outro proxy capaz de fornecer a conexão HTTPS.
Se isso também não for possível, tente afrouxar a proteção do SameSite sobre os cookies afetados.
Lax
Strict
None
Os cookies sem um atributo SameSite são tratados como se tivessem especificado SameSite=Lax, e o mesmo comportamento entre esquemas se aplica a eles. Observe que a exceção temporária para métodos não seguros também se aplica. Consulte sobre a mitigação de Lax + POST nas Perguntas frequentes do SameSite no Chromium para obter mais informações.
As conexões WebSocket ainda serão consideradas do mesmo site se tiverem a mesma segurança da página.
Do mesmo site:
wss://
https://
ws://
http://
Entre sites:
Foto de Julissa Capdevilla em Unsplash