As 3 formas de ganhar dinheiro desenvolvendo apps

10-Mobile-Apps-to-Save-Money

Geralmente escrevo aqui no blog sobre desenvolvimento de apps, ensino a criar apps com React Native ou com Android, por exemplo, e tenho um livro publicado sobre o tema.

Sempre tento incentivar os leitores e meus alunos da faculdade a iniciarem no desenvolvimento de apps por ser uma área com poucos profissionais e que dá muito dinheiro. Claro que jamais diria para que você apenas começasse a programar apps pelo dinheiro, mas obviamente e sem ser hipócrita, se dá para unir o útil (ganhar dinheiro) com o agradável (desenvolver apps), porque não? E é disso que este post irá tratar.

Tenho uma palestra chamada A Revolução Mobile, onde trato dos avanços tecnológicos da telefonia móvel e do mercado de apps que se criou em torno dela. Geralmente na seção de dúvidas, ou depois da palestra, alguns espectadores me perguntam: como ganhar dinheiro com aplicativos?

Mas infelizmente não há apenas uma resposta e felizmente há diversas maneiras diferentes, que se adaptam melhor a cada tipo de app, público, etc. Existem inúmeros posts na Internet sobre monetização de apps, falando de redes de anúncios, venda de digital goods, cobrança por download e por aí vai. Não quero ser mais um dando as mesmas dicas, então vou falar da minha experiência como desenvolvedor de apps e te ensinar como ganhar dinheiro rapidamente com isso.

Obviamente você já terá de ter conhecimentos básicos como desenvolvedor de apps para conseguir dinheiro nessa área.

Se preferir, o mesmo conteúdo deste artigo pode ser conferido no vídeo abaixo.

As 3 formas de ganhar dinheiro desenvolvendo apps

São três as formas de ganhar dinheiro desenvolvendo apps, sendo uma fácil, uma média e uma difícil. Proporcional ao desafio de desenvolver em cada uma destas formas, é o ganho obtido.

Ou seja, a forma fácil, te dará dinheiro e experiência rápidos, mas o teto de ganhos deste método de ganhar dinheiro com apps é limitado, baixo. A forma média é um bom meio termo, mas exige maior profissionalização, o que consequentemente . Já a terceira e última forma, é a única que pode te deixar realmente rico, mas é a que exige a maior dedicação, esforço, conhecimentos, etc. Ou seja, o desafio é enorme!

Curioso para saber quais são as 3 formas de ganhar dinheiro desenvolvendo apps?

Freelas Amadores, Freelas Profissionais e Empreender com Apps.

A tabela abaixo mostra a relação de dificuldade x ganhos de cada um deles, para você ter como referência rápida. Note que descartei aqui “trabalhar em uma empresa”, que seria uma possível quarta forma, mas isso é óbvio, não é?

Matriz de Ganhos x Desafio
Matriz de Ganhos x Desafio

No restante do artigo, eu vou te explicar cada um deles e como você também pode ganhar dinheiro

Freelas Amadores

Desenvolver apps para terceiros, os famosos freelas ou jobs, não é difícil. Não precisa ter uma ideia mirabolante, você pode pegar só trabalhos que se adequem ao seu nível de experiência e ainda por cima, a curto prazo paga muito melhor do que um app tradicional (que ganha centavos com anúncios ou downloads).

Mas o que é um freela “amador”? E qual a diferença de um freela “profissional”?

Chamo de freela amador todo trabalho de desenvolvimento pontual sem que você tenha uma empresa constituída para isso. Nem mesmo uma MEI.

Geralmente obtemos freelas amadores através de indicação de parentes e amigos ou através de plataformas para freelancers. Para que encontrem você como um desenvolvedor de apps, você deverá se cadastrar na maioria dos sites de freelancing que encontrar, como Workana, GetNinjas e FreelancerSelect (brasileiros), e se tiver inglês avançado, no Upwork e no Freelancer.com.

Todos esses sites permitem que você filtre quais tipos de trabalho deseja receber por email e você não é obrigado a fazer nenhum trabalho que não se sinta confortável (que não tenha os conhecimentos por exemplo).

Só isso pode não bastar, então coloque essa informação no seu perfil das redes sociais, de preferência tirando aquelas imagens genéricas de natureza e colocando um banner oferecendo seus serviços lá. Se tiver um blog (como esse) escreva a respeito de desenvolvimento de apps.

Você não tem ideia de quantos trabalhos bons e rentáveis esse blog já me conseguiu e eu comecei com programação de forma 100% amadora, como eu conto no vídeo abaixo.

Vantagens: facilidade, você só pega o job que quiser pegar, trabalhe no seu tempo, 100% remoto, te ajuda a construir seu portfólio inicial.

Desvantagens: baixos ganhos, ninguém paga muito por um projeto tocado por um freelancer amador.

Freelas Profissionais

Geralmente chamamos os freelancers profissionais de prolancers e é muito comum que estes profissionais tenham empresas registradas em seu nome, para poder emitir nota e com isso pegar grandes projetos de maneira legal.

Por que precisa de empresa e nota fiscal?

