Conheça o Empreendedorismo Digital

Na data em que escrevo este post, eu estou trabalhando há 11 anos com tecnologia. De todo este tempo, faz 7 anos que decidi me tornar também, além de profissional, empreendedor. E desde 2013 decidi que iria incentivar cada vez mais pessoas a seguirem esse mesmo caminho do empreendedorismo.

Eu realmente acredito que somente pessoas empreendedoras podem fazer a diferença no mundo, nas empresas, na vida de todos nós. Somente pessoas empreendedoras podem nos tirar dessa crise mundial (e principalmente nacional) e como eu não tive essa oportunidade de conhecer o empreendedorismo mais cedo, quero dar essa oportunidade aos estudantes de agora, pensando no futuro de todos nós.

“Mas como assim, pessoas empreendedoras? Eu não quero ter uma empresa ou coisa do tipo.”

Empreender não tem nada a ver com se tornar um empresário. Ou ao menos um não te obriga a ser o outro. Segundo o dicionário, empreender é decidir realizar tarefa difícil ou trabalhosa, tentar, pôr em execução. Um empreendedor não é aquele que fala, é aquele que faz. É o cara da ação, não da reação.

Vivemos em um mundo em crise. Filas e filas de desempregados são vistas não só no Brasil, mas na Espanha, em diversos pontos da Europa e mesmo no grandioso EUA. Simplesmente não há emprego pra todo mundo. Ponto. As empresas não estão conseguindo crescer como gostariam. Consequentemente, não conseguem abrir tantas vagas quanto a população precisa. E esse ciclo vicioso destrói nossa economia e com elas nossas esperanças e aspirações de ter uma vida melhor.

Em grande parte, isso é devido à falta de empreendedores nas empresas. Ou ao menos de empresários empreendedores.

Steve Jobs e Steve Wozniak personificam bem o que falo sobre empreendedores não precisarem ser empresários. Jobs sim, queria ter uma empresa gigantesca e mudar o mundo. Wozniak não, apenas queria criar coisas maravilhosas com tecnologia. Ambos eram empreendedores, mas apenas Jobs, empresário.

E empreendedorismo é para todos!

O mais interessante do empreendedorismo, é que ele não exige uma idade específica. Desde Ray Kroc, que com mais de 50 anos fundou o McDonalds, até Robert Nay, que com 14 anos aprendeu programação com um livro da escola e criou seu primeiro app de sucesso que teve mais de 6 milhões de downloads.

Empreendedorismo não exige uma cor específica. Como Raiam Santos, brasileiro, negro, ex-morador do subúrbio do Rio de Janeiro que arriscou tudo e decidiu ir morar e estudar nos EUA, pagando seus estudos jogando Futebol Americano universitário. Hoje, um escritor bem sucedido com vários livros best-sellers na Amazon.

Empreendedorismo não exige que você more em um país desenvolvido, como provou o chinês Jack Ma, fundador do grupo Alibaba.com, bilionário e que foi rejeitado 11x por Harvard e que até mesmo não passou em entrevistas de emprego para redes de fast-food.

Mas se você quer ganhar dinheiro empreendendo para si mesmo, nada é mais democrático do que o empreendedorismo digital, geralmente relacionados a Lifestyle Business.

Mas por que empreender digitalmente?

O empreendedorismo digital não exige que você tenha um alto custo inicial com um ponto comercial, com mobília ou fachada. Jeff Walker fez milhões de dólares vendendo assinaturas de uma newsletter de investimento (talvez o precursor da Empiricus), uma operação completa e lucrativa operada a partir de sua casa e seu laptop.

Empreendedorismo digital não exige que você vá ao escritório todos os dias, ou sequer que tenha um escritório, que tenha uma localização específica, como prova Marcus Lucas, que há anos mora fora do Brasil, na Tailândia, ensinando empreendedorismo e marketing digital para outros que anseiam por serem nômades digitais.

O empreendedorismo digital não tem fronteiras, afinal, se você vende pela Internet, o seu mercado é o mundo, como provou Mark Zuckerberg e seu Facebook ou ainda Melyssa Griffin e seus cursos de marketing nas redes sociais que ela leciona para milhares de pessoas em todos os cantos do mundo, e que ela começou quando ainda morava em Tóquio.

Nenhum tipo de negócio é mais democrático do que empreender digitalmente.

“Mas que tipo de negócio digital que eu posso criar?”

Geralmente o mais óbvio é vender os seus serviços online. Se você sabe desenhar, suba seu portfólio para o Fiverr.com e receba em dólares por suas ilustrações, montagens, etc. Se você sabe programar, cadastre-se no Freelancer.com para receber propostas de freelas.  Qualquer coisa que você saiba fazer, pod ter alguma pessoa interessada em contratar, e o custo de começar um negócio digital desse tipo é zero. Você só precisa ter coragem.

