Dicas para desenvolver um aplicativo Android: minhas lições aprendidas
Publicados: 2022-03-11Oi! Eu sou Ivan e sou desenvolvedor de aplicativos Android há algum tempo. Ou assim parece. Antigamente (estamos falando de 2009), o Android era apenas uma criança e eu assisti o Little Green Man crescer desde então. Temo que algum tempo atrás, o Android conseguiu me superar.
Hoje em dia, o Android não está apenas em dezenas de milhares de telefones e tablets diferentes. Está no seu pulso, na sua sala de estar, no seu carro, e assim que começarmos a atribuir endereços IP a objetos inanimados, ele estará praticamente em todos os lugares ao nosso redor. Muito terreno para um desenvolvedor Android experiente cobrir!
Além disso, existem mais de um milhão de aplicativos apenas no Google Play, sem contar a Amazon AppStore ou mercados nos quais geralmente não estamos interessados, como a China. Não vamos esquecer inúmeras empresas de desenvolvimento de aplicativos móveis que geram bilhões em receita todos os anos.
Então, como um desenvolvedor independente pode criar um aplicativo de sucesso neste enorme mercado com grandes players? Não faço ideia, não fiz um aplicativo de sucesso! Mas, eu fiz um bonito, e eu gostaria de compartilhar minha história com você.
Lição 1: Conecte os pontos
O sucesso (geralmente) não acontece da noite para o dia e esta não é a minha primeira aplicação. Eu tenho alguns que vão desde sucessos de desenvolvimento inesperados no fim de semana como o Calendário Ortodoxo Macedônio , com mais de 30.000 usuários em um idioma que não mais de 4 milhões de pessoas podem entender, até fracassos mais bem-sucedidos como o TweetsPie , um aplicativo com forte cobertura da mídia e um terrível base de usuários de pouco mais de 600 usuários ativos. Muitas aulas por lá!
Embora esses aplicativos tenham me ajudado a entender um pouco melhor a mente da “criatura indescritível chamada Usuário”, o que me inspirou foi um projeto de duas horas. Originalmente desenvolvido para me tornar um milionário, uma vez que 1.428.571 usuários compraram o aplicativo, pois o Google tira 30 centavos de cada dólar, o The Dollar App foi feito para testar minha conta de comerciante.
Mal sabia eu que anos depois receberei um e-mail de uma mãe feliz dizendo que foi o melhor dólar que ela já gastou desde que seu filho sorria toda vez que meu aplicativo lhe dava um abraço.
E foi assim que nasceu uma ideia! Por que não usar a necessidade humana fundamental de um abraço e torná-lo bonito? Faça para um público específico, interativo, desafiador, divertido de usar e ainda mais divertido de compartilhar.
Lição 2: Entenda o Android Market
Todas as coisas que mencionei acima foram adicionadas a um aplicativo de papel de parede ao vivo. O básico não é tão difícil de adivinhar. O Android tem uma participação de mercado maior que o iOS, mas os usuários do iOS compram mais. Os aplicativos de mensagens são muito populares, mas os jogos freemium superam os ganhos. China, Índia, Brasil e Rússia são mercados emergentes, mas carecem de hábitos de consumo. Você pode ler o App Annie Index para mais informações.
Então, como um aplicativo de papel de parede ao vivo se encaixa nisso? Em primeiro lugar, elimina a maioria das plataformas, já que um papel de parede ao vivo é uma coisa do Android. Em segundo lugar, esse recurso foi adicionado no Android 2.1 para que ele tenha uma grande comunidade e alguns belos exemplos. Mais notavelmente Paperland e Muzei de código aberto de Roman Nurik, provavelmente o melhor ponto de referência para o desenvolvimento Android.
Embora existam muitos papéis de parede ao vivo por aí, a maioria deles se enquadra na categoria cênica / meteorológica, e muito poucos se enquadram na categoria de sobrecarga de fofura . Isso é algo que queríamos mudar e oferecer algo que lhe dê um sorriso cada vez que você desbloquear seu telefone, mesmo que você o tenha desbloqueado por um motivo completamente diferente. Nós lhe demos um lindo pacotinho de alegria para abraçá-lo antes de ir para a cama à noite, ou quando você desliga o alarme pela manhã. E melhor ainda, torne-o pessoal e personalizável.
Sem mais delongas, e antes de entrarmos em detalhes técnicos, apresento com orgulho: Ooshies - The Live Wallpaper
Possui:
- aplicativo de papel de parede ao vivo gratuito que lhe dá abraços
- 12 ooshies únicos para escolher
- conteúdo gratuito, desbloqueável e comprável
- atualizações meteorológicas atuais
- login social e sincronização de dados
- saudações sazonais
- muitas surpresas
- um gato ninja
- nós mencionamos abraços?
Lição 3: Tente fazer acontecer
Ooshies parecia uma ideia de aplicativo Android bastante simples. Pinte um fundo, sobreponha algumas nuvens e estrelas, coloque um urso com um balão em cima e pronto. Mas não, é Android! O que parece fácil é muitas vezes bastante difícil e tendemos a repetir os mesmos erros comuns várias vezes. Aqui está um breve resumo dos desafios que enfrentei:
Aceleração de hardware - por que desenhar usando a CPU quando a GPU é muito melhor nisso? Bem, acontece que desenhar bitmaps em uma tela não pode ser acelerado por hardware. Pelo menos não por enquanto.
OpenGL - se queremos aceleração de hardware precisamos usar OpenGL ES ou melhor ainda um framework que faça a maior parte do trabalho para nós.
Carregamento de bitmap - um problema de consumo de memória bem conhecido. Precisamos alocar 1 byte [0-255] de memória, para cada canal no #ARGB, para exibir um único pixel. Além disso, as imagens que usamos geralmente têm resoluções mais altas do que a tela do dispositivo. Carregar todos eles resultará rapidamente em OutOfMemroyException.
Iniciadores de casa - o papel de parede ao vivo será hospedado no processo do iniciador de casa, e diferentes lançadores tendem a fornecer retornos de chamada diferentes para o serviço de papel de parede ao vivo (principalmente Nova e TouchWiz).
Vida útil da bateria - se não for bem feito, os papéis de parede animados e os widgets podem consumir muita bateria. Com todo o burburinho sobre a terrível duração da bateria do Lollipop (Android 5.0), o primeiro aplicativo a sair será o papel de parede ao vivo.
Então, sobrepor um bitmap, pintá-lo em uma tela e, em seguida, alternar quadros no toque para dar um abraço, não parece grande coisa, mesmo quando é feito na CPU, certo? Isso mesmo, não é um problema. Mas, quem quer um papel de parede ao vivo estático? Supera o propósito. O papel de parede deve responder aos seus toques, deve se mover enquanto você rola suas telas iniciais, deve realizar atos aleatórios de bondade e fazer você se sentir feliz.
E há um truque de desenvolvimento Android para isso. Existe um termo chamado efeito de paralaxe para adicionar profundidade em um espaço bidimensional. Imagine-se dirigindo um carro. A casa mais perto de você se move mais rápido que a montanha ao longe. O mesmo efeito pode ser obtido movendo objetos em diferentes velocidades em uma tela. Embora estejam todos no mesmo plano, seu cérebro percebe os objetos em movimento mais rápido como mais próximos de você. Assim como adicionar sombras, o efeito de paralaxe adiciona um eixo z.
E é aqui que todo o inferno se solta! Na maioria dos dispositivos que movem o Ooshie, a sobreposição climática e o plano de fundo, em velocidades diferentes, produzem uma queda significativa na taxa de quadros. Veja como um único quadro é desenhado:
canvas.drawBitmap(background, 0 - offsetX / 4, 0, null); canvas.drawBitmap(weatherOverlay, 0 - offsetX / 2, 0, null); if (!validDoubleTap) { canvas.drawBitmap(ooshieNormal, positionX - offsetX, positionY, null); } else { canvas.drawBitmap(ooshieTapped, positionX - offsetX, positionY, null); }
O offset
é uma porcentagem da distância que o usuário percorreu. É um retorno de chamada que o mecanismo de papel de parede fornece:
@Override public void onOffsetsChanged(float xOffset, float yOffset, float xOffsetStep, float yOffsetStep, int xPixelOffset, int yPixelOffset){ super.onOffsetsChanged(xOffset, yOffset, xOffsetStep, yOffsetStep, xPixelOffset, yPixelOffset); // athe current offset should be a fraction of the screen offset to achieve parallax if (!isPreview()) { float newXOffset = xOffset * 0.15f; wallpaperDrawHelper.setOffsetX(newXOffset); if (isVisible() && hasActiveSurface) { wallpaperDrawHelper.drawFrame(false); } } }
Devo observar que tudo isso seria desnecessário se eu soubesse trabalhar com OpenGL! Está na minha lista de tarefas , já que qualquer coisa mais complexa do que temos agora exigirá uma aceleração de hardware. Mas, por enquanto, tenho que trabalhar mais, não mais inteligente (estou aberto a sugestões nos comentários). Então aqui está o que fizemos:

Lição 4: Trabalhe com o que você tem
Como grandes apoiadores da iniciativa minSdk=15
, desde o início eliminamos todos os dispositivos 2.x. O esforço para manter a compatibilidade com versões anteriores é maior do que a possível receita de usuários que não podem/não querem atualizar seus telefones. Portanto, na maioria dos casos, poderemos obter uma experiência suave com uma opção adicional para desativar a paralaxe, se desejado.
Outra grande otimização é como lidamos com os bitmaps. Um efeito de paralaxe muito semelhante pode ser obtido com o desenho de dois bitmaps em vez de três:
Sobreposição Ooshie - bitmap Ooshie aparado e cuidadosamente dimensionado (pode ser acessório)
Sobreposição combinada - um bitmap combinado de plano de fundo e clima que se move com uma fração da velocidade do Ooshie
Este truque de desenvolvimento Android economiza memória e acelera o tempo de desenho, para uma ligeira degradação do efeito de paralaxe.
Ao rolar as telas iniciais, os quadros serão desenhados com bastante frequência (idealmente mais de 30 vezes por segundo). É crucial não desenhá-los quando a tela inicial não estiver visível (algumas telas de bloqueio, alguma gaveta de aplicativos, abrir/trocar aplicativos etc.) para minimizar o uso da CPU.
Tudo isso está intimamente ligado às atualizações meteorológicas. Inicialmente, havia uma tarefa repetida, executada a cada uma ou duas horas, para sincronizar o clima, mas era realmente um exagero. Se o usuário não puder ver o papel de parede, as informações meteorológicas são irrelevantes. Então, agora, as atualizações meteorológicas acontecem apenas quando o papel de parede está visível.
long lastUpdate = prefStore.getLong(SharedPrefStore.Pref.WEATHER_TIMESTAMP); if (System.currentTimeMillis() - lastUpdate > Consts.WEATHER_UPDATE_INTERVAL){ // update the weather if obsolete Intent intent = new Intent(getApplicationContext(), WeatherUpdateService.class); startService(intent); }
Então, basicamente, aqui está a lista de verificação para um desenho de bitmap de software suave otimizado para memória:
- Combinar bitmaps uma vez
- Desenhe menos bitmaps
- Redesenhe apenas sob demanda
- Evite tarefas em segundo plano
- Ofereça aos usuários algum controle sobre o processo
Lição 5: Teste. Teste. Teste
Eu não posso enfatizar o quão importante isso é! Nunca, repito NUNCA , libere seu aplicativo antes de testá-lo! E, eu não quero dizer que VOCÊ deve fazer o teste. Você escreveu o código, sabe como funciona e influencia o resultado conhecendo as expectativas. Não estou falando de testes JUnit (embora recomendados), mas de lançamentos em etapas, ou seja, testes alfa e beta.
Se você gosta de desenvolvimento de software Android, os termos são diretos, mas aqui está um resumo rápido:
Testadores alfa - um pequeno grupo de pessoas composto por seus colegas de equipe e pessoas da indústria, de preferência desenvolvedores Android. É provável que eles tenham dispositivos de última geração e brinquem com as opções dos desenvolvedores. Eles enviarão rastreamentos de pilha, relatórios de bugs e até mesmo algumas dicas e truques de otimização de código/UI. Perfeito para lançamentos iniciais com recursos parciais/ausentes.
Testadores beta - um público muito mais amplo com vários dados demográficos. Lançamentos estáveis devem ser publicados aqui. Mesmo que seu nível de ninja seja muito alto, você nunca pode prever, muito menos explicar, todas as distribuições possíveis do Android e as maneiras pelas quais as pessoas usam seus telefones.
Uma vez que passamos o alfa, pensei que tínhamos terminado. Mas, cara, eu estava errado?! Acontece que nem todos os usuários do Android possuem dispositivos Nexus com o software mais recente! Quem saberia? :)
Aqui estão alguns problemas de desenvolvimento do Android com base nessa revelação:
Diferentes lançadores têm diferentes telas iniciais padrão - geralmente a primeira ou a do meio e, até onde eu sei, não há como saber sua posição.
É difícil centralizar o Ooshie sem saber a posição padrão da tela inicial - portanto, o controle deslizante de configurações para ajustar o deslocamento de paralaxe.
Um usuário médio não sabe o que significa deslocamento de paralaxe - uma terminologia muito mais simples deve ser usada na página de configurações.
Um usuário aleatório sugerirá seu próximo recurso.
Portanto, gostaria de agradecer a todos os nossos testadores beta pelo trabalho árduo que fizeram. Espero que obter todos os recursos mais recentes antes de qualquer outra pessoa seja uma recompensa decente por sua dedicação. Se desejar, você também pode fazer parte de nossa Comunidade Beta do Google+.
Lição 6: Deixe os dados falarem
Fazer um aplicativo Android que se destaque hoje é um pouco mais difícil do que fazer um aplicativo de calculadora, quando não havia nenhum em 2009. Fazer o aplicativo perfeito é difícil. Principalmente porque a perfeição está nos olhos de quem vê. O que é bom para mim, não significa necessariamente que é bom para você. É por isso que é importante deixar o aplicativo crescer. Nossa lista de verificação do roteiro para novos recursos mostra que temos trabalho suficiente para todo o ano de 2015. Entre outras coisas, incluiremos em breve:
- Sons
- Planos de fundo sazonais
- Personalizações (cor de fundo, pacotes de clima, skins ooshie, etc.)
- Ooshies específicos da região (ex. babushkas)
- Muitos novos ooshies e maneiras de desbloqueá-los
Agora, podemos ter mantido o aplicativo em beta até que tudo esteja pronto, mas dessa forma estamos jogando fora dados valiosos. Nem todos os testadores beta dedicarão uma parte do dia para enviar o feedback. É aí que você pode se beneficiar usando ferramentas para obter o feedback. Você pode usar o Google Analytics, Flurry, Mixpanel, Crashalytics, ACRA etc. para coletar dados de uso.
Por exemplo, analisando os dados, notamos que os usuários não clicam muito no botão de configurações, então o tornamos mais aparente e adicionamos um tutorial rápido para ajustar as configurações.
Embora este seja um processo em segundo plano, ele pode ser usado para melhorar ainda mais a experiência do usuário. Por que não mostrar ao usuário quantas vezes:
- ele/ela recebeu um abraço
- quantos dias chuvosos foram iluminados por um sorriso
- quantos toques foram necessários para desbloquear um Ooshie com um mini-jogo
- quantos amigos instalaram o aplicativo por sua causa
Isso é importante porque traz consequências para suas ações. Não cometa o mesmo erro do nosso sistema educacional, tornando os usuários consumidores passivos de conteúdo. Torná-los responsáveis. Dê a eles a opção de controlar seus próprios dispositivos e criar sua própria experiência pessoal. Se você conseguir empacotar tudo isso em um pacote fofo que rouba um sorriso no primeiro respingo, não é muito improvável pedir ao usuário favores de spam para desbloqueio de conteúdo.
No final, você precisa evoluir o desenvolvimento do seu aplicativo Android com base nesses dados como um guia. Embora destinado principalmente a mães/filhos, este aplicativo pode se tornar popular em outros grupos demográficos. Pode não se encaixar em nossa visão original, mas as necessidades dos usuários devem ser atendidas. Caso contrário, eles encontrarão alguém que possa.
Conclusão
Vamos voltar ao meu TweetsPie mais bem sucedido fracasso. Apesar de alguns prêmios e grande cobertura da mídia, o aplicativo não conseguiu reter seus usuários (as razões pelas quais estão além do escopo deste artigo).
O sucesso nem sempre é aparente. Graças a toda a experiência aprendi muito. Dei, pelo menos, uma dezena de palestras sobre Como (não) falhar como startup em vários eventos e hackathons, e consegui alguns clientes na Toptal.
Ainda mais importante, tento não repetir os mesmos erros de desenvolvimento do Android com Ooshies seguindo as dicas e truques deste guia.
Para encerrar este longo guia, o que definimos como sucesso está, em um estágio posterior, fortemente associado ao que estabelecemos como meta no início. A medida de sucesso mais comum é, obviamente, ganhar muito dinheiro. Não importa se seu aplicativo faz isso ou não, você deve tentar fazer acontecer, e acredite em mim, no final você se tornará uma pessoa melhor (espero que alguém que consiga aprender OpenGL). Você fará novos amigos, poucos inimigos e, se tiver sorte/inteligente o suficiente, fará muitos usuários felizes.
Você pode verificar nosso site ou baixar Ooshies para experimentá-lo.