Porque aqui é uma empresa que te contrata para alguma demanda ou projeto. Eles te dão um briefing do projeto, você faz um orçamento e se tudo der certo o cliente aprova, às vezes exigindo a assinatura de um termo de confidencialidade (NDA) e cessão de direitos autorais do projeto.

Você vai desenvolver o projeto em casa mesmo e ao término, irá entregar o código-fonte e o app pronto à ele para receber o pagamento, geralmente faturado somente após a emissão da nota, o que pode levar alguns dias, já alinhado em contrato prévio.

Este é o segundo nível na escala de ganhos e geralmente você tem de ter alguma experiência com freelas amadores antes de se aventurar em freelas profissionais, até porque as empresas geralmente exigem um portfólio para conhecer o seu trabalho.

Particularmente eu ganhei um bom dinheiro com apps assim, é a maneira mais rápida e fácil de ganhar quantias interessantes, como alguns milhares de R$, em pouco tempo de trabalho: de um final de semana a uma semana, em média. Fiz apps para empresas como Embelleze, LG, Ford e Renault que foram usados em eventos e campanhas publicitárias. Essa experiência com apps para empresas inclusive eu relato no meu livro Criando apps para empresas com Android.

Se soa estranho trabalhar de casa para grandes empresas, saiba que são exatamente as grandes empresas que melhor se adequam à esse modelo de trabalho. Reuniões são feitas via Skype, Teams e Zoom e geralmente elas costumam ligar diariamente ou dia-sim/dia-não para saber sobre o andamento do projeto, em alguns casos mantendo uma planilha ou uma série de documentos compartilhados entre os membros do projeto (você, quem lhe contratou, quem está pagando pelo projeto, etc) para todos terem mais visibilidade. Não tem mistério, e dá para trabalhar de pijamas! 😀

Mas como ser “descoberto” pelas empresas como um programador de apps?

Uma startup que está bombando muito recentemente por conectar prolancers com grandes projetos de empresas é a BossaBox. Se liga nesse vídeo que minha amiga por lá gravou para meus alunos:

 

Outra ideia é ser conhecido pelas agências digitais. Toda vez que uma empresa grande quer um app, ela não abre os classificados do jornal para ver se alguém quer desenvolver pra ela. Ela contrata uma agência de publicidade ou uma agência digital, que são empresas que tocam demandas ligadas à marketing, desenvolvimento e redes sociais para outras empresas.

Diversos apps que eu fiz vieram de indicação de pessoas que eu conheço dentro dessas agências, que geralmente terceirizam a parte do desenvolvimento para pessoas externas, como eu. Assim, dê uma procurada na Internet por essas agências (procure termos como agência de publicidade, agência digital e produtora digital) e mande email pros caras, oferecendo os seus serviço.

Vantagens: ganhos bem superiores aos freelas amadores, construção de portfólio mais profissional, experiência com projetos reais.

Desvantagens: maior pressão por prazos e entregas, burocracia com empresas, contratos e notas fiscais.

Criando apps para empresas com Android

Empreender com Apps

A terceira e última forma de ganhar dinheiro desenvolvendo apps é criando os seus próprios apps. Esse é de longe o jeito mais divertido mas também o mais arriscado. Afinal, e se ninguém baixar o app que você desenvolveu?

E se ninguém gostar dele?

Você não vai ganhar um centavo por desenvolvê-lo e todos os seus ganhos vão derivar do modelo de negócio para ganhar dinheiro com apps que você escolher, como falo em mais detalhes neste outro artigo.

Mas ao mesmo tempo, este é o único jeito em que você realmente tem a chance de ganhar dinheiro DE VERDADE. Em grandes quantias. Afinal, só o empreendedorismo é capaz de mudar o seu patamar social através da inteligência.

O grande desafio aqui é você ter uma boa ideia de app que as pessoas queiram usar, algo que eles precisem ou desejem. Grandes empresas bilionárias foram construídas ao redor de boas ideias de apps como Whatsapp, Waze e Instagram.

Outra estratégia é, ao invés de ter a ideia de 1 bilhão, você pode ter várias ideias que te gerem alguns milhares de R$, como o sugerido e ensinado no livro O Império dos Apps, cuja resenha você confere neste artigo, onde o autor lhe ensina como criar um lifestyle business baseado em apps que lhe gerem renda passiva.

Ainda assim, é o caminho mais desafiador!

Vantagens: possibilidade de altos ganhos, sem patrão, você faz um app e ele fica gerando receita passiva.

Desvantagens: até engrenar você gasta bastante tempo e dinheiro, alto risco de não gerar nada de retorno, você precisa ter boas ideias.

Uma estratégia ligeiramente diferente desta pode ser conferida neste vídeo aqui:

Conclusão

Esses dias estava palestrando em uma faculdade sobre Carreira em TI e em certo ponto falei desse assunto, ‘ganhar dinheiro desenvolvendo apps’. Falei das demandas, da carência do mercado, de como dá pra ganhar uma grana boa. Depois de mim chegou um palestrante atrasado que não viu minha palestra e começou a falar da empresa dele, uma agência digital, e não é que ele tocou nos mesmos pontos!! Ele não tinha quem fizesse os apps, estava perdendo dinheiro, que os projetos eram bons e pagavam bem, etc, etc. Foi muito engraçado, todos os alunos começaram a se olhar e a sussurrar, achando que tínhamos combinado, hehehe