Alguns empreendedores inclusive transcendem esse modelo. Ao invés de venderem os seus serviços, eles revendem o serviço de terceiros, como Chad Mureta, que possui dezenas de apps publicados que já lhe renderam milhões de dólares, mas que ele não desenvolveu nenhum. Ele é um cara que tem boas ideias e que paga para outros desenvolvedores colocarem elas em prática pra ele.

Outro negócio digital que dá muito dinheiro na Internet é o ensino online. E não estou falando de colocar vídeos no Youtube ensinando alguma coisa de graça, em troca de centavos a cada mil visualizações do seu vídeo. Isso só vai te dar dinheiro se você tiver legiões de seguidores. Falo de plataformas como Udemy, onde você coloca o seu curso à venda e fica com metade do valor das vendas. É o que fez Jamilton Damasceno, que já largou do seu cargo de Analista de Sistemas e hoje se dedica integralmente à ensinar online sobre como desenvolver apps Android.

Se você gosta de escrever, ebooks são a melhor opção de negócio digital pra você. Você escreve um livro sobre o que você quiser, com quantas páginas você achar necessário, decide o preço que quiser ganhar e cadastra seu livro gratuitamente na Amazon, usando o Kindle Direct Publishing e em 24h tem o seu livro sendo vendido no mundo inteiro, digitalmente. Eu estou engatinhando ainda no mercado de ebooks, mas mestres como Eldes Saullovivem hoje inteiramente dos mesmos.

Ainda para os que curtem escrever, criar um blog (assim como esse), pode ser uma excelente opção. Escolha um tema, escreva sobre ele, divulgue o blog nas redes sociais e em breve você terá uma audiência consumindo seus materiais. Uma vez que tenha uma audiência consistente, existem boas maneiras de lucrar com ela. E não precisa ser um tema muito profundo não, blogs de bobagem como o Não Salvo do Cid faturam muita, mas muita grana, com futilidades.

Agora, se você tem uma pegada mais comercial, vender online pode ser o melhor negócio para você. E não falo de vender as suas coisas no OLX e Mercado Livre. Falo de vender produtos mesmo, principalmente os importados da China que possuem custo baixíssimo, usando técnicas de dropshipping e plataformas como o Alibaba.com. Ainda dentro de vendas online, estão extremamente na moda as subscription boxes, caixas temáticas que você paga uma mensalidade pra receber em casa todos os meses. A Glossy Biju funciona assim por exemplo, bem como a Wine, a Clube do Malte e tantas outras.

Já para os leitores que gostam de falar, ter um podcast é melhor do que ter um blog. Os podcasts são hoje o que as rádios foram no passado. Pessoas de todas as idades consomem conteúdo em áudio sobre seus temas favoritos, sejam eles quais forem, e plataformas como a SoundCloud te permitem divulgar seu podcast fácil e rapidamente. E uma vez que você tenha uma grande audiência, você pode arranjar patrocinadores, vender outros produtos, etc. O Tim Ferriss é o maior mestre nisso (além de autor de livros interessantíssimos), com seu podcast The Tim Ferriss Show ouvido por milhões de pessoas e que cuja cota de  patrocínio custa U$50 mil dólares por episódio.

E por fim, talvez o que tenha mais potencial, mas que seja mais difícil de criar, são os softwares e apps úteis, que ajudem as pessoas. Eu criei o Busca Acelerada, um site que ajuda as pessoas a encontrarem as melhores ofertas de veículos da Internet. Já o Lim Ding Wen, malasiano de 9 anos, criou o Doodle Kids, um app para crianças desenharem com o dedo no smartphone que teve mais de 200 mil downloads. Sensacionais, úteis e lucrativos!

Conclusões

Por hoje é isso, queria deixar em você essa vontade de saber mais e principalmente, a vontade de empreender. Conheça meus outros posts da categoria Empreendedorismo e deixe seu comentário aí embaixo.

Gostou das referências de empreendedores? Mais detalhes sobre essas fantásticas pessoas no post 6 Empreendedores Lifestyle para se inspirar.

Este texto é um transcript da palestra sobre Empreendedorismo Digital cujos slides estão abaixo:

As 8 dúvidas técnicas mais comuns sobre NodeJS

Plataforma nova, dúvidas novas. Como muita gente (inclusive eu) têm começado agora a desenvolver aplicações em Node.js, por diversos motivos que já elenquei em outros posts, é comum que surjam dúvidas uma vez que é uma plataforma bem diferente do que as tradicionais C# e Java que muito de nós programam.

A ideia desse post é elencar as 8 principais dúvidas técnicas sobre Node.js. Caso esteja ainda mais cru do que eu na plataforma, recomendo ler primeiramente estes posts:

As dúvidas que serão respondidas neste artigo são:

  1. Qual a diferença entre til e circunflexo no packages.json?
  2. Como eu depuro programas Node.js?
  3. Qual é o propósito do module.exports e como eu uso ele?
  4. Como faço uso de todos meus processadores?
  5. Como ver completamente os objetos Node.js no console?
  6. Como executar Node.js como um serviço?
  7. Como enviar um email via Node.js?
  8. Como eu posso compartilhar código entre o servidor e o cliente?

