Oi! Eu sou Ivan e já sou desenvolvedor de aplicativos Android há um bom tempo. Ou assim parece. No passado (estamos falando de 2009), o Android era apenas uma criança e eu assistia o homenzinho verde crescer desde então. Temo que há algum tempo atrás, o Android conseguiu me superar.
como obter a data em javascript
Hoje em dia, o Android não está apenas dezenas de milhares de diferentes telefones e tablets. Está no seu pulso , na tua sala de estar , na tua carro , e assim que começarmos a atribuir endereços IP a objetos inanimados, ele estará em quase todos os lugares ao nosso redor. Muito terreno até mesmo para um desenvolvedor Android experiente cobrir!
Também há mais 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 incontáveis empresas de desenvolvimento de aplicativos móveis que geram bilhões em receitas todos os anos.
Então, como pode um desenvolvedor independente criar um aplicativo de sucesso neste enorme mercado com grandes jogadores? Não tenho ideia, não fiz um aplicativo de sucesso! Mas, eu fiz um fofo e gostaria de compartilhar minha história com você.
O sucesso (normalmente) não acontece durante a noite e este não é meu primeiro aplicativo. Eu tenho alguns que vão desde inesperados hits de desenvolvimento no fim de semana gostar Calendário Ortodoxo da Macedônia , com mais de 30.000 usuários em um idioma que não mais de 4 milhões de pessoas podem entender, até falhas mais bem-sucedidas como TweetsPie , um aplicativo com pesado metade cobertura e uma terrível base de usuários de pouco mais de 600 usuários ativos. Muitas lições lá!
Embora esses aplicativos tenham me ajudado a entender a mente da “criatura esquiva chamada de usuário” um pouco melhor, o que me inspirou foi um projeto de duas horas. Desenvolvido originalmente para me tornar um milionário, uma vez que 1.428.571 usuários compraram o aplicativo, já que o Google tira 30 centavos de cada dólar, The Dollar App foi feito para testar minha conta de comerciantes.
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 o abraçava.
E foi assim que nasceu uma ideia! Por que não usar a necessidade humana fundamental de um abraço e torná-lo bonito? Torne-o para um público específico, interativo, desafiador, divertido de usar e ainda mais divertido de compartilhar.
Todas as coisas que mencionei acima resultaram em 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 do que o iOS, mas os usuários do iOS compram mais. Aplicativos de mensagens são extremamente populares, mas jogos freemium topo 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, pois um papel de parede ao vivo é uma coisa do Android. Segundo, este característica foi adicionado ao Android 2.1, portanto, tem uma grande comunidade e alguns belos exemplos. Mais notavelmente Paperland e Roman Nurik's Código aberto Museus , provavelmente o melhor ponto de referência para o desenvolvimento do Android.
Embora existam muitos papéis de parede ao vivo, a maioria deles se enquadra na categoria de paisagens / clima, e muito poucos se enquadram na excesso de fofura categoria. 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. Demos a você um pequeno pacote fofo de alegria para abraçá-lo antes de ir para a cama à noite ou quando desligar o despertador pela manhã. E, melhor ainda, torne-o pessoal e personalizável.
Sem mais delongas, e antes de entrarmos nos detalhes técnicos, tenho o orgulho de apresentar a vocês: Ooshies - The Live Wallpaper
Possui:
Ooshies parecia uma ideia bastante direta de um aplicativo Android. Pinte um fundo, sobreponha algumas nuvens e estrelas, coloque um urso com um balão no topo e pronto. Mas não, é o Android! O que parece fácil muitas vezes é bastante difícil e tendemos a repetir o mesmo erros comuns uma e outra vez. Aqui está um rápido resumo dos desafios que enfrentei:
Aceleração de hardware - por que desenhar usando a CPU se 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 quisermos aceleração de hardware, precisamos usar OpenGL ES ou, melhor ainda, um estrutura isso faz 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 domésticos - o papel de parede ao vivo será hospedado no processo do iniciador doméstico, e diferentes iniciadores tendem a fornecer retornos de chamada diferentes para o serviço de papel de parede ao vivo (mais notavelmente Nova e TouchWiz).
Vida útil da bateria - se não for feito da maneira certa, os papéis de parede ao vivo e os widgets podem consumir muita bateria. Com todo o buzz sobre o Lollipop (Android 5.0) terrível duração da bateria o primeiro aplicativo a ser lançado será o papel de parede ao vivo.
Então, sobrepor um bitmap, pintá-lo em uma tela e, em seguida, alternar os frames 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 conforme você rola as telas iniciais, deve realizar atos aleatórios de gentileza e fazer você se sentir feliz.
E há um truque de desenvolvimento do 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 do que a montanha à distância. O mesmo efeito pode ser obtido movendo objetos em velocidades diferentes em uma tela. Embora estejam todos no mesmo plano, seu cérebro percebe os objetos que se movem mais rápido como mais próximos de você. Muito parecido com adicionar sombras projetadas , o efeito de paralaxe adiciona um eixo z.
E é aqui que o inferno começa! Na maioria dos dispositivos movendo o Ooshie, a sobreposição de clima 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 rolou. É 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á no meu TODOS lista, uma vez que qualquer coisa mais complexa do que o que temos agora exigirá uma aceleração de hardware. Mas, por enquanto, tenho que trabalhar mais duro, não mais esperto (estou aberto a sugestões nos comentários). Então aqui está o que fizemos:
Como grandes apoiadores do minSdk=15
iniciativa, 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 receita possível de usuários incapazes de atualizar seus telefones. Portanto, na maioria dos casos, seremos capazes de obter uma experiência tranquila com uma opção adicional para desativar a paralaxe, se desejar.
Outra grande otimização é como lidamos com os bitmaps. Um efeito de paralaxe muito semelhante pode ser obtido desenhando dois bitmaps em vez de três:
Sobreposição Ooshie - bitmap Ooshie cortado e cuidadosamente dimensionado (pode ser acessado)
Sobreposição combinada - um bitmap combinado de fundo e clima que se move com uma fração da velocidade de Ooshie
Este truque de desenvolvimento do Android economiza memória e acelera o tempo de desenho, para uma leve degradação do efeito de paralaxe.
Ao rolar as telas iniciais, os quadros serão desenhados com bastante frequência (de preferência, mais de 30 vezes por segundo). É crucial não desenhá-los quando a tela inicial não está visível (algumas telas de bloqueio, algumas gavetas de aplicativos, abrindo / trocando aplicativos etc.) para minimizar o uso da CPU.
Tudo isso está intimamente ligado às atualizações do tempo. Inicialmente, havia uma tarefa repetitiva, 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 do tempo são irrelevantes. Agora, as atualizações do clima 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:
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 sobre o teste JUnit (embora seja recomendado), mas sobre lançamentos em etapas ou seja testes alfa e beta .
Se você estiver interessado no desenvolvimento de software Android, os termos são diretos, mas aqui está um rápido resumo:
Testadores Alpha - um pequeno grupo de pessoas que consiste em seus colegas de equipe e pessoas da indústria, de preferência desenvolvedores Android. Provavelmente, eles terão dispositivos de última geração e brincarão com o opções de desenvolvedores . Eles enviarão rastreamentos de pilha, relatórios de bugs e até mesmo fornecerão algumas dicas e truques de otimização de código / IU. Perfeito para versões anteriores com recursos parciais / ausentes.
Testadores beta - um público muito mais amplo com vários dados demográficos. As versões estáveis devem ser publicadas aqui. Mesmo que seu nível de ninja seja muito alto, você nunca pode prever, muito menos contabilizar, todas as distribuições possíveis do Android e as maneiras como as pessoas usam seus telefones.
Assim que passamos pelo alfa, pensei que tínhamos terminado. Mas, cara eu estava errado ?! Descobrimos 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 nesta revelação:
Diferentes inicializadores têm telas iniciais padrão diferentes - 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 comum não sabe o que deslocamento de paralaxe significa - uma terminologia muito mais simples deve ser usada na página de configurações.
Um usuário aleatório irá 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 nosso Comunidade Google+ Beta .
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 seja 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:
Bem, podemos ter mantido o aplicativo em beta até que tudo esteja feito, 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 com o uso de ferramentas para obter o feedback. Você pode usar o Google Analytics, Flurry, Mixpanel, Crashalytics, ACRA , etc. para coletar dados de uso.
Por exemplo, ao analisar os dados, notamos que os usuários não clicam muito no botão de configurações, então deixamos isso mais claro e adicionamos um tutorial rápido para ajustar as configurações.
Embora 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:
Isso é importante porque fornece consequências para suas ações. Não cometa o mesmo erro que nosso sistema educacional, tornando os usuários consumidores passivos de conteúdo. Faça-os no comando. 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 bonito que rouba um sorriso no primeiro splash, então não é muito exagero pedir ao usuário favores de spam para desbloquear conteúdo.
No final, você precisa evoluir o desenvolvimento de seu aplicativo Android com base nesses dados como um guia. Embora destinado principalmente a mães / crianças, 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.
Voltemos ao meu fracasso de maior sucesso TweetsPie . Apesar de alguns prêmios e grande cobertura da mídia, o aplicativo não conseguiu reter seus usuários (os motivos estão além do escopo deste artigo).
O sucesso nem sempre é aparente. Graças a toda experiência aprendi muito. Eu dei, pelo menos, uma dúzia de palestras sobre Como (não) falhar como uma startup em vários eventos e hackathons, e conseguiu alguns clientes no ApeeScape.
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 um sucesso está, em um estágio posterior, intimamente associado ao que definimos como meta no início. A medida de sucesso mais comum é, obviamente, ganhar muito dinheiro. Não importa se seu aplicativo funciona ou não, você deve tentar fazer acontecer e, acredite, no final você se tornará uma pessoa melhor (espero que alguém que consiga aprender OpenGL). Você fará novos amigos, poucos inimigos e, se for sortudo / inteligente o suficiente, deixará muitos usuários felizes.
Você pode conferir nosso local na rede Internet ou baixe o Ooshies para experimentá-lo.