O mercado está aí, o conhecimento você encontra aqui no blog mesmo, especialmente na seção ‘Meus Livros‘.

O que está esperando? ‘Bora ganhar dinheiro com apps?

Curso React Native

 

Como criar um aplicativo Android que envia emails

aplicacoes_email_android
Hoje vou ensinar como você pode enviar emails através de um app Android.

Diversos apps Android que desenvolvi para empresas como LG, Embelleze e Renault necessitavam que, após o usuário usar o app, que a interação fosse enviada por email para o próprio usuário e/ou para a empresa dona do app. Essa interação podia ser o preenchimento de um formulário, uma foto tirada com o app, as respostas de um quiz, etc.

Para exemplificar vamos criar uma tela que pede o nome e email de uma pessoa, e quando ela clicar em um botão no final do formulário, vamos enviar um email para ela. Se você nunca fez um app Android antes, recomendo a leitura deste ebook bem curtinho.

O layout XML da tela, chamada aqui de activity_main.xml, segue abaixo:

Isso deve gerar uma interface como abaixo:

Envio de Email
Envio de Email

Agora, na activity por trás dessa tela, chamada de MainActivity, temos de adicionar o código do evento de clique desse botão, que chama um método de envio de email.

O método enviarEmail chamado no clique do botão anterior deve ler os campos informados pelo usuário (nome e email), verificar se o smartphone está conectado na Internet (afinal, se não estiver vai dar erro no envio do email) e depois envia o dito cujo usando uma outra classe Java.

Note que me preocupei em realizar o envio do email em uma thread separada, como manda as guidelines do Android, evitando que a tela fique travada durante o envio, o que pode demorar alguns segundos dependendo da sua conexão com a Internet e do seu provedor de email.

Curso React Native

Também incluí um comentário contendo o código para adicionar um anexo, que apenas precisa da URI de um arquivo armazenado no seu dispositivo.

A classe Mail utilizada no exemplo anterior foi encontrada na Internet há vários anos atrás e se mostrou bem confiável. Não lembro o quanto já customizei ela, mas de qualquer forma segue abaixo a versão mais atual que possuo, na íntegra (crie ela em outro arquivo de classe Java).

Aqui você deve prestar atenção no construtor vazio da classe Mail para colocar as configurações do seu servidor, como host SMTP, porta SMTP, se vai usar SSL, usuário e senha do seu email, etc.

Caso você nunca tenha enviado um email via software antes, é necessário que você se autentique em algum servidor de email com um usuário e senha válidos para poder enviar emails em seu nome. Ou seja, você vai ter de descobrir as configurações SMTP do seu provedor de email, além de saber o seu usuário (o próprio email) e senha (sua senha) para autenticação. São aquelas mesmas configurações usadas para o Outlook, sabe? Essas informações podem ser facilmente encontradas na Internet se seu email for Gmail, Hotmail, etc. Caso contrário consulte a empresa que lhe fornece emails (ex. Umbler) para obter as configurações de envio.

Para que essa classe funcione você vai precisar adicionar 3 bibliotecas Java ao seu projeto, que disponibilizo nesse zip. Basta descompactar e colocar os arquivos na pasta libs do seu projeto de app e pela IDE (normalmente o Android Studio) ir até a pasta libs e com o botão direito selecionar a opção ‘Add as library’ ou semelhante.

Add as Library
Add as Library

E para encerrar o que é necessário para que o código de envio de email funcione, falta criarmos o método isOnline() na MainActivity.java, responsável por testar a conexão com a Internet, pré-requisito para envio de email, conforme abaixo.

Como estamos mexendo com recursos de hardware como Internet, conexão, etc. precisamos pedir essas permissões em nosso AndroidManifest.xml como abaixo.

E se for usar anexos, não esqueça de adicionar também a permissão de leitura de arquivos.

Isso deve ser o suficiente para que você consiga enviar emails a partir desse app bem simples para o email informado no formulário a primeira tela. Esses códigos podem ser usados em apps maiores que fazem outras coisas e onde você apenas usará essa lógica para avisar alguém ou enviar uma mensagem. Daí a parte da criatividade eu deixo com você. 😉

Dica Avançada

Se seu app for utilizado por muitos usuários e/ou tiver um volume de envio de emails muito grande, procure usar soluções profissionais de SMTP Gateway como AWS SES, SendGrid e Mailgun. Jamais confie nos serviços de contas de email fornecido por provedores de hospedagem pois elas são configuradas para pequenos envios, jamais para envios em lote e rapidamente seu provedor irá bloquear a conta de email que seu app usa se enviar muitas mensagens por hora.

O SendGrid inclusive tem um plano gratuito em que você pode enviar 100 mensagens por dia de graça.

* OBS: curtiu o post? Então dá uma olhada no meu livro de Android clicando no banner abaixo pra aprender a criar outros tantos apps incríveis!

Criando apps para empresas com Android

Tutorial app Android com Firebase – Realtime Database

Este artigo é uma continuação da série “Tutorial app Android com Firebase” onde ensino como utilizar todos os serviços oferecidos pela plataforma de Backend-as-a-service do Google. Hoje, vou falar do serviço mais famoso deles: o realtime database, que permitiu a muitos desenvolvedores de apps que não sabem criar APIs para fazer conexão com banco de dados externo, pudessem colocar seus apps em produção rapidamente.