Vamos lá!

#1 – Qual a diferença entre til e circunflexo no packages.json?

Então você abre o packages.json e rapidamente entende que as dependencies são os pacotes que sua aplicação usa, mas onde deveriam estar listadas as versões dos pacotes tem um monte de símbolos que não lhe dizem muita coisa…Resumidamente funciona assim:

  • O til garante que o pacote seja sempre carregado  respeitando o número do meio da versão. Ex: ˜1.2.3 pega o pacote mais recente da versão 1.2.x, mas não vai atualizar para 1.3. Geralmente garante que correções de bugs sejam atualizados no seu pacote.
  • O circunflexo garante que o pacote seja sempre carregado respeitando o primeiro número da versão. Ex: ˆ1.2.3 pega o pacote mais recente da versão 1.x, mas não vai atualizar para 2.0. Garante que bugs e novas funcionalidades do seu pacote sejam atualizados, mas não novas versões “major” dele.

A imagem abaixo ajuda a entender o template de versões dos pacotes do NPM, que aliás usa um padrão bem comum da indústria de software:

Outros símbolos incluem:

  • >, >=, <, <=1.0: a versão deve ser superior, superior ou igual, inferior, inferior ou igual à 1.0, respectivamente.
  • 1.2.x: equivalente a ˜1.2.0
  • *: qualquer versão do pacote
  • latest: a versão mais recente do pacote

Agora se você não tiver símbolo algum, aí o pacote deve ser sempre carregado usando a versão especificada.

Uma dica bem valiosa aqui (quem não gosta de um bônus?) para quando se quer atualizar todos pacotes é colocar * na versão de todos e rodar o comando “npm update –save” sobre a pasta do projeto.

#2 – Como eu depuro programas Node.jS?

Assim como o JS tradicional, em Node podemos usar qualquer editor de texto para programar nossas aplicações. No entanto, opções simplificadas demais como Notepad e editores de linha de comando (como nano), embora práticas de usar não são muito úteis quando precisamos depurar aplicações bugadas. Sendo assim, vou dar duas sugestões de como depurar programas Node.js.

Opção 1: troque seu editor de texto. O melhor jeito que eu faço atualmente é usando o Visual Studio Community (2015 com plugin para Node ou 2017 com suporte nativo). Nele você pode colocar breakpoints em arquivos .js, inspecionar variáveis, testar expressões no console e muito mais. E é uma ferramenta gratuita que roda em Windows e tem uma versão beta pra Mac.

Outra alternativa, mais leve, é o editor de texto Visual Studio Code, que vem com suporte nativo a Node.js. Também gratuito e roda em Windows, Mac e Linux.

Opção 2: use um depurador externo ao seu editor. Agora se você não quer abrir mão de usar editores de texto nativos do seu SO ou os mais clássicos que você já está acostumado, tem algum tempo que você pode depurar seus programas Node.js diretamente no Google Chrome também, usando o F12. Você consegue mais informações neste post do Medium.

E por fim, uma outra alternativa para não largar seus editores de texto favoritos é usando o Node Inspector, um projeto open-source disponível no GitHub.

#3 – Qual é o propósito do module.exports e como eu uso ele?

Nos tutoriais simples que eu tenho aqui no blog de como programar usando Node.js com MongoDB eu sempre recomendo criar um arquivo JS db.js com a lógica de conexão do banco de dados. Ao final do arquivo, sempre vemos um modulo.exports que recebe um objeto JSON. Mais tarde, damos um require nesse db.js pra poder usar a conexão internamente criada nele. Mas final, o que o module.exports faz?

Resumidamente, module.exports define qual objeto deste arquivo JS será exportado (ou exposto) quando uma chamada require for feita à ele. Ele é um análogo ao return do arquivo JS como um todo.

Um atalho do Node permite que você use apenas a palavra exports ao invés de module.exports.

Um exemplo de uso bem comum é para criar uma biblioteca de funções dentro de um arquivo JS que precisa ser chamada por outros arquivos JS. Considere o seguinte arquivo mymodule.js:

Aqui expusemos as funções myFunc1 e myFunc2. Se quisermos usar essas funções em outro arquivo, basta usarmos o require, como abaixo:

#4 – Como faço uso de todos meus processadores?

O Node.js trabalha com uma única thread dentro de um único processo na sua máquina. Dessa forma, é natural que ele utilize apenas um processador, mesmo que você esteja rodando sua aplicação em um webserver com 16 núcleos ou mais. Sendo assim, uma dúvida bem comum é: como escalar um projeto Node para que use todo o poder do seu servidor?

Basicamente você tem duas opções:

Opção 1: usar uma arquitetura de micro-serviços. Cada módulo da sua aplicação deve ser uma sub-aplicação autônoma, que responde a requisições e realiza apenas as tarefas que são sua responsabilidade. Sendo assim, teríamos diversas aplicações pequenas escritas em Node.js, cada uma usando um core da sua máquina e recebendo (e processando) as requisições que lhe cabem. Uma aplicação principal recebe a requisição original do usuário e delega as tarefas para as demais sub-aplicações.

