Alura+ são pequenos vídeos com conteúdo complementar aos cursos da Alura. Aqui você tem novidades, dicas, tutoriais, novos assuntos e muito mais. Excelente para aprender algo novo naqueles pequenos momentos que sobram no dia.
Uma das maneiras de manter as pessoas usuárias cada vez mais em nossos aplicativos é fornecer experiências mais ricas e personalizadas. Nesse contexto, ter uma espécie de inteligência artificial que entenda o que a pessoa usuária está fazendo e seja capaz de interagir com ela é muito útil. Vamos começar a utilizar o Gemini dentro de nossos aplicativos e quem vai te acompanhar nessa jornada é o Junior Martins.
Audiodescrição: Junior é uma pessoa de pele clara, cabelos castanho-escuros compridos, que usa óculos com armação preta e também veste uma camiseta na cor preta. Ele está à frente de uma parede branca iluminada por luzes em degradê que vão do azul ao rosa.
Durante esse conteúdo, queremos mostrar especificamente o que é o Gemini, que, caso você não conheça, é uma ferramenta de inteligência artificial desenvolvida pelo Google que, como eles mesmos comentam, foi desenvolvida para concorrer com o já conhecido ChatGPT. Ele faz parte de um modelo de inteligência artificial que são as IAs generativas onde podemos introduzir alguma informação, como um texto, uma imagem e ela será capaz de devolver mais informações.
É muito comum, por exemplo, enviar um texto e pedir para ela resumir, criar uma história, gerar algum código, resolver algum problema ou mesmo passar alguma informação, como uma imagem, e pedir para ela trabalhar em cima disso.
O Gemini é dividido em três modelos principais: temos o Gemini Ultra, uma versão muito mais potente, que geralmente é feita para rodar em servidores; o Gemini Pro, nas versões 1.0 e, mais recentemente 1.5, que é a versão que mais costumamos usar, mas ainda é uma versão que roda em servidores; e também o Gemini Nano, desenvolvido especialmente para rodar em dispositivos móveis, como smartphones.
Na documentação do Google, eles explicam um pouco melhor o que é o Gemini Nano, dando uma introdução e explicando que ele está disponível apenas para alguns dispositivos. Se deslizarmos um pouco para baixo, no tópico “Benefícios da execução do dispositivo”, é comentado que essa versão roda diretamente no dispositivo, ou seja, ele não se conecta a nada para poder funcionar, tanto que temos o acesso offline de tudo que o Gemini é capaz.
Mas, justamente por ele ter esse poder de processamento utilizando o próprio dispositivo como base, precisaremos ter alguns dispositivos muito potentes, com hardware muito bom, para poder rodar o Gemini Nano. E por isso que não vamos focar muito nele, afinal poucos dispositivos hoje em dia possuem essa versão.
Dentro dessa própria documentação já é descrito que caso queiramos utilizar o Gemini em aplicativos, mas não tenhamos um desses dispositivos ou não queiramos focar especificamente no Gemini Nano, podemos utilizar a outra versão do Gemini, que é o Gemini Pro, dentro de nossos aplicativos.
E por isso temos uma outra documentação com alguns exemplos de código. Se subirmos um pouco para o topo, teremos um cabeçalho semelhante àquele que já conferimos do Gemini Nano, mas com o título “Como usar a API Gemini em apps Android (SDK do cliente)”. Ou seja, podemos colocar um código dentro do nosso aplicativo que vai acessar o Gemini remotamente.
Nesse caso, precisaremos fazer uma série de configurações que é descrita dentro dessa documentação, como por exemplo, fazer a configuração da chave da API, entender quais são os métodos que o Gemini traz para utilizar no Android. Essa é uma página dedicada a ensinar como podemos utilizar o Gemini através de APIs REST.
Mas é descrito também que o próprio Google já preparou um SDK do Gemini, então podemos ir deslizando e conhecendo um pouco melhor desse SDK, com alguns códigos que funcionam de maneira mais simples, sem precisarmos de implementações tão complexas para poder começar.
Mesmo assim, se continuarmos deslizando para baixo, veremos que alguns passos são necessários para poder utilizar o Gemini. Pensando nisso, o Google também tem trabalhado em um novo recurso dentro do próprio Android Studio, para facilitar nosso primeiro contato com o Gemini.
Acessando a página do site Android Developers, acessaremos a aba “Desenvolver > Android Studio > Visualizar” e chegaremos à página “Criar seu primeiro app de IA generativa no Android Studio”. Aqui, temos a informação de que o Android Studio possui uma nova opção.
Se deslizarmos um pouco para conhecer, quando clicamos em “Criar um novo projeto”, aparecerá essa opção que é a Gemini API Starter. Se continuarmos deslizando para baixo, veremos algumas imagens, um passo a passo relativamente simples, sobre como utilizar essa função e quais são os passos que podemos seguir para continuar com ela.
Porém, um detalhe que precisamos ficar atentos é sobre a versão do Android Studio em que essa função está disponível. Estamos com o Android Studio aberto, especificamente no Android Studio Koala 2024.1.1 Canary 3. É um número de versão bem grande, mas precisamos nos atentar de que essa nova opção que acabamos de visualizar na documentação só existe por enquanto nas versões betas do Android Studio. Vamos deixar especificamente essa versão para você poder fazer o download, e se quiser utilizar uma versão mais recente do Android Studio que esteja em beta, recomendamos que utilize a ferramenta Toolbox, que aparece no canto direito da tela. É uma ferramenta oficial da JetBrains, e recomendamos o uso dela.
Pode ser que você tenha essa mesma versão, a Koala, instalada, mas que ela esteja em alguma versão futura, Canary 10, por exemplo, e ela não tem essa opção. Então, recomendo que você utilize o Toolbox, localize o Android Studio, clique nos três pontinhos verticais do lado direito dessa opção, clique em “Outras versões” no menu suspenso. Aqui dentro, você terá uma lista de versões. Geralmente esses recursos em teste beta costumam ficar nas versões Canary mais recentes.
Por exemplo, temos a Koala nesse momento, mas um recurso que já esteve em versões anteriores, como, por exemplo, a Jellyfish 2023.3.1 Beta 2, mas que, por exemplo, nessa Jellyfish Beta 2, uma versão mais recente, não está mais presente. De qualquer maneira, repito que vamos deixar essa mesma exata versão para você poder fazer o uso.
Com essa versão, quando clicamos em “New Project”, temos ali a opção Gemini API Starter, ou API Starter. Quando clicamos nessa opção, podemos perceber que ela está com uma tag de preview, que está em amarelo com texto preto no topo à direita.
Essa tag vem sendo adicionada em recursos beta do Android Studio, então toda parte do Material Design, do Jetpack Compose, em algum momento esteve também com essa tag, e hoje em dia está de maneira oficial no próprio Android Studio. Então, pode ser que no futuro você não tenha mais essa tag, mas a opção já esteja ali nativamente.
Podemos clicar no botão “Next”, e vamos seguir então com a criação de um projeto comum. Podemos, por exemplo, definir um nome, que vamos deixar como “GenIA”, e vamos deixar o pacote com com.alura.genia
, que é a nossa Generate AI. Não precisamos alterar nenhum outro parâmetro. Vamos deixar a opção de Kotlin DSL como está e clicar no botão “Next”, e aqui tem um detalhe que precisamos prestar um pouco de atenção.
Quando clicarmos no botão “Generate API key with Google AI Studio”, ele vai abrir um novo site no nosso navegador. Caso você nunca tenha acessado esse site, a primeira coisa que vai aparecer é um aviso de termos de serviço, e você pode marcar a primeira caixinha para poder aceitar esses termos e poder utilizar o Gemini. Vamos clicar na opção “Continue”, depois de marcar essa primeira caixinha, recomendamos que você leia as licenças, e logo de cara já teremos então essa tela de “API keys”, e você pode clicar em “Create API Key” no centro da página. Quando fizermos isso, ele abrir uma nova aba e pedir para criar uma chave novamente, podemos clicar em “Create API key in new project”.
O objetivo aqui é gerar uma chave que conecta nossa conta a algum projeto do Android, que teremos disponibilizado na plataforma da Google. Para a Google ter um controle de quem está utilizando essa API, precisamos gerar uma chave, similar ao que vários outros serviços já fazem. Essa chave é uma sequência alfanumérica e depois que ela for gerada, podemos clicar em “Copy” (Copiar).
Agora, podemos voltar para o nosso projeto no Android Studio. De volta no Android Studio, podemos colar a chave no campo “API Key” que estava vazio.
Atenção: recomendamos que você não compartilhe essa chave com ninguém, porque ela está justamente ligada à sua conta da Google.
Nesse caso, vamos utilizar essa chave agora, depois que terminarmos de gravar, vamos invalidá-la, então você também não vai conseguir utilizá-la.
Feito isso, podemos clicar em Finish (Finalizar), e aguardar o projeto ser construído. Então, ele vai abrir o projeto e fazer algumas configurações, é um procedimento um pouco demorado, teremos um erro que deve surgir no projeto que foi compilado.
Esse erro vai ser justamente no arquivo MainActivity
, que ele deve abrir por padrão, e na nossa MainActivity
, que é a nossa tela principal, o BuildConfig
provavelmente não vai ser reconhecido. Isso acontece porque esse arquivo de BuildConfig
está relacionado a alguma das opções que veremos lá na própria documentação do Gemini, para poder configurar as chaves de maneira segura.
Não vamos aprofundar muito nisso, vamos apenas corrigir esse erro. Ele dá a opção de fazer o Import Class nesse momento, só que se fizermos o Import Class dessa classe padrão, ele provavelmente não vai funcionar.
Então, recomendamos que você clique na opção para poder construir o nosso projeto novamente, no topo da interface temos o ícone de um martelo que corresponde à opção “Make Module”. Vamos clicar nessa opção no canto superior do Android Studio, ali na parte direita, e vamos aguardar ele fazer o build do Gradle na parte inferior do Android Studio.
Nosso projeto terminou de fazer o build, e ele já trouxe o erro que está na linha 50. Para corrigir esse erro, podemos simplesmente apagar esse BuildConfig.apiKey
da linha 50, e começar a escrever BuildConfig
novamente.
Duas opções devem aparecer, sendo que precisamos selecionar aquela que tem o com.
seguido do nome do nosso pacote, que no nosso caso é o com.alura.genia
. Podemos então colocar um ponto no final e deve aparecer a sugestão “apiKey”, podemos selecioná-lo.
val generativeModel = GenerativeModel(
modelName = "gemini-pro",
apiKey = com.alura.genia.BuildConfig.apiKey
)
Se usarmos o atalho “Ctrl + B” nesse “apiKey”, a mesma chave que acabamos de girar no site da Google vai estar armazenada nesse projeto, de uma maneira segura, gerada automaticamente pelo plugin do Gradle.
Podemos então rodar o nosso aplicativo com o “Shift + F10”, e ver que esse projeto já está todo configurado, podemos apenas testá-lo. O nosso aplicativo rodou, já estamos indo com o nosso emulador em tela, e das várias funcionalidades que o Gemini tem, uma delas é sintetizar um texto, ou seja, fazer um resumo de um texto que passamos.
Quando rodamos o aplicativo, a primeira coisa que ele vai sugerir nessa interface, que tem justamente um campo para poder inserir informações, é digitar um texto e pedir para ele se resumir (“Enter text or a URL to summarize”). Então, pegaremos um texto bem extenso, que é um texto da documentação do Gemini, vamos clicar na caixa de texto e colar.
É um texto com várias linhas que descreve o Gemini, como ele é um concorrente do ChatGPT, e podemos clicar na opção “Go” depois de colar esse texto. Ele vai fazer um pequeno loading. Esse loading é basicamente o nosso aplicativo consultando a API do Gemini, mandando essas informações que a pessoa usuária, que no nosso caso somos nós, inserimos e trazendo algum resultado.
Então, tínhamos um texto com várias linhas e pedimos para ele ser resumido, sintetizado. Agora temos um texto muito menor, mas que ainda contém toda a essência do texto anterior. Ou seja, o texto foi interpretado e resumido mantendo os principais pontos-chave com relação às tecnologias. Foram mantidos o Google DeepMind, Gemini, ChatGPT, dentre outras.
Se voltarmos para o código que temos além do emulador, podemos perceber que na MainActivity
é chamado o SummarizeViewModel
. Podemos clicar nele e usar o atalho “CTRL + B”, que vai nos redirecionar para o arquivo “SummarizeViewModel.kt”. Dentro desse ViewModel
temos um sistema muito similar ao que nós já utilizamos em vários outros cursos, seguindo a documentação oficial do Android. É dito que uma configuração específica foi feita utilizando a API do Gemini para que, toda vez que ele passar na linha val prompt = “Summarize the following text for me: $inputText”
, ele pegar o texto que a pessoa usuária colocou e adicionar essa nova instrução, que é a de resumir o texto.
Mas, se quisermos, podemos fazer o Gemini não ter nenhuma instrução anterior para poder entender um pouco melhor como utilizá-lo. Essa é uma ideia bem simples de adaptar nesse código: ao invés de fazer esse val prompt
conter todo esse texto “Summarize the following text for me:”
podemos fazer o val prompt
ser igual apenas ao inputText
.
fun summarize(inputText: String) {
_uiState.value = SummarizeUiState.Loading
val prompt = inputText
}
E se rodarmos o nosso projeto com essa única modificação e aguardarmos ele subir, a partir de agora, dentro desse nosso emulador, temos todo acesso ao potencial do Gemini com relação a texto. Então, podemos dar qualquer instrução para ele que ele vai seguir.
Por exemplo, vamos clicar em Text to Summarize
no nosso aplicativo e colar o texto “liste as 10 primeiras versões do Android”. Vamos clicar em “Go” e o Gemini tem justamente todo o conhecimento sobre as versões do Android. Ele vai trazer uma lista, inclusive enumerada, com várias das primeiras versões do Android.
Podemos passar várias informações, pedir para ele gerar histórias, para ele organizar listas, gerar códigos. E foi muito rápido o acesso que tivemos. Podemos começar a explorar a possibilidade de utilizar o Gemini sem precisar fazer uma série de configurações.
Inclusive essa mesma do Build Gradle
que vimos, ela é um pouco mais complicada, mas já vem por padrão feita e é algo que não precisamos nos preocupar. Porém, o Gemini também tem a possibilidade de lidarmos com outros tipos de informação.
Para isso, podemos voltar mais uma vez ao nosso código no Android Studio e se clicarmos no menu principal no canto superior esquerdo, e selecionar “File > New > Import Sample”. Ele vai abrir uma nova janela. Na caixa de texto dessa janela, podemos digitar “IA” ou “Generate” e aparecerão alguns exemplos logo abaixo. Vamos selecionar o “Google Generative IA Sample for Android (Kotlin)”, logo abaixo de “Jetpack Compose Layouts”.
A inteligência artificial está em versão beta, então temos a opção “Google Generative IA Sample for Android (Kotlin)” duplicada, aparecendo também sob a categoria de Artificial Intelligence. No fim das contas, podemos clicar em qualquer um dos dois “Google Generative”, ele vai trazer o mesmo exemplo.
Selecionando essa opção e clicando em “Next”, ele sugere que criemos um novo projeto. Esse projeto, através do samples
, é bem mais completo. E vamos deixar a configuração padrão que ele escolheu. Vamos clicar em “Finish” e aguardar ele gerar esse novo projeto com esse novo exemplo.
Nosso projeto terminou de buildar. Já fizemos aquelas correções também com relação à nossa chave que vimos no projeto anterior. A única diferença é que aqui ela está no “GenerativeViewModelFactory.kt”, e está em mais de um lugar. Mas foi só adicioná-la no “local properties”. Já adicionamos o apiKey
e buildamos o projeto.
Temos um projeto mais robusto com vários exemplos de implementação do Gemini que você pode adaptar e também entender melhor estudando como ele funciona. Uma diferença que teremos é que aqui já são definidos vários tipos de modelos diferentes ao longo do código deste ViewModel. Então temos o Gemini Pro, o Gemini Pro Vision, o Gemini Pro Normal.
Ao executar o projeto que acabamos de importar neste sample, teremos o aplicativo com três opções principais: “Generate text from text-only input”, “Generate text from text-and-image input (multimodal)” e “Build multi-turn conversations (chat)”. Estamos com o meu emulador disponível.
Temos algumas opções para, por exemplo, explorar o modo chat, que é a última opção. Temos a opção para poder explorar o modo texto, que é a primeira. Mas a opção mais interessante nesse caso é a do meio, Generate text from text-and-image input (Gerar Texto a partir de Entrada de Texto e Imagem).
Se clicarmos em Try It (Experimente), podemos adicionar algumas imagens de texto às informações que vamos inserir. Ou seja, se você, como pessoa desenvolvedora, quer criar um aplicativo em que o usuário pode enviar uma imagem, fazer uma pergunta ou, por exemplo, trabalhar em cima de alguma resposta com base no que o usuário acabou de fotografar, este é um código que você pode utilizar de exemplo.
Se clicarmos no botão Mais (ícone de soma do lado esquerdo do campo “Question”), ele vai trazer a galeria do Android. Temos uma foto de uma pessoa e vamos enviar essa foto. Selecionamos a imagem e vamos digitar no campo de texto uma informação que é a seguinte: “qual é o nome do principal objeto do esporte que essa pessoa praticava?”. Vamos clicar em “Go” e vou aguardar a resposta.
Aguardamos um pouco, já temos a resposta e a resposta foi bem direta (“Bola”), mas vamos explicar rapidamente o que aconteceu: A foto que selecionamos quando clicamos no botão de Mais é a foto do jogador de futebol Pelé. E o que o Gemini fez foi basicamente pegar essa imagem, fazer um scan dela, entender quem era a pessoa que estava presente, depois ele foi procurar se essa pessoa jogava algum esporte, entendeu o que era o futebol, depois ele foi ver qual é o principal objeto utilizado no futebol.
Então teve toda uma linha de raciocínio que o Gemini fez através da entrada de uma imagem e também de texto para poder fornecer uma resposta. Ela foi bem sucinta, mas é apenas para poder demonstrar o potencial que existe ao fazer o uso dessa ferramenta nos nossos aplicativos.
Demos esse exemplo um pouco mais complexo, mas justamente para poder mostrar que se você souber aproveitar esse recurso, pode criar aplicações realmente muito úteis para o usuário final.
Vamos deixar os links de tudo que visualizamos abaixo para você poder acessar. Se estiver vendo este vídeo em alguma rede social, não se esqueça de clicar nos botões de gostei para sinalizar que curtiu esse conteúdo. Muito obrigado pela sua presença e até mais!
20min para conclusão
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.