Não apenas isso, como o próprio nome sugere, a realtime database do Firebase permite comunicação em tempo real com o banco de dados, incluindo uma arquitetura no melhor estilo dos padrões Observer e Pub-Sub. Além disso, permite salvamento offline com sincronização automática quando a conexão é reestabelecida.

Usarei como exemplo neste tutorial o app ForcaVendas que iniciamos no primeiro artigo desta série. No entanto, não se preocupe, ele apenas possui uma tela de login e uma MainActivity com um olá mundo. Sendo assim, você consegue fazer este tutorial sem ter feito os anteriores, desde que já saiba como programar para Android, é claro. Também existe a possibilidade de baixar os fontes do app através do formulário existente no final de cada post desta série.

#1 – Configurando o Realtime Database

Primeiramente, para configurar o database do Firebase para o seu app, vá no menu Tools > Firebase do Android Studio e clique na opção “Save and retrieve data” da seção Realtime Database.

Configurando o Firebase
Configurando o Firebase

Na seção seguinte que vai se abrir temos os passos de configuração propriamente ditos. O passo 1 é bem simples e exige que você se conecte ao Firebase primeiro.

Realtime Database
Realtime Database

O segundo passo adiciona as dependências para se trabalhar com Realtime Database no seu app e pedirá confirmação para instalar dependências e alterar alguns arquivos de configuração.

Feito isso, estamos prontos para usar nosso banco realtime!

#2 – Entendendo o Realtime Database

Como explicado no site oficial do Firebase Realtime Database:

O Firebase Realtime Database é um banco de dados hospedado na nuvem. Os dados são armazenados como JSON e sincronizados em tempo real com todos os clientes conectados.

Ou seja, você cria o seu banco na nuvem do Firebase e conecta seu app nele para enviar e receber objetos JSON em tempo real. Simples assim. As mudanças no banco são refletidas automaticamente para todos os dispositivos (e aplicações, pois você pode usar na web também) conectados, em tempo real (daí o nome). Isso lembra os documentos do MongoDB. O site oficial ainda diz que:

Todos os dados do Firebase Realtime Database são armazenados como objetos JSON. Pense no banco de dados como uma árvore JSON hospedada na nuvem. Ao contrário de um banco de dados SQL, não há tabelas nem registros. Quando você adiciona dados à árvore JSON, eles se tornam um node na estrutura JSON com uma chave associada.

Um recurso muito importante do Realtime Database é que combinando com o suporte de autenticação do Firebase você pode definir quem tem acesso a quais dados, garantindo a autorização dos mesmos. Existe uma opção de deixar o seu banco público, mas na maioria dos casos isso não é recomendado.

Como o Realtime Database é associado ao seu projeto Firebase, por padrão ele só permite o acesso aos dados por usuários autenticados, como mostra a imagem abaixo do Firebase Console.

Firebase Realtime Database Authentication
Firebase Realtime Database Authentication

Caso não tenha feito o tutorial de autenticação em Firebase, você pode opcionalmente deixar os dados públicos na mesma tela acima. De qualquer forma recomendo dar uma olhada no respectivo tutorial para entender o básico da plataforma Firebase, pois é lá onde explico isso.

Outro recurso interessantíssimo do Realtime Database é o suporte offline. Se seu app ficar sem Internet, os dados serão salvos localmente e depois sincronizados quando a conexão voltar.

Assim como no MongoDB, a modelagem de um banco no Realtime Database deve ser feita com cuidado, sempre tendo em mente como desejará consultar estes dados depois. Algumas dicas incluem:

  • não aninhe muitos níveis dentro dos seus objetos JSON. Apesar do Firebase suportar até 32 níveis, isso não é uma boa prática por tornar consultas muito pesadas e escritas muito arriscadas.
  • evite a normalização excessiva (espalhando demais os dados) e foque na consulta rápida, mesmo que isso exija duplicação de dados. Em bancos NoSQL, tamanho não é problema, desde que o dado esteja fácil de ler e baixar.

Vale salientar que dificilmente você terá custos enquanto estiver estudando como usar o Realtime Database, mas que dificilmente não terá considerando que para seu app ir para produção você irá querer recursos mais avançados como backup do seu banco, por exemplo, disponível apenas nos planos superiores.

Curso React Native

#3 – Criando a tela de Cadastro

Mesmo que não tenha feito os outros tutoriais de Firebase aqui do blog, não tem problema. Você apenas precisar ter uma aplicação com o template padrão do Android Studio, aquele com a MainActivity contendo um “Hello World” e um floating button no canto inferior direito.

Nos tutoriais anteriores comentei que iria fazer um app de Força de Vendas para autônomos. A ideia é apenas registrar os pedidos, compras e dívidas, de uma maneira fácil de buscar depois, ajudando na organização do vendedor, que geralmente usa caderninhos para isso. Assim, essa MainActivity (a tela inicial) futuramente será a listagem de registros principal do app. Como não temos dados para serem listados ainda, vamos apenas programar o floating button dessa tela nos levar para uma tela de cadastro.