Opção 2: usar um webproxy na frente do Node. Você pode colocar um Apache, Nginx ou IIS à frente da sua aplicação e deixar com ele essa tarefa de controlar a carga de requisições, balanceando entre diferentes nós idênticos da sua aplicação, cada um em um processador. Você pode fazer isso com Node.js também, mas geralmente Apache e cia. já possuem muito mais maturidade pra isso.

Existem outras opções? Sim. No entanto, as duas que recomendo estão acima.

#5 – Como ver completamente os objetos em NodeJS no console?

Certas vezes quando temos objetos complexos em Node.js e queremos ver o que ele está guardando dentro de si usamos o console do Google Chrome ou mesmo do Visual Studio para entender o que se passa com nosso objeto. No entanto, dependendo do quão “profundo” é o nosso objeto (quantos objetos ele possui dentro de si), essa tarefa não é muito fácil.

Aqui vão algumas formas de imprimir no console o seu objeto JSON inteiro, não importando quantos níveis hierárquicos ele tenha:

Opção 1: console.log. Tente usar a função console.log passando o objeto or parâmetro, isso funciona na maioria dos casos.

Opção 2: util.inspect. Use o seguinte código abaixo para usara  função util.inspect e retornar todo o conteúdo de um objeto JSON.

Opção 3: JSON.stringify. Use a função JSON.stringify passando o objeto e o nível de identação que deseja dentro do objeto, como abaixo.

#6 – Como executar Node.js como um serviço?

Para quem escolher rodar suas aplicações Node.js em ambiente Windows, existe uma série de passos necessários para que funcione correta e ininterruptamente, que já abordei nesse post aqui, inclusive no Passo 6 eu ensino como instalar seu app Node como se fosse um Windows Service.

#7 – Como enviar um email via Node.js?

Este é um problema bem comum para quem quer fazer coisas simples como um formulário de contato em uma aplicação web. Algo tão trivial em linguagens como PHP se torna uma dor de cabeça em Node. Claro, não estou falando de envio massivo de emails, que nunca deve ser feito usando SMTPs tradicionais (como o da sua conta de email) e sim com serviços de SMTP Gateway como Sendgrid e Mandrill. Estou falando de envios pontuais.

Existem algumas bibliotecas em Node que prometem resolver esse problema para você. Algumas oferecem suporte a contas Gmail,outras não, mas em geral todas funcionem em menor ou maior grau com os padrões atuais de envio de email. Elas são (em ordem de relevância):

  • Nodemailer: outra opção, mais focada no envio dos emails do que na personalização dos mesmos, muito popular desde 2010, quando hão havia opção alguma na plataforma para envio de emails. Em menos de 2 minutos você tem ele funcionando e enviando emails.
  • Node Email Templates:  O pacote mais completo da Internet para envio de emails via Node.js. Permite construir mensagens agradáveis usando a sua view engine e pré-processadores CSS. É um projeto ativo com atualizações frequentes no Github, mas um pouco complexo para quem está começando.
  • EmailJS: para quem tem problemas com anexos no Nodemailer, esse aqui é o pacote ideal, no mais, Nodemailer é melhor.
  • AlphaMail: uma solução completa “as-a-Service” onde você dispara emails usando a infraestrutura da AlphaMail mesmo. Não sei o quão bom os caras são no envio de emails, mas me pareceu muito simples e particularmente útil para quem não quer se preocupar com SMTP e coisas do gênero.

Para não ficar apenas indicando bibliotecas,a qui vai um código JS de envio de email usando Nodemailer, o mais recomendado dentre os pacotes citados:

#8 – Como eu posso compartilhar código entre o servidor e o cliente?

Muitas pessoas chegam até o Node com a promessa de escrever tanto o client-side quanto o server-side na mesma linguagem. No entanto, para que realmente isso seja vantajoso tem de ser possível o reuso de software em ambos os lados da aplicação, certo?!

Eu vou mostrar aqui uma forma de conseguir reutilizar os seus módulos JS tanto no browser quanto no Node.js.

Primeiramente, em Node quando queremos expor um módulo, usamos um código semelhante a esse:

No entanto, no browser isso dá erro uma vez que exports é undefined neste ambiente. Sendo assim, para contornar este problema, o primeiro passo é verificar a existência ou não do exports, caso contrário, teremos que criar um objeto para o qual possamos exportar as funções:

O problema com essa abordagem, é que no browser as funções que não foram exportadas também ficam disponíveis como funções globais, o que não é algo desejável. Resolvo isso usando closures, como no exemplo abaixo:

O uso do objeto this representa o browser, e o uso de this[‘mymodule’] é o local de exportação no browser. Esse código está pronto para ser usado tanto no browser quanto no server. Considerando que ele está em um arquivo mymodule.js, usamos esse módulo da seguinte maneira em Node:

