Olá, sejam bem-vindos ao O que há de novo no Android.
Ou como só eu gosto de chamar:
A palestra do Android.
Sou Chet Haase da equipe de ferramentas de IU do Android.
E eu sou Romaine Guy da equipe de Gráficos.
E eu sou Dan Sandler, da equipe de IU do Sistema.
Não temos muito tempo, então vamos começar.
Estão prontos para O que há de novo no Android?
Paramos aqui na última vez: API 25.
Então vamos direto ao git-sha ali,
colocá-lo no git-diff e vamos em frente.
É bom anotar isso.
Ok.
Próximo.
Essa foi boa, ok!
Eu amo isso.
Cara, lembra quando quase fizemos um enum disso?
Foi hilário.
Entenderam?
Acha que foi para isso que eles vieram?
Não sei por que não pensamos nisso antes.
Então, nós falamos sobre isso...
Contamos a vocês as novidades por anos.
E vocês podem ver que...
Eu esqueci meu blazer.
Eu tinha um blazer vermelho lindo,
mas alguém pegou emprestado para a palestra.
Você pegou o...
Parece que você está me ameaçando.
Mas este ano foi um pouco diferente, certo?
Tivemos as pré-visualizações de desenvolvedores já bem adiantadas,
então vocês já viram muitas destas APIs.
Vocês viram a palestra do Google,
em que mostramos um monte de coisa legal.
Tivemos a palestra do desenvolvedor
em que aprenderam mais coisas de desenvolvedores,
então o que fazemos aqui?
Para que esta palestra?
Crise existencial.
- Você testou este apontador? - Sim.
Pense nesta palestra como uma degustação de vinhos
ou de uísque ou uma daquelas máquinas de refrigerante
que vocês podem apertar todos os botões.
Esta é uma seleção artesanal, escolhida à mão,
de coisas que vocês devem ter ignorado na nova versão do Android,
coisas que precisarão fazer de todo jeito
para fazer parte do Android O
e, honestamente, coisas que gostaríamos de falar aqui no palco.
Assim, isso é realmente o que há de novo no Android.
O que você deve ter perdido na pré-visualização de desenvolvedor
ou na palestra do I/O
ou em outra palestra e por que você deve se importar.
Uma última coisa que eu quero assegurar que iremos fazer hoje...
é isto.
Todos sempre ficam empolgados com isto.
Mas nós vamos guardar para o final.
Vai ser ótimo.
Tudo bem, vamos começar.
- Romaine, fale sobre IU e os gráficos. - Sim, vamos começar.
A primeira funcionalidade que queremos falar
é uma que vocês viram esta manhã em uma das palestras.
Chet, este apontador não funciona.
Você não testou.
- Você sabe... - Perdendo tempo.
Sabe, eu vou ficar aqui atrás e passo os slides para você.
Certo. Vá para o próximo slide, por favor.
Por isso não quiseram nos dar um apontador.
Ok, então, uma funcionalidade...
Está funcionando para mim.
Fique aí atrás.
Eu não quero olhar para você.
A primeira funcionalidade que viram esta manhã
em uma das palestras, Picture-in-Picture não é mais só para a TV.
Também está em seu celular.
Temos um exemplo com um aplicativo terceiro,
a Netflix, rodando em seu celular, Picture-in-Picture.
Me dê esse apontador.
Vamos voltar.
Aí vamos nós.
E isso é realmente fácil de implementar em seu aplicativo.
Você só deverá modificar seu manifesto...
Pare de passar a animação, por favor.
Você só tem que escrever supportsPictureInPicture=true.
No O, não precisa mais fazer resizeableActivity=true,
e você deverá também testar mudanças de configurações.
Em seu código, quando quiser entrar o modo Picture-in-Picture,
só terá uma linha a chamar.
Terá sua activity e chamará enterPictureInPictureMode().
Supersimples e fará seu usuário superfeliz.
E uma funcionalidade que eu adoro: Gerenciamento de cores.
Estamos adicionando suporte para telas wide-gamut em O.
Não estará em todos os aparelhos.
Só os aparelhos que suportam esta funcionalidade
irão permiti-la para seu aplicativo.
Estamos adicionando suporte para arquivos PNG de 16bit,
para que tenham mais cores, cores mais saturadas.
Temos suporte para perfis ICC, perfis de cores
embutidos em bitmaps nas extensões JPEG, PNG e nas WebPs.
Isso permitirá uma entrega de cores mais precisa
em múltiplas telas.
Temos um monte de novas APIs,
mas falaremos mais delas no final da semana, em outra apresentação.
Já que uma imagem vale mais que mil palavras,
este é o gerenciamento de cor e como funciona.
Espero que esteja claro.
Mas, sinceramente, gerenciamento de cor é algo
que provavelmente já experimentaram em seus próprios aplicativos.
As cores aparecem diferentes nos dispositivos.
Temos soluções para você no Android O.
Se você quiser saber mais, farei uma apresentação
na sexta-feira, às 11h30, no palco 2.
Chama-se Entendendo as Cores.
Estamos adicionando também suporte para múltiplas telas.
Se seu aplicativo estiver pronto...
O apontador está horrível.
Se seu aplicativo já suporta várias janelas,
o modo multijanelas,
ele já suporta múltiplas telas no O.
Quando o celular ou um Android está conectado a múltiplas telas
e você tem um aplicativo compatível,
o usuário pode escolher mandar o aplicativo em uma tela diferente.
Quando isso ocorre, terá uma mudança na configuração de redimensionamento.
Você pode também controlar que atividade a tela mostrará.
Você pode usar o ActivityOptions para isso.
E deve mesmo testar seu app se quiser suporte para isto.
Para ajudá-los a testar, temos duas novas ferramentas.
Você pode executar adb shell dumpsys display,
que irá listar todas as telas disponíveis no aparelho.
Se você executar adb shell start com sua intenção de atividade,
você poderá especificar a tela na qual quer mostrá-la.
Então, é um modo bem fácil de testar.
Existe muito mais para estas APIs,
então não deixem de ir, em horário de expediente,
na sexta e na quinta,
em horário de expediente para Windows e atividades.
Próximo: Mídias.
Temos várias classes muito úteis em nosso pacote de mídia.
Temos o media player, o media recorder, o extrator e o codec.
E adicionamos uma nova API getMetrics em cada uma dessas classes.
Isso ajuda a consultar informações sobre a mídia que você está lidando.
Você pode consultar a resolução, o codec, o bitrate,
a duração, esse tipo de dado.
É superfácil de usar.
Escreva getMetrics em um destes objetos.
Você terá o PersistableBundle
e poderá olhar a documentação em developer.android.com
para saber que tipos de consultas estão disponíveis.
O som melhorou muito.
Agora você tem controle sobre o carregamento em seu aplicativo.
Então você pode especificar uma marca d'água baixa e alta.
Então, a reprodução do vídeo
não começará até que atinja a marca d'água baixa
e o sistema fará o melhor
para guardar os dados de cache entre a marca d'água baixa e alta.
Você pode especificar as marcas em duração ou quantidade de dados, em tamanho.
Também melhoramos as buscas.
Quando você busca um vídeo, pode escolher o comportamento.
Se você quiser procurar até um frame mais perto,
para o próximo keyframe, para o keyframe anterior
ou para o frame de sincronização mais perto.
E, finalmente, fizemos o som DRM com a Widevine,
bem mais fácil de usar em todos os seus aplicativos.
Para gravar, até agora, o media mixer
somente permitia adicionar um vídeo e/ou um áudio por vez.
Agora, você pode ter quanto áudios e vídeos quiser.
Você também pode criar suas próprias faixas.
O tipo MIME tem que começar com application/,
é basicamente uma faixa lateral
onde poderá codificar o dado desejado.
Um exemplo clássico é codificar dados de JavaScript
se quiser reproduzir um vídeo 360 ou algo parecido.
O Webview vem com APIs novas bem úteis.
Nós adicionamos a habilidade de salvar as navegações,
que vocês conhecem e amam no Chrome.
Isso detecta malwares e páginas inseguras.
Então, se for adicionar esta tag em seu manifesto, esta tag meta-data,
ela usará o mesmo backend e a API que o próprio Chrome usa
para tornar segura a navegação para seus usuários.
O WebView usa agora múltiplos processos.
Em particular, tem um processo de renderização.
Então também temos novas APIs para lidar com estes multiprocessos.
Se o processo de renderização parar de funcionar,
pode usar a API Termination Handle para detectar o erro
e decidir o que fazer no aplicativo.
Pode quebrar seu aplicativo, se quiser,
você pode reiniciar o WebView
ou pode inserir algo e mostrar uma mensagem ao usuário.
É muito mais gracioso que antes.
Você pode também usar a API Renderer Importance
para lidar melhor com as situações de pouca memória.
Quando o sistema está com pouca memória,
ele tentará buscar RAM de algum lugar.
E você pode dizer ao sistema se o seu WebView
é muito importante ou nem tanto para seu aplicativo.
Se o WebView é crítico ao seu aplicativo,
você, definitivamente, deve verificar essa API.
Você sabe que é o botão direito, né?
Sim, eu sei.
Existem algumas funcionalidades muito pedidas por animadores
especificamente para o AnimatorSets.
Foram bem complicadas de implementar, então demorou um pouco.
Mas agora, no Android O, temos capacidade de buscas
para o AnimatorSets.
Agora, se você tem um Animator, que é uma coleção de Animators infantis,
você pode procurar dentre elas
no AnimatorSet como um todo.
Também temos a habilidade...
de reverter.
Ei, Chet, você não tinha tentado implementar estas APIs há um tempo?
Talvez.
- E quem implementou as APIs no fim? - Não fui eu.
Sim. Exatamente.
Então, novas capacidades de reverter no AnimatorSet.
Você não terá mais que separar um AnimatorSet
com toda a funcionalidade e conseguir um ouvinte etc.
Nós fizemos todo o trabalho entediante para você.
Autopreenchimento, porque é muito chato colocar
todas as informações corretas várias vezes.
Vimos isso numa palestra antes.
É a habilidade de...
Há um formulário para preencher.
Existe um provedor que pode lhe dar esta informação.
Então, quando você tiver esses campos de texto,
nós podemos inserir a informação automaticamente para você.
Há também alguns aspectos diferentes.
Um é que você pode implementar
seu próprio serviço e prover esta capacidade,
ou depender do serviço que estamos provendo.
Ou, mais tipicamente, você implementará um cliente disso.
As visualizações padrão funcionam.
Se você está usando TextView, se está usando EditText,
já sabemos como receber esta informação para interagir com o serviço.
Não precisará fazer nada pelas visualizações padrão.
Se você usa visualizações customizadas
ou se quer dar mais informações sobre visualizações padrão,
temos APIs para nos dar dicas sobre como os tipos de valores são,
bem como APIs para nos dizer mais sobre suas visualizações customizadas
e como você quer interagir com isso.
Se suas visualizações customizadas têm hierarquia...
digamos que tenha visualizações de superfície,
em que você tenha visualizações dentro, mas todos sabemos que é SurfaceView,
então, há APIs para que você nos fale sobre a hierarquia virtual
que você quer que interajamos.
Falaremos mais sobre isso na sessão da sexta de manhã,
então, compareçam se quiserem aprender mais sobre autopreenchimento.
Agora, vamos conversar um pouco sobre texto.
Muitas coisas aconteceram na arena dos textos desta vez.
Acho que podemos reescrever. É isso!
Eu só uso esta fonte porque Dan odeia.
Ele sente dor física com isso.
É maravilhoso.
Eu acho que você o arrasou.
Tudo bem, então, primeiramente,
você pode usar XML para declarar a informação de uso de fonte,
usando algo como um hack simples com data binding,
mas é meio complicado de fazer.
Por que não oferecemos de fato esta capacidade para vocês?
Agora nós oferecemos.
Agora vocês podem pôr um arquivo de fonte
diretamente neste novo diretório de recurso de fonte.
Sim, com certeza.
Então, ponha isso no diretório ou nos diga a família da fonte.
Assim, pode prover várias fontes com informações sobre os estilos de cada
e aí, poderá usá-las diretamente, como em qualquer outro recurso.
Sobre o código, é só você dizer: "Dê-me este recurso"
e aí está.
Fontes para download.
Agora temos a capacidade de vocês dizerem a fonte que querem usar
e faremos o download
e o cache no sistema para você, se ainda não estiver lá,
ou se estiver no sistema, usaremos do cache.
É possível fazer isso por código ou pelo XML
e usá-lo como um recurso, como você fez nas fontes do XML
no empolgante slide anterior.
E também temos um provedor de fontes oferecido em uma versão não lançada
do Google Play Services.
Há uma versão beta disso já disponível na conferência desta semana.
Não sei de mais detalhes,
mas tem uma sessão onde poderá saber os detalhes
ou poderá ver no site do Play Services para saber mais sobre isso.
Ele lhe dá acesso a todas as fontes do Google.
Então, se você quiser usar uma das fontes padrão,
como esta fonte linda que usei para começar esta sessão,
talvez ela esteja lá, aí você poderá pedi-la
diretamente do Service.
Também existe a habilidade do TextView de redimensionamento automático.
Normalmente, se você redimensiona um TextView...
Nunca se sabe do que eles vão gostar, né?
Texto. Texto é ótimo,
melhor quando está na fonte certa.
O que você tem agora é o comportamento à esquerda,
ali onde redimensionamos o texto.
Não há mudança na fonte.
À direita, se optar pelo comportamento autodimensionável do TextView,
nós redimensionaremos a fonte para você.
Você pode especificar o comportamento ou os incrementos que quer usar,
ou especificar o tamanho que você quer obter
ao redimensionar.
Existem APIs para isso.
Há APIs tanto em XML como em códigos de linguagem de programação Java,
então, fiquem à vontade.
E para todas estas funcionalidades de texto,
fontes XML, fontes para download e TextView autodimensionável,
eles falarão sobre tudo isso na sessão O que há de novo em Biblioteca de Suporte,
amanhã de manhã.
E vocês se perguntam:
"Por que falar disso em uma sessão de Biblioteca de Suporte?
Não são APIs para a plataforma O?
Sim, elas são.
E também estão na Biblioteca de Suporte.
Então você poderá usar todas as capacidades,
até as das versões anteriores.
Utilidades AccessibilityService.
Se você estiver escrevendo com AccessibilityService, ótimo.
Temos novas capacidades que você pode aproveitar:
Detecção de linguagem,
a habilidade de pôr um botão na barra de navegação
junto aos demais botões para facilitar o acesso às suas coisas.
Controle de volume separado para o volume de acessibilidade,
para que você não misture o som com outros de outros aparelhos
e também a habilidade de definir gestos de impressões digitais customizadas.
Se você quiser saber mais sobre isso,
haverá uma sessão nesta tarde sobre acessibilidade
que você deve conferir.
E finalmente, uma das minhas mudanças bem pequenas preferidas...
Eu digo bem pequenas porque trata-se de uma só linha de código para a API,
mas o cls real que veio para consertar todo o código
que estava dependente da implementação anterior era enorme.
Eu não quero depreciar o trabalho aqui,
mas quanto à API, é muito pequena, quase escondida,
parece a mesma coisa de fora.
O modo como findViewById() era declarado era algo assim:
public View findViewById()
e aí você chama isso, passa em seu recurso de ID
e recebe uma view e, imediatamente, você a lança no que você quer.
No TextView, você tem de relatar ao TextView,
à esquerda e à direita e há parênteses, e é muito chato.
As pessoas usam bibliotecas de ajuda só para fugir do fato
disso parecer tão feio.
Então, agora...
...temos isto.
Eu chamo esta funcionalidade de Náufrago.
Acho que sou o único que a chama assim.
Ok, passou meu primeiro slide assim tão rápido. Tudo bem.
Eu quero falar um pouco sobre algumas coisas do Sistema de IU
que vocês irão observar.
Se você tem um app, precisa saber de alguns ícones adaptativos.
Acho que isso foi mencionado por cima
em alguns dos slides de Steph hoje mais cedo.
Estamos tentando economizar seu tempo e dinheiro.
Existem vários iniciadores por aí
e cada um deles tem uma recomendação diferente para o formato de seu ícone.
Os ícones adaptativos são uma nova peça da tecnologia
que trouxemos para vocês no O e que permite dizer:
"Este é meu fundo, esta é minha frente, corte em qualquer tamanho que quiser."
Então, mesmo se o iniciador for circular
ou tenha um retângulo arredondado ou se for algo horrível,
você terá um ícone que se adaptará exatamente
ao gosto do local.
Haverá muito mais informações sobre ícones adaptativos
na palestra da quinta-feira,
vocês devem ir a esta.
Tudo bem, vamos falar sobre atalhos e widgets,
pois o iniciador é também parte do Sistema de IU.
Antes, para pôr atalhos e widgets na tela do usuário,
existe um canal para atalhos que até funciona
e para widgets, você tem que implorar ao usuário:
"Por favor, veja se consegue achar nosso widget dentro do iniciador."
No O, agora você pode solicitar que uma dessas coisas
seja salva na área de trabalho do usuário,
usando o Gerenciador de Atalhos e o aplicativo Gerenciador de Widget.
E o usuário terá a oportunidade de dizer:
"Não quero isso na área de trabalho"
ou "Sim, eu quero, e, na verdade, vou continuar e pôr onde quiser."
Ou dizer: "Encontre um local para isto", que era o comportamento anterior.
Você não precisa acompanhar o usuário por um fluxo longo.
Você os leva direto a este diálogo.
É superconveniente.
Vejam todos os novos usuários que terão em seus widgets.
Poderia dizer que estou parando para os aplausos,
mas estou brigando com o apontador aqui.
Também falaremos disso na quinta-feira, às 16h30.
Notificações.
Vocês sabiam que estavam chegando.
Elas são superúteis.
São ótimas para o engajamento. Os usuários as amam.
Podem estar um pouco fora de controle.
Muitas coisas estão sendo usadas no fluxo de notificações agora
e é muito difícil enviar sua mensagem aos usuários que a querem.
É muito difícil para um usuário gerenciar o fluxo de demandas sob sua atenção.
Se está fora de controle, o usuário deve estar sob controle.
Este é um de nossos princípios desde o começo.
Nós adicionamos a habilidade de bloquear notificações de um pacote no Jelly Bean.
E no Nougat, refinamos um pouco e adicionamos o silenciamento.
Mas, depois de tudo isso, o maior pedido que recebemos dos usuários é:
"Será que eu posso bloquear algumas das notificações dos apps?"
Por outro lado, o maior pedido que temos dos desenvolvedores é:
"O usuário pode bloquear só algumas das minhas notificações?"
É a mesma coisa.
Todo mundo tem pedido a mesma coisa.
E é de onde os canais de notificação vêm.
É uma nova API no O.
Um canal é uma categoria de notificações de um aplicativo
em que todo compartilhamento tem o mesmo comportamento.
Vibração, som, luz, se aparece na tela,
de modo que o usuário tem controle explícito e refinado.
É um app, você poderá ajustar todos os seus próprios canais,
definindo o comportamento padrão para O.
Uma mensagem privada deve surgir.
Uma tag talvez não apareça ou tenha uma prioridade menor,
e os usuários ao tocarem na notificação
ou usarem o gesto de deslizar para vê-la,
eles podem ver em que canal está
e fazer mudanças diretamente ali.
Um vez que você alcança o O...
Se não levarem nada dos meus dois minutos aqui, levem isto:
Vocês devem usar os canais para cada notificação,
senão serão descartadas.
Então, até que você alcance o O, você pode começar devagar,
evoluindo seu sistema de notificações pelos canais.
Uma vez atingido o O, elas devem estar canalizadas,
pois tentamos ter uma experiência consistente
na qual o usuário sabe o que ele terá.
E vamos falar sobre isso e muitas outras coisas legais,
inclusive sobre design, todos os códigos que eu não coloquei aqui,
o que quer que seja aquela coisinha piscando ali,
na palestra das 16h30 de amanhã.
Tem mais um monte de coisa legal chegando ao Sistema de IU.
Listamos algumas delas aqui.
Ficou sem o final de novo.
Eu gosto de fazer isso com os slides.
Eu recomendo que vejam as visualizações de desenvolvedores
ou instalem o beta e brinquem com tudo isso.
Temos muito orgulhoso disso.
As novas APIs para desenvolvedores dos EUA.
Nós expandimos a API Strict Mode
e sei que todos estão usando em seu debugging.
Agora, no ThreadPolicy, vocês recebem um aviso
quando usar um I/O não carregado.
Se usar um fluxo de entrada ou saída
sem envolvê-los em um dos fluxos carregados,
você receberá um flash
ou o que quer que seja, um aviso que você tenha posto.
No VmPolicy, se você não fizer tags para suas sockets,
você também poderá ser avisado.
Tags nas sockets é muito útil para o debugging de tráfico
usando o Android Studio.
E finalmente, se abrir outra intenção...
se mandar uma intenção para fora de seu aplicativo,
e precisar da permissão, também poderá ser avisado.
É bem fácil de usar.
Parece com as APIs antigas que tínhamos.
Acesso a Arquivo de Mídia.
Há algum tempo, apresentamos os provedores de documentos,
há algumas versões, e eles eram bem úteis,
exceto quando tinha documentos grandes.
Se havia um documento grande, você precisava baixar todos os dados
antes de passá-los para o usuário do provedor do documento.
Agora, você pode criar descritores de arquivos procuráveis.
É extremamente útil para áudios, vídeos ou qualquer tipo de conteúdo grande.
Também é extremamente fácil de usar.
Você vai para o StorageManager, abre o descritor de arquivo proxy
dá um retorno e aí iremos invocar seu retorno
para requerer o tamanho dos documentos,
para solicitar alguma quantidade de dados no conjunto de bytes
e avisaremos quando fechá-lo.
Dados em cache...
são novas APIs que o sistema lhe dá para ser um cidadão melhor.
Todo app tem uma certa quantidade de dados que pode usar na partição cache.
Quando o sistema fica sem espaço, sem espaço de armazenamento,
ele vai começar a apagar alguns de seus dados na cache.
Se você ficar abaixo da cota que lhe foi dada,
você pode evitar que seus dados sejam apagados.
Para isso, você pode usar a StoreManager.
Você pode consultar o número de bytes
que são alocados em seu aplicativo.
Você deverá consultá-lo de vez em quando,
pois a cota pode mudar, dependendo do quanto você usa
ou da frequência que o usuário usa o aplicativo.
Quando quiser alocar dados, pode somente usar o allocateBytes().
Você pode fazer sozinho, pode criar um arquivo,
você pode criar um fluxo de saída, mas é muito melhor fazer assim,
porque quando você vai pelo allocateBytes(),
se necessário, o sistema apagará dados de cache de outro app
para dar espaço aos seus dados.
Significa que aquele getCacheQuotaBytes()
pode ser maior que o espaço livre que resta em seu aparelho.
Você também pode usar algo chamado setCacheBehaviorTombstone().
Isso é muito útil para que seu aplicativo seja capaz de diferenciar
um arquivo que nunca salvou cache
e um arquivo que teve cache, mas apagou.
Quando você ajusta este comportamento
e o sistema apaga alguns de seus arquivos em seu cache,
isso irá truncar o arquivo.
O arquivo estará sempre lá, mas o tamanho será 0.
Isso significa que a cache foi apagada pelo sistema.
E, finalmente, o espaço usável e o espaço alocado são diferentes.
SEGURANÇA
Há muitas coisas surgindo na segurança do Android nesta versão.
Nós temos pouco tempo para falar sobre isso.
Eu gostaria de enfatizar alguns dos acordos de privacidade
que são novos no Android O.
Se você tem usado o Android ID,
você precisa saber agora que será diferente para cada app,
para cada usuário no aparelho.
Não será mais usado para rastrear usuários entre os aplicativos no mesmo aparelho.
Se você tem pensado em propriedades do sistema
para conseguir um net.hostname, ele está vazio agora.
Se você realmente precisa de IDs de propaganda
para poder mandar os anúncios corretos e contextuais para os usuários,
é para isso que serve a API Advertising ID no Google Play Services.
Então, vão lá olhar no Google Play,
mas vocês não podem usar no Android ID.
Você não pode mais confiar da mesma forma que antes.
PRIVACIDADE
Eu tinha um slide aqui sobre WebView, mas Romaine pegou.
Outra coisa que eu queria mencionar sobre navegação segura no WebView
é que, como o WebView agora vai para a Play Store a cada 6 meses,
você será capaz de optar por funções de navegação segura
voltando até o Lollipop, o que é fantástico.
Também vimos a inauguração durante uma palestra
de algo chamado Google Play Protect,
que é, na verdade, tecnologia que já tivemos antes,
mas nunca tinha tido a visibilidade que realmente merecia,
pois nos voltamos para as pessoas o tempo todo.
Então, todo dispositivo com o Google Play tem o Protect ativado.
Todo aplicativo disponibilizado no Play
é pré-examinado e continuamente reexaminado
para cada nova versão disponibilizada.
Toda vez que instalar um aplicativo, se tiver o Play Protect configurado,
este aplicativo será examinado também,
mesmo se você o baixou de outra loja ou por meio do ADB install.
Estamos bem empolgados com isso.
Tem muito mais para falar...
muito mais para falar sobre segurança no Android.
Me deram um monte de slides, aí eu disse:
"Por que não fazem sua própria palestra?"
Não disse isso. Eles fizeram de todo jeito.
Na quinta, às 14h30, descobrirão as novidades
em segurança no Android do começo ao fim.
Tudo, desde maior rigidez do Kernel até mais coisas sobre o WebView.
Linguagem e tempo de execução.
Acho que vocês já sabem o que irei falar.
Nesta manhã, anunciamos suporte oficial para Kotlin.
Vocês viram Steph no palco
e eu a vejo sentada logo ali no corredor.
Se você encontrar com ela no I/O, vá agradecer.
Steph e toda a equipe por trás dela fizeram um trabalho incrível no passado,
por muito tempo, para trazer isso a vocês.
Então, agradeçam-lhe.
Ela passará os agradecimentos a toda a equipe.
Então, ele está disponível hoje no Android 3.0.
Já tem muito mais documentações on-line.
Eu poderia passar horas falando sobre Kotlin
e por que é bom para você e para nós.
Na verdade, devo roubar esta palestra?
Na verdade, ele poderia.
Ele faz, de fato.
Mas, infelizmente, não temos tanto tempo nesta sessão.
No lugar, eu os convido a vir na sexta-feira, às 10h30, neste palco.
Haverá uma palestra chamada Introdução ao Kotlin, de Andrey Breslav,
o principal designer de linguagem na JetBrains;
e Hadi, vice-presidente de Apoio à Programação na JetBrains.
E depois, à tarde, no palco 4,
teremos a Vida é ótima e Tudo vai ficar bem,
Kotlin está aqui por Christina Lee do Pinterest
e Jack Wharton do Square.
E é importante para nós,
porque a razão pela qual trouxemos o Kotlin para vocês
é que a comunidade está usando o Kotlin.
Ouvimos vocês e estamos trazendo o que vocês queriam.
Então, queríamos que vocês, a comunidade, viessem ao palco
para falar sobre isso melhor que a gente.
Se tiverem perguntas, podem vir ao sandbox do desenvolvedor
no expositor Android Platform
hoje das 15h às 16h30, quinta-feira das 14h às 16h
e na sexta-feira do meio-dia às 14h.
Andrey, o designer de linguagem, estará lá para responder a todas as questões.
Então, venham se quiserem saber algo sobre o Kotlin.
Vão lá e façam suas perguntas.
Agora, como Steph mencionou, também estamos duplicando
em nossas outras linguagens, a linguagem de programação do Java
e temos também C e C++.
Para a linguagem de programação do Java,
adicionamos novos pacotes no Android O.
Nós temos java.time, que finalmente facilita a manipulação de hora e data.
E faz sentido.
Faz mais sentido que as APIs mais antigas.
Já era em tempo.
Sim, já era em tempo.
Também trouxemos para vocês o java.nio.file.
Ele melhora a boa e velha API java.io.file.
Ele permite que você acesse os atributos do arquivo.
Ele permite a fácil manipulação de caminhos e lê arquivos.
Nós veremos um exemplo.
E, finalmente, a java.lang.invoke, que é uma variação leve no reflexo.
Isso é uma aproximação grosseira, mas muito legal,
pois permite que você transforme
e cubra métodos de handles em seu aplicativo.
Aqui está um exemplo de novos arquivos API.
Você pode usar a classe de caminhos para obter um caminho.
E aí, você entra com Files.lines().
Ele lerá todo o conteúdo do arquivo.
Você terá um fluxo.
Neste exemplo, estou usando lambdas e APIs de fluxo para remover
todas as linhas vazias, todas as linhas que começam com sinal de libra
e aí, eu coleto tudo de volta num só fluxo no final.
Então é bem mais fácil que antes.
Tempo de execução
Algumas mudanças no tempo de execução.
Ouvimos algo sobre eles nesta manhã
e tem mais sobre isso nesta semana.
Novo coletor de cópias simultâneas, que faz tudo mais rápido e melhor.
Cópia simultânea significa sem pausa,
exceto quando existe um GC total.
Ele pode fazer tudo o que precisa fazer no segundo plano,
enquanto você faz outra coisa.
Particularmente, uma das coisas realmente legais que isso faz
é compactar o acúmulo no primeiro plano.
Antes, eu acredito que na primeira versão,
ele tinha a habilidade de compactar o acúmulo, o que é ótimo.
Ele pode desfragmentá-lo, torná-lo menor,
pode fazer alocações e coleções mais rápido,
mas só poderia fazer isso com as atividades no segundo plano.
Então, ficaria inativo e faria isso durante esse estado de inatividade.
Mas se estivesse no primeiro plano, não haveria nada que pudesse fazer
quanto à expansão e fragmentação.
Agora, ele pode coletar no primeiro plano,
desfragmentar no primeiro plano e tudo fica mais rápido.
Há também um mecanismo mais rápido para alocações.
Nós podemos fazer alocações bump pointer
o que é muito mais rápido.
Coleções são mais rápidas e tudo isso resulta
em menos lixo para você.
Ser mais rápido ao alocar coisas, mais rápido ao coletar coisas
significa que lidar com lixo e memória em geral
é muito mais fácil usando o ART na versão O.
Várias otimizações passam desenrolando, incorporando.
Uma das coisas a se notar é que o Dalvik foi criado
com limitações de tipo de memória, certo?
Tudo era economizar memória com o Dalvik,
o que significa que só pode otimizar até certo ponto.
Ele meio que chega ao fim da vida quando consegue otimizar as coisas.
Quando o ART surgiu on-line, eles construíram uma plataforma
sobre a qual pudemos construir a otimização futura.
Estamos colhendo os benefícios agora
em que cada lançamento, incluindo o O e as versões futuras,
nós seremos capazes de fazer mais.
E tem um monte deles nesta versão.
Você tem que checar a sessão mais tarde nesta semana
para mais informações.
Também há a localidade DEX.
Esta, em particular, melhora o tempo de lançamento para atividades
porque nós podemos coletar toda a memória no mesmo local.
É mais fácil e mais rápido de acessar enquanto seu aplicativo inicia.
Haverá uma sessão na sexta-feira de manhã Performance e Melhoria de Memória
Compareçam para mais detalhes.
Além da plataforma, temos a Biblioteca de Suporte.
Temos outros mecanismos para entregar coisas que não são só sobre a versão O.
Queríamos destacar alguns deles.
Tem a versão v26 beta, que virá com a visualização 2 para desenvolvedores.
Aquilo que já falamos sobre texto, fontes e XML,
fontes para download, bem como TextView autorredimensionável.
Todos eles estão lá. Podem checá-los.
Além disso, tem algo que chamamos de EmojiCompat.
Um dos maiores problemas que temos com emojis
é que se seus amigos estão lhe mandando emojis
que são de um padrão futuro, diferente da versão que você tenha,
não é possível que você veja estes emojis.
E você verá tofus no lugar,
o que, de acordo com os emojis que eu já vi,
podem ser mais atrativos,
mas não terão sentido.
Não seria legal se pudesse ter emojis atualizados em seu aparelho?
Agora, temos dois mecanismos que os aplicativos podem usar
para ter emojis atualizados.
Um é que os apps podem ter um pacote com os emojis atualizados.
Eles podem atualizar os aplicativos na Play Store
e depois, para seus usuários, de modo que os usuários
tenham atualizações oportunas destes emojis.
O outro, e provavelmente uma solução melhor em longo prazo,
é realmente usar um serviço que provemos para as fontes para download
que falamos mais cedo, em que possam baixar fontes atualizadas automaticamente
por meio das fontes para download.
Então, o app pode construir a capacidade de usar a capacidade
das fontes para download para baixar emojis atualizados,
enquanto os provemos no serviço.
Novamente, vá até as Novidades no link da Biblioteca de Suporte
amanhã de manhã para saber mais sobre isso.
Também tivemos mais coisas acontecendo sobre animações
além daquele pouquinho sobre o AnimatorSet, que falei antes.
Agora, temos a habilidade de ter animações baseadas na física.
Então se queremos ver isso em forma de animação,
a habilidade de ter animações conduzidas pela velocidade.
Todas as capacidades das animações que temos na plataforma até agora
foram criadas em volta da ideia de duração.
Você determina o tempo que quer que ela execute.
Mas, em muitas animações, você quer condução pela velocidade.
Em particular, animações conduzidas pela interação do usuário.
Arrastar algo na tela e soltar
não seria legal se ele se soltasse de seu dedo,
na mesma velocidade que você estava o arrastando
quando você soltasse?
Então, agitar, rolar, todas estas coisas
pedem, de fato, um sistema de animação baseado na velocidade no lugar.
Você pode fazer isso com os animadores, mas é muito tedioso.
Isso requer matemática.
Matemática é difícil.
Então, criamos nisso a capacidade para esse Sistema de Física de Animação,
que é mais natural, mais interativo e pode ser interrompido,
porque foi projetado para trabalhar com aquele modelo de interatividade.
Eis uma pequena amostra disso.
Enquanto arrastamos a coisa de cima, os outros dois círculos estão ligados
ao de cima por meio de molas que você definiu.
E assim, eles seguem no espaço.
Eles não estão seguindo em sincronia,
mas estão basicamente nas molas que estão anexadas.
Eles se beneficiam imediatamente da interatividade
e da noção baseada na física destas molas.
Haverá uma palestra na tarde da sexta
sobre novas animações baseadas na física.
Compareçam se quiserem saber mais sobre isso.
Componentes de arquitetura.
Isso foi mencionado nas palestras.
Pensamos que às vezes o desenvolvimento do Android
é um pouco mais difícil que precisa ser.
Então, demos um passo atrás e dissemos:
"Quais são os maiores problemas que devemos tentar novamente
para tentar simplificar para os desenvolvedores de apps?"
E alguns deles nós fizemos tentativas específicas
agora ou durante o ciclo de vida.
Parece ser meio difícil lidar com o fato de que suas atividades podem morrer
quando você gira a tela, ou ela vai para o segundo plano,
ou o que seja.
Encontrar exatamente o estado que você está pode ser chato.
É um problema atual que todos os desenvolvedores precisam lidar.
Nós adotamos outra abordagem para deixá-lo mais fácil.
E além disso, também demos uma olhada na persistência.
Agora, podem publicar SQL bruto
e o que importa será o que você tem no sistema.
Temos um novo jeito de fazer isso que constrói sobre essa capacidade
e o torna mais fácil e mais poderoso.
Vamos falar sobre tudo isso nesta semana.
Haverá uma introdução aos componentes de arquitetura,
não deixem de ir, será nesta tarde.
Na verdade, imediatamente após esta sessão.
E amanhã de manhã, nós vamos dar uma palestra
sobre o problema do ciclo da vida e como nós resolvemos isso.
Também falaremos sobre persistência e offline.
Todos são bits que já podem testar numa versão anterior.
Então vejam.
Tornará suas vidas de desenvolvedores mais fáceis.
Há algumas mudanças de comportamento,
algumas que vocês se importarão mais que outras.
Houve mudanças no comportamento dos aplicativos em segundo plano,
particularmente, a localização.
Se você a está executando como um aplicativo em plano de fundo,
você só conseguirá informações de localização grosseiras.
Todas essas coisas estão sendo feitas não para dificultar,
mas para melhorarem seus dispositivos, certo?
Se todos os aplicativos tiverem todas as capacidades toda hora,
e fizerem o que precisam ou querem, a qualquer hora,
você irá gastar toda a sua bateria,
porque todos estão trabalhando a mil todo o tempo.
Então tentamos ser prudentes quanto a quais aplicativos
realmente precisam usar os serviços e em que ocasião,
de modo que podemos tornar a experiência do usuário bem melhor.
E a experiência de seus usuários bem melhor também.
Um deles é em localização,
informação grosseira quando você está no segundo plano.
Outros são os wakelocks.
Nós percebemos que era comum que um aplicativo
fosse para o segundo plano e depois para um estado cache
e ter um wakelock ao mesmo tempo.
Ele manteria o wakelock e guardaria por muito tempo.
Isso realmente acaba com a bateria.
Agora, um tempo depois de você chegar ao estado cache,
o wakelock é automaticamente dispensado,
para que não coloque o dispositivo num estado inapropriado.
Também há limites para a execução quando você está no segundo plano.
Também houve mudanças nas janelas de alerta.
Particularmente, há um novo tipo de janela
chamado Type Application Overlay.
Se você está mirando no O SDK,
então este é o tipo de janela que você deve usar se quiser ter
a capacidade de janelas de alerta.
Se você tem versões anteriores, obviamente, isso não existia.
Você não usará isso.
Saiba que qualquer tipo de janela que você estiver usando
estará situada embaixo de um desses tipos de janelas application overlay
porque agora nós temos uma política de layering mais claramente definida.
Tem muito mais informações sobre isso nesta tarde, às 17h,
Checando o Segundo Plano e Outras Percepções.
Por favor, vão lá se quiserem saber todos os detalhes sobre isso.
E, finalmente, prometemos que voltaríamos a isso, não é?
Sim.
Isso é mais uma coisa, né?
Tudo bem.
Nos iríamos falar sobre isso, e eu acho...
Quero dizer, nós temos um rufar de tambores, não temos?
Que tal um rufar de pernas?
Podemos ter um rufar de pernas?
Isso soa bem.
Infelizmente, estou olhando para o relógio no palco
e vou dizer que O significa...
Oh, não. Acabou o tempo.
Obrigado.