Essa alteração é bem simples, troque o ícone do floating button para algo que faça mais sentido do que o envelope tradicional usando o XML abaixo no activity_main.xml (dentro da pasta res/layout):

Note que alterei somente a propriedade srcCompat que determina o ícone, onde estou usando o ícone de sistema do botão de “+”, que representa bem uma adição.

Agora vamos criar a próxima Activity, de cadastro, do tipo Empty Activity com o nome de AddActivity, aproveitando que o Android Studio criará para nós o arquivo de layout activity_add.xml automaticamente. Mas o que irá ter nesta tela?

Pensando em um fluxo de uso bem simples, os registros deverão conter uma descrição, um valor, uma data e um tipo. O tipo pode ser Venda Paga, Venda Não Paga (fiado, bem comum entre vendedores autônomos) e Venda Futura (apenas tirou um pedido). Obviamente esta é apenas uma proposta, você pode criar algo mais elaborado se quiser.

Com isso em mente, edite seu activity_add.xml para que pareça com isso:

Tela de Cadastro
Tela de Cadastro

Caso você não faça ideia de como criar este layout, recomendo fazer o tutorial de Constraint Layout primeiro ou verificar as diversas lições presentes em meu livro. Se estiver na correria, apenas copie e cole o código XML abaixo no seu activity_add.xml:

Note que para o Spinner exibir corretamente os tipos eu tive de criar outro arquivo XML, desta um de valores (tipos.xml), na pasta res/values. Neste arquivo XML de strings, o qual eu reproduzo abaixo, apenas listo os textos dos valores possíveis, considerando aqui que eles são fixos (caso contrário eu deveria carregar do banco).

E para referenciar este XML no Spinner (o componente visual de seleção de tipo) você usa a propriedade entries, como abaixo (esse código já está contemplado no XML completo da página que mostrei antes):

Agora para conseguirmos chegar até esta página e ver se a tela ficou ok no simulador ou no seu device android físico, devemos programar a ação do floating button existente na MainActivity. Essa ação já vem programada no evento onCreate da Actvity por padrão, para apenas exibir uma mensagem, vamos trocar para realizar a troca de tela.

Com isso programado, já temos o suficiente para testar a nossa aplicação no simulador e ver se conseguimos chegar até a tela de cadastro. Se você veio fazendo este tutorial deste o início, terá de se autenticar como um usuário válido primeiro.

Após você testar e se certificar que este básico está funcionando, vamos fazer mais um ajuste pequeno, porém útil para facilitar a digitação.

Data Atual

O campo data deve vir com a data atual por padrão. Para fazer isso, no onCreate da AddActivity, adicione o seguinte código que pega a data atual e a coloca no campo com id txtData (eu defini esse id para o campo de data, talvez o seu seja diferente):

Quando você abrir a tela de cadastro, encontrará a data atual no respectivo campo. É uma coisa pequena, mas ajuda.

Como este post está ficando extenso, deixarei a parte de conexão com o banco para leitura e escrita para o próximo artigo que deve sair em breve. Aguarde!

* OBS: curtiu o post? Então dá uma olhada no meu livro de Android clicando no banner abaixo pra aprender outras dicas incríveis!

Criando apps para empresas com Android

8 dicas para deixar seus apps Android mais profissionais

A ideia deste post é te dar uma série de dicas práticas que podem agregar mais profissionalismo e capricho às suas aplicações Android. Vão desde “firulas” que costumam impressionar no acabamento final do app até coisas realmente importantes como o ícone, que é a marca do seu app nas lojas e nos smartphones dos seus usuários.

Sendo assim, separei 8 dicas para deixar seus apps Android mais profissionais:

Vamos lá!

#1 – Como tocar sons no seu app

Geralmente apps são “mudos”. Ter um app que toca pequenos sons, como indicativos de que algo mudou ou terminou, é um grande diferencial, pois ajuda a prender a atenção do usuário no seu app. Não falo para sair tocando uma playlist de músicas, mas pequenos áudios. Por exemplo, em um app de cronômetro, você pode tocar um bip quando o tempo termina.

Primeiramente, para obter arquivos de áudio gratuitos, eu recomendo o site freesound.org. Segundo, para poder salvar arquivos de áudio no seu app, você deve ter uma pasta raw dentro de res. Sim a mesma pasta res onde você tem as pastas de imagens e ícones. Crie uma pasta raw lá dentro, para guardar os seus MP3. Isso vai fazer com que eles sejam tratados assim como você trata suas imagens, por ids ao invés de caminhos, como no exemplo abaixo, onde carrego e  toco um arquivo chamado som.mp3 (a extensão é omitida, assim como nas imagens).

O primeiro parâmetro é o contexto (geralmente a activity atual) e o segundo é o raw resource (binário). O método create apenas carrega o mesmo para a memória, e pode ter seu resultado armazenado em uma variável, enquanto que o método start dá o play.

#2 – Como criar layouts landscape

Quando eu ainda trabalhava fazendo projetos de apps para empresas, uma das coisas que eu sempre tentava amarrar aos contratos era a variação de layout retrato-paisagem (portrait-landscape). Isso porque geralmente criamos o layout em uma posição e não damos muita bola para a posição contrária. Eu inclusive fixava a posição do app que queria através de configurações específicas, para garantir que o usuário não iria querer usar de outro jeito.