E no browser usamos assim:

Claro, existem códigos JS escritos em Node que não serão suportados pelo browser, como o comando require por exemplo. Sendo assim, os módulos compartilhados entre os dois terão de ser o mais genéricos possíveis para que haja compatibilidade.

Também tome cuidado com as features mais recentes da linguagem Javascript que muitas vezes são suportadas pela engine V8 que o Node usa mas não pelos demais browsers.

Até a próxima!

Android Studio: Tutorial completo do básico ao avançado (10 lições!)

Em 2012 eu comecei a me interessar por Android. Não me orgulho de ter entrado tão atrasado no mercado, uma vez que um colega de faculdade já havia me mostrado a plataforma em 2010, quando estava me formando. Se eu tivesse dado atenção à época, quando qualquer app alcançava um volume grande de downloads, talvez toda minha carreira tivesse sido diferente. Não que eu esteja reclamando do que consegui alcançar nestes 11 anos como desenvolvedor, mas né!

Mas o que eu estava me lembrando agora é que em 2012 era muito difícil programar para Android. Os aparelhos ainda eram poucos, menos ainda os que prestavam.  Android 2.3 era luxo e as ferramentas, terríveis. Usávamos muito Eclipse com os plugins do ADT. Quando um atualizava, quebrava o outro, perdia muito tempo configurando a ferramenta. Logo descobri o MotoDev, um Eclipse modificado pela Motorola que já vinha pronto para programar para Android. Foi a ferramenta que mais utilizei até o lançamento oficial do Android Studio.

Ah, o Android Studio (suspiro)!

Tenho uma relação de amor e ódio com a ferramenta. Ao mesmo tempo em que ela tornou o desenvolvimento nativo para a plataforma muito mais fácil, ela acaba com os recursos da máquina onde você usa ela, principalmente seu espaço e IO de disco. Mas fazer o quê, não há bônus sem ônus.

E é dessa ferramenta que vou falar hoje. Não apenas falar, vou destrinchar tudo que sei sobre ela (e o que não sei vou pesquisar) para lhe entregar o post mais completo que você possa encontrar na Internet sobre o assunto. Um tutorial completo de Android Studio, do básico ao avançado.

Vou falar aqui de (clique para ver algum tópico específico que mais lhe interesse):

  1. Como baixar e instalar a ferramenta?
  2. Como e por que manter atualizado?
  3. Como instalar os pacotes corretos do Android?
  4. Como criar e executar seu primeiro AVD?
  5. Como criar meu primeiro app Android?
  6. Como fazer testes mais avançados?
  7. Como copiar e inserir arquivos no AVD?
  8. Dicas de performance
  9. Como gerar o APK para publicação?
  10. IDEs concorrentes do Android Studio

Tem algum tópico que você gostaria de saber e que eu não cobri aqui? Me manda nos comentários!

#1 – Como baixar e instalar o Android Studio?

