Postado por Greg Hartrell, chefe do gerenciamento de produtos para jogos no Android e no Google Play
Com o aumento de novos jogadores e do tempo gasto em jogos no ano passado, nunca foi tão importante para os desenvolvedores de jogos encantar e engajar os jogadores. Para ajudar os desenvolvedores a aproveitar essa oportunidade, as equipes de jogos da Google estão de volta para anunciar o retorno do Google for Games Developer Summit 2021 nos dias 12 e 13 de julho.
Assista a especialistas de vários setores da Google falando sobre as novas soluções para jogos que estão sendo elaboradas para que você possa continuar criando ótimos jogos, se conectando aos jogadores e expandindo seu negócio com mais facilidade. A inscrição é gratuita e aberta a todos os desenvolvedores de jogos.
Inscreva-se no evento on-line gratuito em g.co/gamedevsummit e receba mais detalhes nas próximas semanas. Mal podemos esperar para compartilhar nossas inovações com a comunidade de desenvolvedores!
Postado por Jamal Eason, gerente de produtos, Android
É com grande prazer que anunciamos que o Android Studio 4.2 já está disponível para download no canal de lançamento estável. As áreas de foco dessa versão são uma plataforma IntelliJ atualizada e alguns novos recursos destinados ao aumento da produtividade dos desenvolvedores de apps Android.
Sabemos que pode ser complicado atualizar um projeto de app para a versão mais recente. Para resolver isso, temos um novo assistente de atualização de projeto de app no Android Studio 4.2 que facilita a migração de projetos para que você possa se beneficiar das mais recentes APIs do Plug-in do Android para Gradle. Além disso, adicionamos toda uma variedade de melhorias a recursos existentes, como Database Inspector, rastreamento do sistema, suporte a Safe Args, Apply Changes, o novo assistente de projeto e muito mais. Se você usa esses recursos e está pensando em adotar a próxima versão estável do Android Studio, faça o download do Android Studio 4.2 hoje mesmo!
Veja abaixo a lista dos novos recursos do Android Studio 4.2, organizadas pelos principais fluxos de desenvolvimento.
Desenvolvimento
Suporte a Safe Args
Novo assistente de projeto e novo assistente de módulo
Depuração
Histórico de consultas com o Database Inspector
./sdk/cmdline-tools/latest/bin/retrace
Compilação
Assistente de atualização do AGP
// build.gradle.kts android { ... signingConfigs { config { ... enableV3Signing(true) enableV4Signing(true) } } }
Suporte a assinaturas APK v3 e APK v4
Teste
Implantação em vários dispositivos
Criação de perfis
Criador de perfil com a nova tabela de eventos de rastreamento do sistema
Em resumo, o Android Studio 4.2 inclui estes novos recursos e melhorias:
Confira as notas da versão do Android Studio, as notas da versão do Plugin do Android para o Gradle e as notas da versão do Android Emulator para saber mais detalhes.
Download
Faça o download da versão mais recente do Android Studio 4.2 na página de downloads. Se você estiver usando uma versão anterior do Android Studio, basta atualizar para a mais recente. Se quiser continuar trabalhando também com uma versão estável do Android Studio, você poderá executar a versão de lançamento e as versões canário do Android Studio Arctic Fox ao mesmo tempo. Saiba mais.
Sua opinião sobre o que gostou e sobre problemas ou recursos que gostaria de ver é muito importante. Se encontrar um erro ou problema, não deixe de enviá-lo para nós. Siga nossa equipe de desenvolvimento do Android Studio no Twitter e no Medium.
Java é marca registrada da Oracle e/ou de suas afiliadas.
Postado por Bert de Weerd e Tingmui Li, Google Play
Quando o Google Play foi lançado em 2008, os desenvolvedores conseguiam ser notados facilmente, já que havia apenas algumas centenas de apps e jogos publicados na Play Store. Hoje, há milhões de apps e jogos disponíveis para públicos em mais de 190 países. Os ativos exclusivos que você fornece para a Play Store – imagens, vídeos, descrições e até mesmo o próprio nome do app – são essenciais para que os usuários decidam de quais itens fazer o download.
O Google Play está mostrando cada vez mais ativos logo na primeira exibição, trazendo ativos gráficos e descrições diretamente na tela inicial de Apps e Jogos. Para garantir que seus ativos de listagem na loja possam ajudar os usuários a desejar uma experiência com o app ou jogo e a gerar downloads significativos, estamos:
Uma vez que o título, o ícone e o nome do desenvolvedor do app são os elementos de descoberta mais importantes da página de listagem na loja, estamos preparando o lançamento de um novo conjunto de políticas para manter esses elementos reconhecíveis e exclusivos, com foco em:
O título, o ícone e o nome do desenvolvedor do app que não atenderem às futuras políticas não serão permitidos no Google Play. Ainda este ano, serão fornecidos mais detalhes sobre essa mudança de política, inclusive as datas de início da aplicação.
Recomendamos revisar os exemplos de certo e errado abaixo e considerar como essas mudanças poderão afetar você, para que você possa se preparar para as futuras mudanças de política.
Também estamos anunciando novas diretrizes para ativos de visualização de listagem na loja referentes a gráficos, capturas de tela, vídeos e descrições breves de recursos fornecidos para expor os recursos e as funcionalidades de apps. Os ativos que não seguirem nossas diretrizes poderão não ser qualificados para promoção e recomendação nas principais áreas do Google Play, como as páginas iniciais de Apps e Jogos.
A nova diretriz para ativos fornecidos pelo desenvolvedor tem como foco os seguintes princípios:
Para assegurar que os apps e jogos sejam qualificados para recomendações em todas as áreas do Google Play, revise nossas novas diretrizes para listagem na loja. Começaremos a usar essas diretrizes para informar nossas recomendações a partir do segundo semestre de 2021.
Esperamos que você tenha achado o pré-anúncio da política e o anúncio das diretrizes para ativos de visualização úteis para o planejamento de seu roteiro do ano e que você compartilhe da nossa alegria em tornar a Play Store ainda mais útil e atraente.
Faltam apenas algumas semanas para o Google I/O 2021, e não vemos a hora de compartilhar com você todas as notícias recentes sobre o Android! Enquanto aguardamos, compartilhamos a Visualização do desenvolvedor 3, o próximo marco de versão do Android 12, para que você possa testá-la e fornecer seu feedback.
No Android 12, continuamos a nos concentrar em tornar o SO mais inteligente, mais fácil de usar e com melhor desempenho, sempre com a privacidade e a segurança como pontos centrais. Também estamos trabalhando para dar a você novas ferramentas para criar ótimas experiências para usuários em telefones, laptops, tablets, TVs ou carros. Algumas coisas a conferir no lançamento de hoje incluem uma nova experiência de inicialização de apps, novos recursos de vídeo e câmera para ajudar você a obter mais do suporte a hardware subjacente e uma nova permissão para alarmes exatos que ajudam os usuários a economizar bateria.
Continue lendo para ver mais destaques e visite o site para desenvolvedores do Android 12 para ver mais detalhes e downloads para Pixel. Se você já estiver executando um build de Visualização do desenvolvedor 2, em breve terá uma atualização OTA. Como sempre, queremos saber sua opinião e agradecemos o feedback que você compartilhou conosco até agora.
O lançamento de hoje inclui novas ferramentas para ajudar você a fornecer uma experiência mais refinada e um desempenho melhor para os usuários. Estas são algumas das atualizações.
Experiência melhor de inicialização de apps – No Android 12, estamos tornando a inicialização de apps uma experiência mais consistente e prazerosa. Adicionamos uma nova animação de inicialização para todos os apps desde o ponto de inicialização, uma tela de apresentação que mostra o ícone do app e uma transição para o próprio app. A nova experiência traz elementos de design padrão para cada inicialização de app, mas também tornamos isso personalizável, para que os apps possam manter sua identidade de marca única. Por exemplo, você pode usar novas APIs de tela de apresentação e recursos para gerenciar a cor de fundo da janela da tela de apresentação. É possível substituir o ícone estático na tela de início por um ícone personalizado ou uma animação, definir o modo claro ou escuro e controlar o momento da revelação do app na animação de saída.
Não é preciso fazer nada para aproveitar a nova experiência. Ela é ativada por padrão para todos os apps. Recomendamos testar imediatamente o app com a nova experiência, especialmente se você já estiver usando uma tela de apresentação. Para personalizar a experiência, confira as novas APIs e conte para a gente o que você achou. Saiba mais aqui.
Novo modelo de notificação de chamadas – As chamadas recebidas e realizadas são importantes para os usuários, e elas devem ser fáceis de ver e gerenciar. No Android 12, estamos melhorando as notificações de chamada para que elas sejam mais visíveis e possam ser procuradas mais facilmente, e também melhoramos sua consistência com outros componentes de notificação. Se o app lidar com chamadas, como um app de telefone ou um app de chat com chamadas de vídeo, vale a pena experimentar nosso novo modelo CallStyle. Você pode usar o modelo para criar notificações de chamadas recebidas, realizadas e rastreadas. Cada tipo dá suporte a várias ações, incluindo ações padrão e ações personalizadas que são específicas de cada app. Você também pode anexar uma imagem de avatar grande, fornecer texto e definir dicas coloridas para os botões. O SO dá alta visibilidade às notificações de CallStyle, por exemplo, colocando-as na parte superior da aba de notificações. Saiba mais aqui.
Nova permissão para alarmes exatos – Os alarmes são uma forma importante pela qual os apps programam os trabalhos. Na maioria dos casos, os apps devem usar alarmes inexatos, que têm a vantagem de economizar a bateria. O Android gerencia esses alarmes para minimizar ações de despertar e impactos sobre a bateria, como por meio dos recursos de Soneca e App em espera. Para os casos em que são necessários alarmes precisos, como para despertadores e timers, você pode usar os alarmes exatos. Eles são convenientes e confiáveis, mas também podem causar o esgotamento da bateria, especialmente quando usados em excesso. Por isso, no Android 12, estamos fazendo algumas mudanças para dar mais controle aos usuários.
Os apps segmentados para o Android 12 que desejam usar alarmes exatos agora deverão solicitar uma nova permissão, SCHEDULE_EXACT_ALARM. Essa é uma permissão normal. Portanto, uma vez que você a tenha declarado em seu manifesto, ela será automaticamente concedida na primeira inicialização. No entanto, também estamos dando aos usuários visibilidade dos apps que têm essa permissão e permitindo que eles a concedam e revoguem usando as permissões especiais de acesso a apps das configurações. Se o app exigir alarmes exatos, certifique-se de lidar com os casos nos quais ele não tenha mais a permissão. Adicionamos uma nova API, canScheduleExactAlarms(), para que você possa verificar o status da permissão do app. Em geral, recomendamos a migração dos apps para que eles não usem os alarmes exatos sempre que possível. Saiba mais aqui.
Melhoria da vinculação com a Web – No Android 12, estamos fazendo algumas mudanças para ajudar os usuários a obter conteúdo de forma mais rápida e direta. Primeiro, mudamos o tratamento padrão dos links que não são verificados pelos Android App Links nem manualmente aprovados pelo usuário. Agora, o SO os abrirá diretamente no navegador padrão, em vez de mostrar uma caixa de diálogo seletora. Para facilitar para os usuários a aprovação do app para links, adicionamos um novo Intent que os direciona para a opção "Open by default" nas configurações. Se você quiser garantir que somente o seu app possa lidar com links de seu domínio, pode usar os App Links. Adicionamos novos comandos adb para ajudar você a configurar e testar links. Saiba mais aqui.
Experiências táteis mais completas - Estamos expandindo as ferramentas que oferecemos para a criação de retorno tátil informativo para eventos de IU, efeitos imersivos e divertidos para jogos e háptica de concentração para produtividade. Adicionamos efeitos expressivos como a baixa sinalização, que se beneficia da largura de banda com frequência mais ampla dos atuadores mais recentes. Os desenvolvedores de jogos agora podem acessar vários atuadores diferentes de forma independente nos controles de jogos para criar o mesmo efeito de forma síncrona ou diferentes efeitos táteis em vários atuadores. Para os desenvolvedores, recomendamos usar as constantes e os primitivos como a base para efeitos táteis mais ricos: as constantes para melhorar os eventos de IU e o compositor tátil para sequenciar primitivos para efeitos mais complexos. Você pode experimentar por completo essas APIs nos dispositivos Pixel 4 hoje mesmo, e nós continuamos a trabalhar com nossos parceiros fabricantes de dispositivos para trazer o que há de mais moderno em suporte tátil aos usuários em todo o ecossistema.
Melhorias de codificação de vídeo - O Android 12 padroniza o conjunto de chaves para controlar toda a gama de parâmetros de quantização (QP) de vídeo, permitindo que os desenvolvedores evitem códigos específicos de fornecedor. As novas chaves estão disponíveis na API MediaFormat e também na biblioteca NDK Media. Os codificadores de vídeo devem especificar um limite mínimo de qualidade de vídeo para garantir que os usuários não tenham uma qualidade extremamente baixa quando os vídeos forem complexos.
Extensões de vídeo Camera2 - Muitos de nossos parceiros fabricantes de dispositivos criaram efeitos de câmera personalizados, como bokeh, HDR, modo noturno e outros, que eles desejam que os apps utilizem para criar experiências diferenciadas em seus dispositivos. Já demos suporte a esses efeitos personalizados por meio de um conjunto de extensões de fornecedor em nossa biblioteca CameraX e agora, no Android 12, estamos expondo as extensões de fornecedor diretamente na plataforma, também. Isso ajuda os apps que têm implementações complexas de Camera2 a se beneficiarem das extensões sem grandes mudanças no código legado. As APIs de extensão expõem exatamente o mesmo conjunto de efeitos que o CameraX, e eles já têm suporte em muitos dispositivos, por isso você pode utilizá-los diretamente. Saiba mais aqui.
Suporte a sensores de câmera Quad Bayer - Muitos dispositivos Android hoje são fornecidos com sensores de câmera de ultra-alta resolução, geralmente com padrões Quad/Nona Bayer, e eles oferecem uma ótima flexibilidade em termos de qualidade de imagem e desempenho em ambientes com pouca luminosidade. No Android 12, estamos introduzindo novas APIs de plataforma que permitem que apps de terceiros se beneficiem totalmente desses versáteis sensores. As novas APIs dão suporte ao comportamento exclusivo desses sensores e levam em conta que eles podem dar suporte a diferentes configurações e combinações de streaming quando operam no modo de resolução total ou "resolução máxima" e não no modo "padrão".
Aprendizado de máquina acelerado - No Android 12, investimos em áreas-chave para que os desenvolvedores possam tirar o máximo proveito dos aceleradores de aprendizado de máquina (ML) e sempre obter o melhor desempenho possível por meio da API Neural Networks. Em termos de melhorias de desempenho, reduzimos mais da metade da sobrecarga das chamadas de inferência com a introdução de melhorias como preenchimento, cercas de sincronização e objetos de execução reutilizáveis. Também tornamos os drivers aceleradores de ML atualizáveis fora das versões da plataforma, por meio do Google Play Services. Com isso, os desenvolvedores poderão se beneficiar mais facilmente dos drivers mais recentes em qualquer dispositivo compatível e garantir que as melhorias no desempenho do ML e as correções de bugs cheguem aos usuários mais rápido do que nunca.
Padronização da computação de GPU - Estamos suspendendo o uso das APIs RenderScript em favor de soluções multiplataforma de computação de GPU, como Vulkan e OpenGL. Queremos que você tenha a certeza de que as cargas de trabalho de alto desempenho serão executadas em hardware de GPU, e muitos dispositivos já estão sendo comercializados apenas com o suporte a CPU para o RenderScript. As APIs existentes continuarão a funcionar por enquanto, e nós criamos uma biblioteca de código aberto para a intrínseca do RenderScript, como o foco, que utiliza o código altamente otimizado da plataforma. Também estão disponíveis amostras e um guia de migração para o uso do Vulkan para implementar o processamento de imagens. Saiba mais aqui.
Depuração melhor para falhas nativas - Vocês nos disseram que a depuração de falhas relacionadas ao NDK pode ser um desafio. Estamos facilitando isso no Android 12 com um diagnóstico mais prático. Na plataforma, usamos arquivos de crash dump chamados Tombstones para depurar nossas falhas nativas, e eles contêm as informações necessárias para diagnosticar uma variedade de problemas; isso inclui liberação via ART, integração a fdsan e registro de todas as pilhas envolvidas em uma falha GWP-ASan, HWASan ou MTE. Agora, estamos dando aos apps acesso a seus arquivos Tombstone por meio da API App Exit Reasons. Quando um app usar "ApplicationExitInfo" com "REASON_CRASH_NATIVE", você agora poderá chamar "getTraceInputStream()" para obter os dados do Tombstone como um buffer de protocolo.
Configurações de backup mais flexíveis – O serviço de backup do Android permite que os usuários restaurem ou migrem seus dados facilmente para um novo dispositivo. Os apps são centrais para a experiência, permitindo que os usuários transfiram facilmente dados de apps e continuem de onde pararam. O serviço de backup dá suporte tanto a backups em nuvem para o Google Drive quanto a transferências entre dispositivos, e os desenvolvedores podem tirar proveito disso com o mínimo de mudanças nos apps. Para os apps segmentados para o Android 12, estamos melhorando o serviço para oferecer mais flexibilidade e controle. Atualizamos o formato de configuração de XML para que agora você possa definir regras diferentes para backups em nuvem e transferências entre dispositivos. Com isso, por exemplo, você pode excluir um arquivo grande dos backups em nuvem, mas incluí-lo nas transferências entre dispositivos. Também é possível definir requisitos de criptografia separadamente para backups ou transferências. Por fim, se você quiser desativar o backup automático para as transferências entre dispositivos, use o novo formato de configuração em vez do atributo de manifesto allowBackup. Saiba mais aqui.
Você pode saber mais sobre todos os recursos e as mudanças de comportamento do Android 12 aqui.
Estamos trabalhando para agilizar e simplificar as atualizações priorizando a compatibilidade de apps à medida que lançamos novas versões da plataforma. No Android 12, a maioria das mudanças voltadas para os apps é ativável, para que você tenha mais tempo, e nossos processos e ferramentas foram atualizados para ajudar você a se preparar mais rapidamente.
Com a Visualização do desenvolvedor 3, estamos nos aproximando de nossa primeira versão Beta, enquanto continuamos melhorando a estabilidade. Este é o momento de experimentar os novos recursos e as mudanças e contar para nós como eles funcionaram com os seus apps. Visite a página de feedback para compartilhar suas opiniões conosco ou relatar problemas.
Com a proximidade da primeira versão Beta, é hora de começar os testes de compatibilidade para garantir que seus apps estejam preparados. Recomendamos lançar uma atualização compatível durante as próximas semanas. Não há necessidade de alterar o targetSdkVersion do app ainda, embora você possa usar os botões de alternância de mudanças de comportamento para ter uma ideia inicial de como um app pode ser afetado pela ativação de mudanças no Android 12.
Quando atingirmos a estabilidade da plataforma em agosto de 2021, todos os comportamentos do sistema voltados para os apps, as APIs SDK/NDK e as listas não SDK estarão finalizados. Nesse ponto, você poderá concluir seus testes de compatibilidade finais e lançar uma versão totalmente compatível do app, SDK ou biblioteca. Saiba mais sobre o cronograma para desenvolvedores.
A Visualização do desenvolvedor de hoje tem tudo o que você precisa para experimentar os recursos do Android 12, testar apps e nos fornecer feedback. Você pode começar hoje mesmo atualizando uma imagem de sistema de dispositivo para um dispositivo Pixel 3/3 XL, Pixel 3a/3a XL, Pixel 4/4 XL, Pixel 4a/4a 5G ou Pixel 5 ou usando o Android Emulator. Caso já tenha instalado um build de pré-lançamento em seu dispositivo Pixel, você receberá automaticamente esta atualização e futuras atualizações Beta via OTA. Veja mais detalhes sobre como obter o Android 12 aqui.
Para acessar todas as informações, visite o site para desenvolvedores Android 12.
For Improved web linking section (might not get approval in time for DP3, can update the post after):
Also, starting in Android 12, the OS will no longer reset a user’s previous choice of default app when they install a new app for web links or a web browser, except for App Link verified apps. Browsers that want to encourage users to grant them default status can continue to do so using the RoleManager API.
Restrictive App Standby bucket - Based on feedback from developers and device makers, we’re enabling a new, more restrictive App Standby bucket to help standardize battery-saving behaviors across devices. Starting in Android 12, devices will be required to use the new restrictive bucket instead of proprietary restrictions, and device-maker partners are working with us to move to this model. For developers, the new bucket should help reduce variation across devices and work seamlessly with your apps as an extension of the current App Standby system.
Performance Class - Starting with Android 12 and working together with our ecosystem partners, we’re introducing a common standard for high performing Android devices. This standard, called Performance Class, defines a set of capabilities that go beyond Android's baseline requirements, and devices that meet Performance Class can support more demanding use-cases and deliver higher quality content. Developers can check for Performance Class at runtime and then reliably deliver enhanced and upgraded experiences that take full advantage of the device’s performance.
Performance Class requirements will be specific to each Android version and defined in that version’s Android Compatibility Definition Document (CDD). The requirements will be tested and verified through the Android Compatibility Test Suite (CTS). A device will report its Performance Class level in relation to the Android version it supports, for example "Performance Class 12", and can upgrade to newer platform versions without necessarily updating its Performance Class level. For example, a device running Android 13 could still report Performance Class 12 if it does not meet the Android 13 Performance Class criteria.
In Android 12, the Performance Class criteria will focus on media use cases and include media & camera requirements, such video encoding quality, camera image quality, capture latency, camera/codec startup latency, in addition to generic requirements, such as total device memory and read/write performance.
Até agora, compartilhamos como usar o DataStore com Protos ou Preferences. Nos bastidores, as duas versões do DataStore usam Protos para serializar os dados. Você também pode usar o DataStore com classes de dados personalizadas por meio da serialização do Kotlin. Isso pode ajudar a reduzir o código boilerplate sem a necessidade de aprender ou depender da biblioteca Protobuf e, ainda assim, fornecer um esquema para os dados.
As classes de dados do Kotlin são ótimas para uso com o DataStore porque funcionam perfeitamente com a serialização do Kotlin. O DataStore depende de equals e hashCode, que são gerados automaticamente para as classes de dados. As classes de dados também geram funções toString e copy, que são úteis para depurar e atualizar dados.
equals
hashCode
toString
copy
/* Copyright 2021 Google LLC. SPDX-License-Identifier: Apache-2.0 */ data class UserPreferences( val showCompleted: Boolean, val sortOrder: SortOrder )
É muito importante assegurar que a classe de dados seja imutável, já que o DataStore não é compatível com tipos mutáveis. O uso de tipos mutáveis com o DataStore resultará em bugs e disputas difíceis de detectar. As classes de dados não são necessariamente imutáveis.
Vars são mutáveis, por isso você deve usar vals: /* Copyright 2021 Google LLC. SPDX-License-Identifier: Apache-2.0 */ data class MyData( - var num: Int + val num: Int ) - myObj.num = 5 // Fails to compile when num is val + val newObj = myObj.copy(num = 5)
/* Copyright 2021 Google LLC. SPDX-License-Identifier: Apache-2.0 */ data class MyData( - var num: Int + val num: Int ) - myObj.num = 5 // Fails to compile when num is val + val newObj = myObj.copy(num = 5)
Arrays são mutáveis, por isso não devem ser expostas. /* Copyright 2021 Google LLC. SPDX-License-Identifier: Apache-2.0 */ data class MyData( - var num: IntArray ) - myObj.num = 5 // This would mutate your object
/* Copyright 2021 Google LLC. SPDX-License-Identifier: Apache-2.0 */ data class MyData( - var num: IntArray ) - myObj.num = 5 // This would mutate your object
Mesmo que um List somente leitura seja usado como um membro da classe de dados, ele ainda é mutável. Em vez disso, considere usar coleções imutáveis/persistentes:
/* Copyright 2021 Google LLC. SPDX-License-Identifier: Apache-2.0 */ data class MyData( - val nums: List + val nums: PersistentList ) - val myInts = mutableListOf(1, 2, 3, 4) - val myObj = MyData(myInts) - myInts.add(5) // Fails to compile with PersistentList, but mutates with List + val newData = myObj.copy( + nums = myObj.nums.mutate { it += 5 } // Mutate returns a new PersistentList + )
O uso de tipos mutáveis como membros da classe de dados a torna mutável. Em vez disso, garanta que todos os membros sejam tipos imutáveis.
/* Copyright 2021 Google LLC. SPDX-License-Identifier: Apache-2.0 */ data class MyData( - val mutableType: MutableType ) - val myType = MutableType() - val myObj = MyData(myType) - myType.mutate()
A serialização do Kotlin dá suporte a vários formatos, incluindo JSON e buffers de protocolo. Aqui, usarei o JSON porque ele é muito comum, fácil de usar e armazenado em texto não criptografado, o que facilita a depuração. Protobuf também é uma boa opção, porque é menor, mais rápido e compatível com protobuf-lite.
A fim de ler e gravar a classe de dados em JSON usando a serialização do Kotlin, você precisa anotar a classe de dados com @Serializable e usar Json.decodeFromString<YourType>(string) e Json.encodeToString(data). Este é um exemplo com UserPreferences:
@Serializable
Json.decodeFromString<YourType>(string)
Json.encodeToString(data)
UserPreferences
/* Copyright 2021 Google LLC. SPDX-License-Identifier: Apache-2.0 */ @Serializable data class UserPreferences( val showCompleted: Boolean = false, val sortOrder: SortOrder = SortOrder.None ) object UserPreferencesSerializer : Serializer { override val defaultValue = UserPreferences() override suspend fun readFrom(input: InputStream): UserPreferences { try { return Json.decodeFromString( UserPreferences.serializer(), input.readBytes().decodeToString()) } catch (serialization: SerializationException) { throw CorruptionException("Unable to read UserPrefs", serialization) } } override suspend fun writeTo(t: UserPreferences, output: OutputStream) { output.write(Json.encodeToString(UserPreferences.serializer(), t).encodeToByteArray()) } }
⚠ Parcelables não são seguros para uso com o DataStore porque o formato de dados pode mudar entre as versões do Android.
Transmita o serializador criado para o DataStore ao construí-lo: /* Copyright 2021 Google LLC. SPDX-License-Identifier: Apache-2.0 */ val Context.dataStore by dataStore("my_file.json", serializer = UserPreferencesSerializer)
/* Copyright 2021 Google LLC. SPDX-License-Identifier: Apache-2.0 */ val Context.dataStore by dataStore("my_file.json", serializer = UserPreferencesSerializer)
A leitura de dados é semelhante à de protos: /* Copyright 2021 Google LLC. SPDX-License-Identifier: Apache-2.0 */ suspend fun getShowCompleted(): Boolean { context.dataStore.data.first().showCompleted }
/* Copyright 2021 Google LLC. SPDX-License-Identifier: Apache-2.0 */ suspend fun getShowCompleted(): Boolean { context.dataStore.data.first().showCompleted }
Você pode usar a função .copy() gerada para atualizar dados: /* Copyright 2021 Google LLC. SPDX-License-Identifier: Apache-2.0 */ suspend fun setShowCompleted(newShowCompleted: Boolean) { // This will leave the sortOrder value untouched: context.dataStore.updateData { it.copy(newShowCompleted = showCompleted) } }
.copy()
/* Copyright 2021 Google LLC. SPDX-License-Identifier: Apache-2.0 */ suspend fun setShowCompleted(newShowCompleted: Boolean) { // This will leave the sortOrder value untouched: context.dataStore.updateData { it.copy(newShowCompleted = showCompleted) } }
O uso do DataStore com a serialização do Kotlin e as classes de dados pode reduzir o código boilerplate e ajudar a simplificar o código. Mas é preciso ter cuidado para não introduzir bugs devido à mutabilidade. Tudo o que você precisa fazer é definir a classe de dados e implementar o serializador. Experimente!
Para saber mais sobre o DataStore, confira nossa documentação e pratique com nossos codelabs Proto DataStore e Preferences DataStore.