Nos casos em que não é possível definir isso com o cliente (ele realmente deseja que o app funcione em ambas posições) você pode fazê-lo criando landscape variations de seus layouts principais, que são arquivos de layout novos que serão carregados automaticamente pelo Android somente no caso do smartphone estar na posição landscape. Eles possuem o mesmo nome do layout original e os mesmos componentes de tela, apenas em posições e possivelmente com dimensões diferentes.

Para criar uma landscape variation é muito simples. Como o editor de layout aberto, no topo da janela de preview, junto ao botão de mudar a orientação do preview, você encontra a opção “Create Landscape Variation” que cria a variação para você, como abaixo.

Landscape Variation
Landscape Variation

Assim, basta que você trabalhe o posicionamento e dimensionamento dos mesmos elementos da versão portrait para este layout landscape e não há nada com o que se preocupar.

#3 – Como suportar múltiplos idiomas no app

Esse foi um dos primeiros detalhes profissionais que aprendi a colocar em apps, principalmente aqueles que deveriam servir a um público global. Muito mais fácil do que em outra plataformas, no Android basta definir os textos em arquivos XML, um para cada idioma, e nas suas interfaces usar as chaves destes textos no lugar dos literais que o Android troca automaticamente os textos conforme o idioma do dispositivo.

Eu explico este processo em detalhes e com ilustrações neste post.

#4 – Como ter um ícone matador

Cansado de todos seus apps Android possuírem o mesmo ícone default?

Aqui existem duas abordagens para ícones diferentes: uma delas é você usar ou compor o seu ícone a partir de ícones free já existentes na Internet, em sites como findicons.com e iconfinder.com.

Já a outra alternativa é terceirizar para estrangeiros fazerem o ícone para você, usando sites como freelancer.com e fiverr.com. Neste último, o seu ícone deve sair por cerca de U$5, oque é uma bagatela para ter um ícone feito por um profissional. É o mesmo processo que uso para as capas dos meus ebooks.

Depois que tiver seu ícone novo, use estas instruções para trocar o ícone default.

Curso React Native

#5 – Como criar datas humanizadas

Existem diversos formatos de datas disponíveis no mercado. Enquanto que uns são bons a nível de sistema, como o ISO-8601, eles são péssimos para exibição aos usuários. Outros formatos confundem os usuários, como o americano vs brasileiro, onde o mês muda de lugar.

Para evitar estes problemas e até mesmo deixar o app mais amigável, existem as datas humanizadas relativas, como “ontem”, “há 15 minutos atrás” ou “dois dias atrás”. E quem pensa que é difícil fazer isso, está redondamente enganado uma vez que o Android possui suporte nativo (e em múltiplos idiomas) à esta feature, como mostra o exemplo abaixo.

A classe DateUtils possui diversas funções helper, sendo a getRelativeTimeSpanString a que nos interessa para criar datas relativas humanizadas em Android. O primeiro parâmetro é a data original do registro (01/12/2017, por exemplo, mas em um objeto java.util.Date). O segundo parâmetro é a data de comparação (new Date() pega a data atual, 02/12/2017, quando escrevo este post). E por fim, o terceiro parâmetro é o timespan de referência para comparação, que aqui considera milissegundos, para exibir mensagens como “1 minuto atrás”. Caso minutos não lhe interessem, você pode usar outras constantes como HOUR, WEEK, MINUTE, etc.

O resultado é transformado em uma string que, usando as datas de exemplo que sugeri, retornará “1 dia atrás”.

#6 – Como criar layouts responsivos

Assim como no caso das variações de landscape que citei na dica 2, quando fazia projetos de apps para empresas eu sempre tentava amarrar as resoluções mínimas e máximas dos dispositivos para os quais eu estava projetando o app. No caso específico de empresas, geralmente eles compravam um lote de smartphones iguais e eu projetava exatamente para a resolução daqueles smartphpones.

No entanto, quando o app é para o público das lojas, isso fica muito mais difícil. Sendo assim, você deve se preocupar com coisas como a diferença entre px e dp e em usar layout managers mais adaptáveis como o Constraint Layout. Use os posts citados para entender mais sobre ambas configurações e conseguir construir apps com layouts mais responsivos.

#7 – Como acessar bancos de dados remotos em Android

Esta é sem sombra de dúvida a dúvida mais comum e o tutorial mais buscado dentre todos os leitores do meu blog e de muitos usuários do StackOverflow. Afinal, dificilmente um app moderno é uma ilha que não se conecta há mais nada, e na maioria das vezes o alvo das conexões dos apps são bases de dados já existentes, alimentadas até mesmo por outros sistemas.

Mas como acessar bancos de dados remotos em Android? Bom, não vou entrar em detalhes aqui do porque não é possível a um app Android se conectar diretamente a um banco de dados, mas saiba que você deve fazê-lo sempre através de APIs. Aqui no blog eu ensino duas maneiras de acessar APIs: o jeito nativo e o jeito usando uma lib muito famosa, a Retrofit.

Siga os referidos links para aprender da maneira que mais lhe agradar.

#8 – Como criar listas personalizadas em android