O Android Studio é a ferramenta oficial para desenvolvimento Android. Apesar dos seus contras e de existirem alternativas (como listo na dica #12), ele ainda é a melhor opção.

Para baixar, acesse o site oficial da ferramenta neste link. A página detecta seu sistema operacional e lhe fornece a versão mais atualizada da ferramenta. Após baixar, dê um duplo-clique nele para instalar na sua máquina.

Assim que ela terminar de instalar, execute-a para que sejam efetuadas as primeiras atualizações e você possa finalmente utilizá-la.

#2 – Como e por que manter o Android Studio atualizado?

Assim que você instala a ferramenta, a mesma já executa uma atualização de suas dependências. No momento em que escrevo este post ela está versão 2.3.1, mas todo mês sai alguma atualização nova: updates de segurança, de performance, para corrigir bugs, etc. Além disso não é apenas o Android Studio em si que atualiza, mas sempre tem alguma de suas dependências para atualizar. E são muitas:

  • novos SDKs surgem para as novas e antigas versões do Android
  • atualização da ferramenta de compilação (Android Build Tools)
  • novos Add-ons para facilitar a sua vida enquanto desenvolvedor
  • novas versões do Gradle, o gerenciador de build do Android Studio

E essas são apenas algumas!

Para manter o Android Studio atualizado é bem simples, pois a própria ferramenta te avisa quando saem novas atualizações dela própria, bastando aceitar o download e reiniciar a mesma quando solicitado. Ainda assim, você pode mandar verificar atualizações manualmente, usando a opção Android Studio > Check for updates.

É importante manter sua ferramenta atualizada para evitar exploits de segurança que possam ser usados por pessoas maliciosas e até mesmo para que a performance da ferramenta (que não é lá grande coisa) fique um pouco melhor.

#3 – Como baixar os pacotes corretos do Android SDK Manager?

O Android Studio possui integração com o SDK Manager, a ferramenta que gerencia as versões e add-ons de desenvolvimento Android presentes na sua máquina. Você consegue acessar o SDK Manager a partir da splash screen, no meu Configure como abaixo:

Por dentro da ferramenta você também pode acessar o SDK Manager a partir do menu Tools > Android > SDK Manager:

E usando o ícone presente na toolbar (é o Android com a seta de download):

Qualquer uma das opções vai te levar até a seguinte tela do SDK Manager:

Nesta janela temos algumas informações bem importantes que valem ressaltar:

No topo, temos o caminho onde o SDK do Android está instalado na sua máquina. Certifique-se de que este local possui muito espaço em disco disponível, tipo uns 20GB, só pra garantir.

Logo abaixo, temos três abas, sendo a primeira a que mostra as versões de plataforma Android que você possui na sua máquina e que consequentemente conseguirá criar apps. O jeito mais fácil (e que mais ocupa espaço) de instalar esses SDKs é apenas marcando o checkbox correspondente e mandando instalar. Mas há uma maneira mais inteligente, que vou falar mais adiante.

Por ora, certifique-se de que você possui ao menos a versão mais recente instalada, Nougat no meu caso, como pode ver na imagem.

A segunda aba mostra as ferramentas e add-ons das plataformas, como na imagem abaixo:

Aqui não precisamos de muita coisa, mas ao menos você terá de ter sempre a versão mais recente instalada do Android SDK Build-Tools, do Android Emulator, do Android SDK Platform-Tools e do Android SDK Tools. Quando sai alguma atualização desses elementos geralmente a ferramenta avisa, mas não custa nada abrir essa tela de vez em quando para checar por você mesmo.

A terceira aba mostra apenas as URLs dos repositórios de onde as dependências estão sendo baixadas e, a menos que você tenha certeza do que está fazendo, não deve mexer aí.

E por fim, eu mencionei no início desse tópico de que tinha um jeito melhor de baixar as dependências que não apenas marcando o checkbox da versão do Android, não é mesmo?

Pois bem, primeiro, volte à aba inicial do SDK Manager e marque o checkbox inferior-direito que diz “Show package details”. Agora você deveria ver uma árvore de dependências muito mais intrincada, como segue:

Note que abaixo da raiz do Android 7.1.1 que eu tenho instalado no meu note, que apenas três opções estão marcadas: Android SDK Platform 25 (essa é obrigatória), Sources for Android 25 (opcional, para melhorar o debugging) e Google APIs ARM EABI v7a System Image. Neste último que está o segredo para economizar espaço em disco!

Para realizar os testes dos seus apps, como mostrarei adiante, você precisar ter imagens das máquinas virtuais Android baixadas no seu computador. As System Images, que nesse caso eu tenho apenas uma dentre as diversas disponíveis. Uma breve explicação sobre as imagens que aparecem nessa listagem, e que praticamente são as mesmas em todas as versões de Android:

  • Android TV …: é a imagem para testar apps feitos para Smart TVs;
  • Android Wear …: é a imagem para testar apps feitos para wearables (Smart Watches, por exemplo);
  • Google APIs …: é a imagem para testar apps feitos para smartphones e tablets, que usem APIs do Google (Mapas, por exemplo)
  • ARM …: imagens que comecem com esse nome são de smartphones/tablets usando CPU ARM;
  • Intel x86: imagens que comecem com esse nome são de smartphones/tables usando CPU Intel;

Estas são as opções mais frequentes que aparecem para download, e aqui entra mais uma explicação importante:

  • se você possui um computador com processador Intel recente (uns 3 anos pra cá), instale o Add-on Intel Accelerator HAXM que vai melhorar a performance dos testes na sua máquina, bem como baixe somente imagens que possuam arquitetura Intel x86 no nome.
  • agora, se você possui um computador mais antigo ou que não tenha processador Intel, sugiro baixar somente imagens que contenham arquitetura ARM EABI v7 mais fáceis de emular

Mas o mais importante é: você não precisa ter todas essas imagens instaladas em sua máquina. Eu costumo ter apenas uma da versão mais recente do Android e outra da versão 4 (Kitkat, por exemplo), para criar apps com maior suporte na Google Play.

Como assim?

Se você faz um app usando a plataforma 4, por exemplo, todos os smartphones com Android 4+ poderão instalar o seu app. Agora, se você faz um app apenas para Nougat (7), somente quem tem smartphones de ponta, na data em que escrevo este post, é que conseguirá utilizá-lo.

Capicce?!

#4 – Como criar meu primeiro AVD?

Primeiro, você sabe o que é um AVD?

AVD é a sigla para Android Virtual Device, ou Dispositivo Virtual Android. Basicamente um AVD é uma máquina virtual Android que você usa para testar seus apps enquanto desenvolve, para que não precise ter um ou mais dispositivos Android de verdade. É especialmente útil para testar diferentes configurações de smartphone e principalmente dispositivos mais difíceis de termos, como wearables.

Sendo assim, saber como criar um AVD é muito importante para poder prosseguir nos estudos com Android. E o primeiro passo para isso é acessar o AVD Manager, que fica no menu Tools > Android > AVD Manager, por dentro da ferramenta:

Ou ainda, pela toolbar (é o ícone do smartphone com a cabeça do Android no canto direito):

Independente da opção escolhida, o AVD Manager se abrirá, como abaixo:

Neste meu print, já tenho dois AVDs criados, mas isso não importa no momento. Para criar seu primeiro ou décimo, os passos são os mesmos. Primeiro, clique no botão “Create Virtual Device”, no canto inferior esquerdo, isso irá abrir o assistente de criação de AVD:

Na primeira tela, selecione a categoria Phone e depois Nexus One, um modelo de smartphone simples porém suficiente para testarmos nossos apps. Na verdade essa escolha afeta mais a resolução do seu dispositivo do que qualquer outra coisa, então não importa tanto assim neste momento. Avance para a próxima tela no botão inferior direito.

Aqui você escolhe qual versão do Android que seu AVD vai ter, dentre as opções que você já tem baixadas na sua máquina e as demais, que possuem o link para download aqui mesmo, o que facilita bastante o gerenciamento das mesmas. Neste print estou selecionando uma imagem de Nougat que já tenho baixada e que encontra-se na aba “Other images”. Na aba x86 você encontra as imagens de smartphones Intel e na aba Recommended, bem, você tem as recomendas pelo Android Studio, sabe-se lá o que isso signifique…

Avance novamente e verá a seguinte tela.

Aqui você define o nome do seu AVD, revisa a resolução e plataforma do dispositivo, se ele iniciará em posição retrato ou paisagem (que pode ser alterado depois) e se a performance dos gráficos será via software ou via hardware (deixe automático, a menos que for desenvolver algum jogo).

Note que tem um botão ali de “Show Advanced Settings”. Se você clicar nesta opção, poderá personalizar melhor as configurações de hardware do seu aparelho, sendo as mais importantes:

  • Câmera: você decide se o dispositivo vai ter câmera ou não, e se ela usará a webcam do seu notebook ou apenas uma imagem da sua pasta de imagens;
  •  Network: a velocidade da rede do seu celular, podendo simular redes lents e antigas como GPRS, EDGE, etc ou deixar Full para usar a Internet completa do seu computador.
  • Memory & Storage > RAM: define a quantidade de memória RAM o seu dispositivo vai ter. Sugiro 1024MB para a maioria dos AVDs.
  • Memory & Storage > Internal Storage: espaço de armazenamento interno disponível no seu AVD. A menos que vá armazenar muitos arquivos ou um banco de dados muito grande, a sugestão de 800MB é suficiente.
  • Memory & Storage > SD Card: define se você vai ter um SD gerenciado pela ferramenta ou salvo em um arquivo externo que simulará o SD. Em ambos os casos, você deve definir a capacidade do SD virtual em MB.

Caso não tenha certeza do que fazer com cada uma dessas configurações, deixe as mesmas como estão, alterando apenas a RAM para 1024MB. Clicando em Finish finalizará o processo e voltará à tela de gerenciamento dos AVDs, que deve demorar alguns segundos e ficar travada enquanto o AVD está sendo criado.

Note que cada AVD consome um significativo espaço no seu HD (Size on Disk), então não fique criando um monte deles ao mesmo tempo que não vale a pena.

Para editar o AVD, clique no ícone de lápis e o assistente de configuração será aberto novamente. A seta para baixo exibe opções como formatar (Wipe) o AVD e excluí-lo. Obviamente o play verde manda executar o AVD.

A execução pode demorar mais ou menos, dependendo da configuração do seu AVD vs a configuração da sua máquina. Em geral, algo em torno de 1-5 minutos é normal. Sim, a inicialização é bem lenta e consome muitos recursos da máquina. Quem já mexeu com máquinas virtuais antes sabe do que estou falando.

Ao término do processo de inicialização do Android, você terá uma máquina virtual Android para mexer à vontade, sendo o comportamento e aparência equivalentes ao de um Android nativo completo, incluindo funcionalidades como instalar apps e navegar na Internet.

Uma dica: depois que você inicializa seu AVD, não feche ele. Assim, a cada projeto que precisar testar, basta mandar executar no AVD que já está rodando, sem precisar inicializar um novo. Somente encerre o AVD depois que terminar todos seus testes. Também encerre se ele estiver travado ou se demorar mais de 5 minutos para inicializar.

#5 – Como criar meu primeiro app Android?

Eu não vou entrar em detalhes neste passo, uma vez que já fiz isso em diversas outras oportunidades aqui no blog. Sendo assim, leia um dos seguintes materiais antes de prosseguir nesse tutorial:

Com o app criado, use o botão verde de play que fica na toolbar para executá-lo:

O Android Studio vai levar alguns segundos para compilar seu projeto e empacotar usando o Gradle e depois vai lhe perguntar onde deseja testar o mesmo:

Neste exemplo, meu AVD já está inicializado por completo, por isso que aparece na lista de dispositivos conectados. Basta selecionar ele e dar um Ok para que o app que estamos testando seja instalado e executado no mesmo.

#6 – Como fazer testes mais avançados?

Consulte este post aqui que está bem completo, focado nesta questão de testes de apps usando diferentes configurações e recursos, incluindo como testar no seu smartphone.

#7 – Como copiar e inserir arquivos no AVD?

O AVD se comporta como um autêntico dispositivo Android, certo? E num dispositivo Android você consegue colocar e tirar arquivos do armazenamento interno dele, certo? Logo, o mesmo é possível de ser feito com o AVD!

A tarefa é simples, primeiro execute o seu AVD e deixe-o inicializar completamente. Em seguida, abra a ferramenta DDMS da sua IDE, no caso Android Studio é o Android Device Monitor, que fica no menu Tools > Android.

Uma vez com o Device Monitor aberto, que permite entre outras coisas ver como anda o consumo de recursos de hardware do seu AVD, você tem a aba File Explorer que permite mexer nas pastas e arquivos do mesmo (dê uma olhada na imagem e como estou mostrando o que está salvo dentro do AVD)! Use os botões da toolbar da direita da imagem para fazer as operações:

  • ícone do disquete para copiar um arquivo do seu smartphone pro computador;
  • ícone do smartphone para copiar um arquivo do seu computador pro smartphone.

Para quê você iria querer copiar arquivos do AVD? Para fazer um dump da sua base SQLite, por exemplo. Ou o inverso, para colocar arquivos estáticos dentro do AVD e usar eles no seu app. Na verdade você faz o que quiser com esse conhecimento, eu só queria te mostrar que era possível. 😀

#8 – Dicas de Performance

A melhor dica de performance é usar o seu próprio smartphone para os testes, conforme mencionado na dica #3 deste outro post aqui. Caso não seja possível, use a dica #11 para conhecer VMs concorrentes ao Android emulator padrão.

Melhorar a performance dos seus testes é talvez o maior ganho de performance que você possa ter, sem muito esforço. No entanto, também existem outras dicas, a saber:

  • troque seu HD por um SSD, a diferença de performance é gritante pois o maior gargalo da ferramenta é IO de disco;
  • crie seus AVDs com no mínimo 1GB de RAM, e certifique-se que seu computador tem essa memória sobrando pro AVD usar (caso contrário ele fará swap no disco);
  • se você usa notebook, mantenha-o na tomada, isso permite que ele opere com o máximo de performance;
  • só use um AVD por vez e somente um Android Studio por vez;
  • na verdade, use só o Android Studio e de repente um navegador com poucas abas abertas. O bicho é pesado…
  • tenha espaço em disco sobrando, curiosamente tudo fica muito lento quando há pouco espaço em disco no computador;
  • mantenha seu Android Studio atualizado, conforme dica #2;
  • rode a versão mais antiga de Android que puder no AVD, tipo 4.0 ou pior, 2.3 (!!!);
  • se você usa Windows, mantenha-o atualizado, ele fica muito lento quando está com atualizações pendentes ou rodando em background;
  • esteja conectado à Internet, o Android Studio fica mais lento quando está sem conexão (antigamente ele nem funcionava sem Internet);
  • se o processador do seu computador for antigo (2014 ou anterior) ou não for Intel em geral, use AVDs com arquitetura ARM, conforme mencionei na dica #3;
  • se o processador do seu computador for Intel recente (2014 ou mais), instale o Acelerador HAXM no SDK Manager e use somente AVDs com arquitetura X86 (dica #3 novamente);

Se tiver mais dicas de performance, deixe nos comentários!

#9 – Como gerar o APK para publicação?

O APK é o arquivo que permite a instalação do seu app em outros smartphones, ou seja, você precisa ter o APK do seu app criado para poder vendê-lo ou mesmo dá-lo de graça, não importa.

Eu falo em mais detalhes dessa dúvida aqui em ambos meus livros Meu primeiro app Android e Criando apps para empresas com Android, incluindo como configurar seu app pra download na Google Play e tudo mais. Pra resumir a geração do APK e não ser repetitivo, use o menu Build > Generate Signed APK, crie suas chaves de assinatura caso nunca tenha criado elas (elas assinam o seu app com seus dados pessoais, pra garantir depois que ele é seu mesmo) e escolha em qual pasta o APK será salvo.

Fácil, fácil!

#10 – IDEs concorrentes do Android Studio

Existem diversas maneiras de programar para Android usando desde a linguagem Lua com Corona SDK até HTML + CSS + JS com Phonegap. Mas se você ainda quiser se manter no Java, usando o SDK nativo tradicional, existem duas excelentes opções para programar seus aplicativos Android:

Clique nos links das ferramentas para ver tutoriais completos de como prepará-las para uso com Android, visto que elas não oferecem suporte nativo à plataforma.

E por hoje é só (chega né!). Tem mais alguma dúvida de Android Studio que eu não abordei aqui? Me manda aí embaixo nos comentários ou dá uma olhada no meu livro, que tem o link a seguir!

Criando apps para empresas com Android