Então você está cansado daquelas listviews caretas e sem qualquer estilo? Saiba que você pode criar listas com a aparência que você quiser, tanto usando componentes antigos quanto novos em Android e listas elaboradas são a base de apps que precisam exibir diversos itens.

Tem dois tutoriais aqui no blog que lhe ensinam a criar listas matadoras, um deles usando ListViews (jeito antigo e nativo) e outro usando RecyclerView (jeito mais moderno, como uma lib da Google). São jeitos relativamente parecidos, mas guardam suas diferenças e recomendo dar uma olhada em ambos links. Na minha opinião, se for para fazer listas simples, vou de ListView, se for listas elaboradas e personalizadas, vou de RecyclerView, principalmente por questões de performance.

E aí, o que achou da dica de hoje? Tem alguma dica para compartilhar? Deixe nos comentários!

* OBS: curtiu o post? Então dá uma olhada no meu livro de Android clicando no banner abaixo pra aprender outras dicas incríveis!

Criando apps para empresas com Android

Como diminuir o tamanho do apk Android: 3 dicas incríveis!

O post de hoje foi pesquisado e escrito por mim, mas com as técnicas descobertas e aplicadas pelo meu colega de serviço Cleber Henriques, líder técnico de Android no Banco Agiplan. Com essas técnicas ele conseguiu reduzir o tamanho do nosso apk em torno de 50% usando as técnicas abaixo descritas.

Tem pouco mais de um mês que estou trabalhando no Banco Agiplan. Somos um banco com um foco muito grande no mobile banking, uma vez que não possuímos agências físicas, sendo puramente um banco digital. Como um banco de varejo com um grande foco nas classes C e D, temos muitos correntistas com smartphones extremamente simples, sem grandes recursos e isso inclui armazenamento interno, que concorremos com o espaço consumido pelo Whatsapp, jogos e é claro, o Facebook, o devorador de armazenamento!

Conseguir gerar um apk pequeno, que não consuma muitos recursos do smartphone do nosso cliente, é uma garantia que teremos de que a) ele vai conseguir baixar o app rapidamente, talvez até com 3G e b) ele não vai desinstalar nosso app caso fique sem espaço no smartphone. Ele vai desinstalar apps que realmente ocupem um espaço grande.

Se o app que você trabalha também possui um público semelhante, usar as dicas abaixo podem ajudá-lo enormemente. Obviamente o ganho com estas técnicas pode variar para mais ou para menos, dependendo dos assets que você possui e que serão otimizados.

#1 – Otimize suas imagens com o ImageOptim

ImageOptim
ImageOptim

Na maior parte das vezes, o “inchaço” dos apps é devido à grande quantidade de imagens necessárias para se construir um app bonito e com boa usabilidade. Claro que isso não é uma regra, mas é o que geralmente acontece.

Assim como na web, focar seus esforços de otimização nas imagens é atacar 20% do app que geram 80% do tamanho de seu app, como no bom e velho princípio de Pareto.

Comece usando o ImageOptim, uma aplicação gratuita e de código aberto disponível para várias plataformas que diminui o tamanho de imagens JPG, PNG e GIF sem perda de qualidade usando diversas técnicas e aplicações diferentes (AdvPNG, AdvanceCOMP, OptiPNG, Pngcrush, JpegOptim, jpegtran, Gifsicle e PNGOUT).

Não tem bruxaria aqui, apenas matemática. Através do descarte de informações “inúteis” para o app como comentários e perfis de cor, consegue-se reduzir de 20-60% do tamanho original de imagens não otimizadas. Para quem já usou o recurso “Save for the Web” do Photoshop, sabe que os ganhos são bem expressivos, pois a mecânica aqui é a mesma.

O uso é muito simples: você apenas arrasta as imagens para dentro da janela do software e elas são otimizadas.

#2 – Converta suas imagens para WebP

Imagens que não possuam transparência podem ser convertidas para o formato WebP, que é um formato de imagem criado pelo Google que fornece imagens extremamente comprimidas sem perdas de qualidade aparente (assim como JPG), em um algoritmo de compressão muito superior ao JPG tradicional. Imagens WebP são suportadas a partir do Android 4.0 (API 14) sendo possível usar este formato para imagens com transparência se definir o SDK mínimo do seu projeto como 4.3 (API 18).

O Android Studio pode converter PNG, JPG, BMP ou imagens GIF estáticas para o formato WebP. Você pode converter imagens individuais ou pastas de imagens. Para converter uma imagem ou pasta de imagens, faça o seguinte:

  • Clique com o botão direito do mouse em uma imagem ou pasta de imagens, e então escolha a opção “Convert to WebP”.
  • A janela “Converting Images to WebP” vai se abrir, sendo que as configurações default dependem do SDK mínimo que estiver usando no app:
WebP Convert Image
WebP Convert Image
  • Selecione tanto lossy quanto lossless, sendo que lossless (sem perdas de qualidade) está disponível apenas com SDK mínimo 18+. Se você selecionar lossy (com perdas), defina a qualidade da codificação e se deseja ou não ver um preview da imagem convertida antes de salvar.
    Você também pode escolher pular a conversão de quaisquer imagens cuja versão final fique com tamanho maior da versão original, ou ainda imagens com transparência. Uma vez que o Android Studio somente permite criar imagens WebP transparentes se seu SDK mínimo for 18+, o checkbox “Skip images with transparency/alpha channel”é automaticamente selecionado se seu SDK mínimo for menor de 18.
  • Click OK para iniciar a conversão.  Se você está convertendo mais de uma imagem, a conversão é um passo único que não pode ser desfeito, tenha isso em mente.
    Se você selecionou a conversão lossless, a mesma acontecerá imediatamente. Suas imagens serão convertidas no lugar das originais. Se você selecionou lossy, continue lendo os passos abaixo.
  • Se você selecionou lossy, e escolheu ver o preview de cada imagem convertida antes de salvar, o Android Studio vai lhe mostrar cada imagem durante a conversão para que você inspecione o resultado. Caso contrário, ele fará a compressão de todas imagens automaticamente. Durante a etapa de preview, você pode ajustar a configuração de qualidade de cada imagem, como abaixo.
Qualidade da conversão
Qualidade da conversão

Na esquerda temos a imagem original, e na direita a comprimida, exibindo o tamanho dos arquivos (note um ganho de 68% nesse exemplo). Ajustando o slider você vê em tempo real as mudanças na imagem comprimida, sendo que na área central aparecem os pixels diferentes nelas.

Curso React Native

#3 – Exporte seu apk por densidade de tela

Por padrão, o Android trabalha com as imagens para diferentes resoluções de tela tendo diferentes versões de cada imagem, certo? Isso é feito na pasta drawables, onde temos subpastas para densidades de tela como ldp, mdpi, hdpi, etc, conforme aumentam o tamanho e densidade das telas. Não é raro ter três versões de cada imagem o que, mesmo otimizadas, consome um grande espaço dentro do seu app.

Não seria muito legal se o seu app tivesse somente as imagens necessárias para o “tipo” de dispositivo no qual ele está sendo instalado? Assim, quem tem um Android low-end teria apenas pequenas imagens, enquanto que os usuários felizes de Androids high-end teriam apenas as imagens grandes.

Isso é possível de ser feito, usando o próprio Android Studio, mais especificamente usando o Gradle adequadamente. O Gradle é tão poderoso e versátil que não permite apenas criar apps com imagens diferentes, mas com código diferente também (usando ABI – Application Binary Interface)! Além disso, embora eu esteja mencionando aqui o recurso de exportar vários apks baseados em densidade de tela, você exportar vários apks baseado em variáveis de build também (mas isso fica para outro tutorial).

Para configurar seu build para múltiplos apks, adicione um bloco ‘splits’ no seu arquivo build.gradle a nível de módulo. Dentro do bloco ‘splits’, forneça um bloco ‘density’ que especifique como o Gradle deve gerar APKs por densidade. No seu bloco density, forneça uma lista de densidades de tela desejadas e tamanhos de tela compatíveis.

A lista de tamanhos de tela compatíveis deve somente ser usada se você precisa de elementos <compatible-screens> no manifesto de cada APK.

As opções seguintes do Gradle são usadas para configurar múltiplos APKs baseados em densidade de tela:

  • enable: se true, Gradle gera múltiplos APKs baseados nas densidades de tela que você definir. O valor default é false.
  • exclude/include: uma lista de densidades separadas por vírgula que o Gradle deve ignorar ou adicionar na geração de múltiplos APKs (serve para excluir as densidades que seu app não suporta).
  • reset(): limpa a lista default de densidades de tela. Use somente em conjunto com o elemento include. O exemplo a seguir define a lista de densidades para somente ldpi e xxhdpi chamando reset() para limpar a lista e depois usando include.

  • compatibleScreens: especifica uma lista de tamanhos de tela compatíveis separados por vírgula, injetando nós <compatible-screens> no manifesto de cada APK. Esta configuração fornece um jeito conveniente de gerenciar tanto densidade de tela quanto tamanho na mesma seção. Entretanto, tenha em mente que usar <compatible-screens> pode limitar os tipos de dispositivos nos quais o seu app irá funcionar.

Para garantir o máximo de compatibilidade, o Gradle sempre irá gerar um APK universal, mais “inchado”, que contém todos os recursos, independente de densidade, que servirá de fallback para os dispositivos que não se encaixem nos padrões estabelecidos. Esta versão universal deve ser publicada juntamente com as demais.

O exemplo seguinte gera um APK separado para cada densidade listada, exceto ldpi, xxhdpi, e xxxhdpi. Isto é feito usando exclude para remover três densidades da lista default.

Para mais detalhes de como distribuir o seu app para tipos específicos de telas e dispositivos, consulte este artigo.

Uma vez que você configure o seu build.gradle a nível de módulo para compilar múltiplos APKs, clique em Build > Build APK para compilar todos os apks para o módulo selecionado no painel Project. Para mais informações, consulte a documentação oficial.

E aí, o que achou do artigo de hoje? Conseguiu alguma economia no seu app? Coloque outras técnicas que você conhece nos comentários!

* OBS: curtiu o post? Então dá uma olhada no meu livro de Android clicando no banner abaixo pra aprender a criar outros tantos apps incríveis!

Criando apps para empresas com Android