Livro Google Android vs Android Essencial

Posted by rlecheta on maio 25, 2018
Livro Android / Comentários desativados em Livro Google Android vs Android Essencial

Olá pessoal, tenho uma notícia boa e outra ruim, qual vamos primeiro? rsrs

A ruim, é que o livro Google Android 5ed chegou ao fim de sua jornada. Ele foi lançado em 2008 (10 anos atrás) nos primórdios do Android, quando nem sequer existia um celular Android no Brasil. Muitas pessoas na época criticaram e falaram que o Android não iria vingar (na época fazíamos apps em J2ME, BlackBerry, PocketPC rsrs).. mas o resultado disso já sabemos, o Android é o sistema operacional móvel mais utilizado no mundo e está disponível para diversas plataformas, como smartphones e tablets, TV (Google TV), relógios (Android Wear), carros (Android Auto) etc.

A 1a edição deste livro, escrevi apenas testando o SDK no emulador… fui conhecer um celular Android apenas no meu primeiro curso que ministrei na TempoReal Eventos, pois um aluno tinha ido aos EUA e comprado o famoso G1, o primeiro celular com Android.

Mas vamos a notícia boa rsrs… vou continuar meus esforços em ensinar Android com 2 livros:

  1. Android Essencial: livro escrito em Java
  2. Android Essencial com Kotlin: idem o livro acima, escrito em Kotlin.

Ambos os livros vão receber uma 2a ed atualizada, recém revisadas logo depois do Google I/O 2018. De diferente da 1a edição é que foi incluído um capítulo sobre a famosa lib RxAndroid, muito utilizada atualmente no mercado, e um capítulo sobre Push Notifications com Firebase.

E o que me levou a tomar essa decisão?

Bom, primeiramente o livro Google Android é muito grande, possui mais de 1000 páginas :-), então revisá-lo não era nada fácil, ainda mais que sempre temos mudanças no SDK, APIs, etc.

Mesmo assim, sempre defendi a ideia de que o livro deveria ensinar os conceitos principais do Android, pois com isso, o leitor conseguiria continuar os estudos e seguir sua jornada como desenvolvedor. Mas mesmo assim, não era fácil atualizar o livro, pois sempre mudava alguma coisa.

O segundo grande motivo de parar o livro Google Android é que ele tinha capítulos avançados que percebi que não eram tão lidos, vejo isso pelos emails que recebo e inclusive com vários devs que trabalham comigo na Livetouch.  Capítulos como sensores, bluetooth, salvar estado, threads avançados, etc muitas vezes nem eram lidos, já alguns capítulos como Wear, etc, sempre davam trabalho para manter pois a API mudava.

E como muitos leitores sabem, faz tempo que tento desenvolver um aplicativo passo a passo durante o livro, o famoso app dos Carros, que tem várias funcionalidades encontradas em aplicativos reais como:

  1. Interface de tela utilizando padrões do Google e Material Design
  2. Consulta em Web Services.
  3. Os livros Android Essencial mostram como listar os carros, e também como salvar/atualizar/deletar os carros do servidor utilizando o web service;
  4. Também é mostrado como tirar fotos com a câmera e fazer o upload para o servidor;
  5. O aplicativo tem uma funcionalidade de favoritar os carros, para demonstrar como utilizar o banco de dados no aplicativo;
  6. Tudo isso com libs modernas como OkHttp, Retrofit e Room, todas consagradas pelo mercado;
  7. O aplicativo também possui funcionalidades de mostrar mapas, vídeos, etc.

Tenho certeza de que desenvolver este projeto durante a leitura do livro é um grande começo para você se tornar um desenvolvedor Android.

Fora tudo isso ambos os livros Android Essencial (Java e Kotlin) possuem vários capítulos extras que explicam tudo o que você precisa saber para desenvolver aplicativos, como:

  • Criar interfaces ricas e navegação de telas
  • Componentes visuais do Material Design
  • Boas práticas de desenvolvimento
  • Web Services
  • Bancos de Dados
  • Threads
  • Como executar serviços em background no Android – Services e BroadcastReceiver
  • Alarmes para agendar tarefas
  • Push Notifications com Firebase
  • Multimidia: vídeo, áudio, câmera
  • Mapas e Localização (GPS)
  • Notificações
  • Google Play
  • E diversas dicas sobre o desenvolvimento para Android durante o livro.

Então é isso, tenho plena convicção que o livro Android Essencial (Java ou Kotlin) cumprirá muito bem o papel de ensinar Android.

O Essencial é um livro enxuto e que vai direto ao assunto, mas ao mesmo tempo é rico em detalhes, e como o nome já diz, traz o Essencial para você se tornar um desenvolvedor Android.

Por experiência, posso afirmar que na Livetouch entram estagiários sem conhecimento em Android e em questão de 2 a 4 semanas estão programando, pois o primeiro treinamento que recebem é ler o livro. Depois é claro que continuam os estudos, metodologias, técnicas avançadas, libs, etc, mas isso é normal.

Então por hoje, isso é tudo pessoal 🙂

Para finalizar, gostaria de agradecer todo o feedback que sempre recebi de meus leitores durante todos estes anos. Recebo muitos emails, mensagens no Facebook, etc, que sempre me motivaram a continuar escrevendo, obrigado!

Abraços!

Livro Android Essencial com Kotlin

Posted by rlecheta on julho 26, 2017
Android, Livros / 6 Comments

Olá pessoal, este post visa explicar um pouco do conteúdo mostrado no livro Android Essencial com Kotlin.

O nome Essencial surgiu da ideia de ter um resumo simples e prático sobre os principais assuntos no desenvolvimento para Android. Este livro está mais atualizado e possui mais exemplos que a sua mesma versão em Java.

Obs: O livro utiliza libs como OkHttp e Retrofit para web services e Google Room para persistência de dados. Durante a leitura do livro são dadas diversas dicas de produtividade com a linguagem Kotlin, e também é explorado libs criadas pela JetBrains como Anko e Android Extensions.

O que veremos neste livro?

O livro começa com uma introdução ao Android e logo depois temos um capítulo básico sobre a linguagem Kotlin.

Os próximos capítulos são básicos sobre o desenvolvimento de aplicativos para Android, como a construção de telas/layouts, tratamento de eventos, activity, toolbar, fragments, etc.

No capítulo 9 iniciamos o desenvolvimento do aplicativo dos carros, que se estende até o final do livro. Este aplicativo consulta os carros no servidor criado no meu livro de Web Services RESTFul.

O aplicativo mostra diversos componentes do Material Design como o Navigation Drawer (menu lateral), Toolbar, Tabs, Listas , Cards, etc e mostra de forma simples boas práticas de desenvolvimento. O objetivo é aprender fazendo e tenho certeza de que no final da leitura você terá uma boa base sobre como continuar seus estudos e criar seus próprios apps.

Na home do aplicativo existem 3 tabs onde é possível visualizar os carros por tipo (clássicos, esportivos e luxo), e no botão FAB (+) é possível cadastrar um novo carro enviando os dados para o servidor, inclusive o app mostra como tirar uma foto e fazer upload.

Na tela de detalhes do carro, podemos assistir um vídeo do carro, visualizar um mapa de onde ele é fabricado, e até podemos Favoritar o carro. O carro favoritado é salvo no banco de dados do aplicativo e pode ser visualizado na Tab Favoritos.

Obs: O livro utiliza libs como OkHttp e Retrofit para web services e Google Room para persistência de dados. Durante o livro diversas dicas de produtovidade com a linguagem Kotlin são fornecidas, e também é explorado libs criadas pela JetBrains como Anko e Android Extensions.

Este vídeo mostra o aplicativo dos carros que será construído durante o livro. Durante o vídeo veja que eu cadastro e excluo um carro, e também favorito alguns.

Fora o aplicativo dos carros, o livro possui capítulos simples sobre diversos temas importantes do desenvolvimento para Android, como: Notificações, Alarmes, Receivers, Services, mensagens de Push com Firebase, etc.

Espero que gostem do livro, abs.

Android Studio e a ferramenta de compilação (build-tools) 26.0.0

Posted by rlecheta on julho 18, 2017
Android, Tutorial / 2 Comments

Olá pessoal, segue um comunicado importante sobre o método findViewById(id).

A partir da  ferramenta de compilação (build-tools) 26.0.0 e da biblioteca appcompat-v7 versão “26.0.0 Beta 1”, o método findViewById(id) mudou de assinatura:

Antigamente o método findViewById(id) retornava uma View e era preciso fazer o cast, como neste exemplo:

Java:

ImageView img = (ImageView) findViewById(R.id.img);

Kotlin:

val img = findViewById (R.id.img) as ImageView

Ao utilizar a nova versão da lib appcompat-v7 (26.0.0) o método findViewById(id) retorna um tipo genérico (subclasse de View). Por isso mudou a forma de fazer a chamada:

Java (sem cast):

ImageView img = findViewById(R.id.img);

Kotlin (sem cast):

val img = findViewById<ImageView>(R.id.img)

Se você conhece o que são tipos genéricos é simples entender. Veja que foi adicionado o tipo T na assinatura do método findViewById(id). Para você conferir, segue assinatura do método:

public <T extends View> T findViewById(@IdRes int id) {

return getDelegate().findViewById(id);

}

O novo livro Android Essencial com Kotlin que em breve será lançado pela editora Novatec já contém estas atualizações.

Documentação Oficial (release notes):

https://developer.android.com/topic/libraries/support-library/revisions.html

Android – compilando projetos com o plugin do Gradle 3.0.0

Posted by rlecheta on julho 18, 2017
Android, Tutorial / Comentários desativados em Android – compilando projetos com o plugin do Gradle 3.0.0

Olá pessoal,

A última versão do plugin do Gradle para o Android Studio e a ferramenta de compilação (build-tools) tiveram algumas mudanças que acho importante comentar.

Se você baixar o Android Studio 3.0 atualmente, é provável que ele já esteja atualizado, mas de qualquer forma, segue dicas do que é necessário para atualizar os plugins de compilação:

Dica 1) Sempre mantenha o Android Studio atualizado, e comece a utilizar o Android Studio 3.0, mesmo que ainda esteja em beta.

Dica 2) Quando você fica na dúvida de qual versão utilizar de alguma biblioteca (ex: appcompat-v7), ou o que colocar nos arquivos build.gradle e gradle-wrapper.properties, crie um novo projeto no Android Studio, pois ele vai criar os arquivos corretamente, então é só copiar 🙂

Agora vamos aos detalhes…

1) Atualizar plugin do Android para Gradle

No arquivo build.gradle (raiz do projeto), podemos usar a nova versão do plugin (3.0.0 ou superior). Note que quando estiver lendo este tutorial é provável que exista uma nova versão, então sempre atualize. Atualmente é fácil atualizar pois o Android Studio vai lhe avisar que existe uma nova versão.

2) Atualizar versão do Gradle

Para que o plugin funcione é preciso atualizar a versão do Gradle que o projeto utiliza, isso é feito no arquivo gradle-wrapper.properties.

No meu arquivo atualmente estou usando a seguinte URL para a versão do Gradle:

distributionUrl=https\://services.gradle.org/distributions/
gradle-4.1-milestone-1-all.zip

 

 

 

3) Utilizar a diretiva “implementation” ao invés de “compile” no arquivo app/build.gradle

Antigamente, uma dependência no gradle era adicionada da seguinte forma:

compile 'com.android.support:appcompat-v7:versao-xxx'

Atualmente, o Google recomenda utilizar a diretiva implementation ao invés de compile, mas por questões de compatibilidade ambas vão continuar funcionando.

implementation 'com.android.support:appcompat-v7:versao-xxx'

Para maiores detalhes, segue documentação oficial do Google:

https://developer.android.com/studio/build/gradle-plugin-3-0-0-migration.html

Dica Android: Google Play Services

Posted by rlecheta on maio 21, 2017
Android, Tutorial / Comentários desativados em Dica Android: Google Play Services

Pessoal, esse post é rápido mas vale a pena lembrar:

Nunca importem o Google Play Services inteiro, pois ele é grande e vai pesar no seu aplicativo/apk.

compile 'com.google.android.gms:play-services:10.2.6'

O recomendado é adicionar a dependência apenas dos módulos que precisarmos. Por exemplo, se formos utilizar Mapas e GPS basta estas 2 linhas:

compile 'com.google.android.gms:play-services-maps:10.2.6'
compile 'com.google.android.gms:play-services-location:10.2.6'

Isso vai deixar seu apk muito mais leve! Para maiores detalhes sobre o Google Play Services, visite o site oficial:

https://developers.google.com/android/guides/setup

Device File Explorer no Android Studio 3.0

Posted by rlecheta on maio 21, 2017
Android, Tutorial / Comentários desativados em Device File Explorer no Android Studio 3.0

O Android Studio 3.0 possui uma nova janela muito útil chamada de Device File Explorer. Ela permite acessar os arquivos do emulador de forma rápida. Ela fica no canto direito inferior como mostra  a figura abaixo.

Você descobrirá que é simples enviar arquivos para o sdcard do Emulador ou salvar arquivos no seu computador…

No capítulo de Multimidia do livro Google Android, tem um exemplo que mostra como reproduzir um vídeo que está no SDCard. Pois bem, para testar o exemplo é só copiar o arquivo para a pasta /sdcard/Movies/last_mohicans.3gp, como mostra a figura acima.

Para testar o exemplo, lembre-se de atualizar o código para apontar para o local onde você salvou o arquivo, exemplo:

Pronto, é só isso! Como vimos no Android Studio 3.0 ficou bem mais simples copiar arquivos para o sdcard.

A figura abaixo mostra o vídeo no emulador:

 

Desenvolvendo para iPhone e iPad – 5ª edição

Posted by rlecheta on maio 04, 2017
iOS, Livros / Comentários desativados em Desenvolvendo para iPhone e iPad – 5ª edição

Finalmente foi lançado a 5ª edição, atualizado para o Swift 3.

https://novatec.com.br/livros/desenvolvendo-para-iphone-ipad-5ed/

 

Compartilhando arquivos no Android 7 (Nougat) e a exception FileUriExposedException

Posted by rlecheta on novembro 03, 2016
Android, Tutorial / 3 Comments

É raro termos algum erro de compatibilidade ao atualizar as versões do Android no aplicativo, mas no caso do Android 7 (Nougat) temos a exception FileUriExposedException.

Se você ainda não se deparou com ela, logo irá.

Digamos que você possui um aplicativo que tire fotos. Para exemplificar, temos este trecho de código que cria um arquivo e chama a Intent da câmera:

screen-shot-2016-11-02-at-19-26-24

Tudo normal com o código certo? Mas se você atualizar o seu projeto para compilar com a API 24/25 (Android 7) verá uma exception igual esta:

screen-shot-2016-11-02-at-19-14-35

Segundo a documentação do Android, esta exception é lançada ao expor um arquivo por uma Uri para outra aplicação. Neste caso, o erro é porque estamos expondo o arquivo que criamos para a aplicação nativa da câmera, pois a câmera precisa salvar a foto neste arquivo.

https://developer.android.com/reference/android/os/FileUriExposedException.html

Sem mais demoras, vamos logo a solução:

Edite o arquivo AndroidManifest.xml e adicione a tag <provider> dentro da tag <application> .

Exemplo: AndroidManifest.xml

screen-shot-2016-11-02-at-19-19-45

Veja que dentro de <meta-data> é referenciado um arquivo XML @xml/provider_paths com a configuração de compartilhamento para os arquivos da aplicação, neste caso vamos colocar o “.”, para compartilhar tudo desde a raiz.

Exemplo: provider_paths.xml

screen-shot-2016-11-02-at-19-20-46

Feito estas configurações no projeto, basta trocar a linha que cria a Uri do arquivo:

Uri uri = Uri.fromFile(file);

Por esta:

Uri uri = FileProvider.getUriForFile(context, context.getApplicationContext().getPackageName() + “.provider”, file);

Então, o código que chama a Intent da câmera que mostrei anteriormente fica assim:

screen-shot-2016-11-02-at-19-33-55

Exemplo: CameraUtil.java

Pronto! Agora podemos tirar fotos no Android 7 (Nougat). Espero que esta dica ajude alguém 🙂

Para maiores informações, veja a documentação oficial.

device-2016-11-02-193556

XCode 8 e Swift 3

Posted by rlecheta on outubro 23, 2016
iOS, Livros / 19 Comments

Olá pessoal

A 4a ed do livro de iOS foi feita utilizando o XCode 7 com Swift 2.
ios
Recentemente foi lançado o Xcode 8 com suporte ao Swift 3.
Para auxiliar os leitores que compraram a 4ed, este post visa explicar algumas das mudanças e também para dizer que atualizei os fontes no github com os exemplos com Swift 3.
Espero que o fonte ajude quem comprar a 4ed e precisar estudar Swift 3.
Para migrar os projetos da 4ed para Swift 3 foi simples. Eu abri cada projeto no Xcode 8 e o próprio Xcode mostrou o wizard para migrar para o Swift 3. Na maioria das vezes deu certo, e quando não funcionou fiz pequenos ajustes.
A figura abaixo mostra o wizard do XCode 8 durante a migração do Swift 2 para o Swift 3. Ele mostra um preview de cada arquivo, portanto eu recomendo que você leia cuidadosamente cada mudança pois é uma ótima maneira de aprender a nova sintaxe.
9-2
Mas o que mudou?
Algumas coisas foram a sintaxe como mostra esse código abaixo.

Swift 2: UIApplication.sharedApplication().openURL(NSURL(string:url)!)

Swift 3: UIApplication.shared.openURL(URL(string:url)!)

Note que a classe NSURL mudou para apenas URL. Isso acontece também com várias outras classes que tinham o prefixo NS.

A seguir temos outro exemplo de código que está diferente:

Swift 2:

self.window = UIWindow(frame: UIScreen.main.bounds)

self.window!.backgroundColor = UIColor.white

Swift 3:

self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

self.window!.backgroundColor = UIColor.whiteColor()

Uma mudança importante foi na forma de declarar os métodos, pois foi adicionado um prefixo “_” opcional no primeiro parâmetro. Digamos que temos uma função soma(n1,n2) com a seguinte declaração.

func soma(n1:Int, n2:Int) -> Int {

   return n1 + n2

}

Par chamar a função você faria algo assim:

let n = soma(n1: 1, n2: 3)

print(n)

Note que é obrigatório informar o primeiro argumento “n1”. Caso você opte por simplificar a chamada e não informar o argumento, basta colocar o “_” antes de declarar o primeiro argumento, assim:

func soma(_ n1:Int, n2:Int) -> Int {

   return n1 + n2

}

Neste caso a chamada ficaria (não precisa informar o n1):

let n = soma(1, n2: 3)

print(n)

Bom, teve várias outras mudanças.. mas o que recomendo é que vocês migrem os projetos de Swift 2 para Swift 3 utilizando este wizard do XCode, pois é um excelente exercício e aprendizado.

Para quem tem a 4ed, recomendo antes estudar no XCode 7, pois assim os exemplos com Swift 2 vão todos funcionar. É possível encontrar versões antigas do XCode procurando no Google por “xcode older versions”. Depois que estudar os códigos do livro com Swift 2, recomendo instalar o XCode 8 e utilizar o wizard de migração para o Swift 3.. Será um bom aprendizado sobre a sintaxe.

É isso pessoal, espero que este rápido post tenha ajudado :-).

Temas no Android: O que fazer se a Action Bar estiver nula.

Posted by rlecheta on outubro 07, 2016
Android, Livro Android, Tutorial / 2 Comments

Olá pessoal, recentemente um leitor da 4a edição do livro de Android veio tirar uma dúvida sobre um erro que acontecia com um exemplo do capítulo 4.

No caso a activity estava herdando de android.app.Activity.


public class AlgumaActivity extends Activity {

... código aqui

// dava erro nessa linha

getActionBar().setDisplayHomeAsUpEnabled(true);

}

O erro reportado foi que dava NullPointer ao acessar a action bar.

OK, mas porque isso acontece?

Na maioria das vezes, se a action bar está nula com certeza é a configuração do tema.

Olhando o styles.xml do meu colega, o tema do projeto estava configurado assim:

a

Vejam que está usando o tema AppCompat, que traz a compatibilidade para várias versões do Android. Este tema substitui os temas Holo, Material, etc e atualmente é recomendado pelo Google. Isso é o esperado mesmo e está correto, pois o Android Studio atualmente gera o projeto desta forma.

O problema é que na época que escrevi a 4a edição do livro, os exemplos eram gerados de outra forma pelo Android Studio, inclusive no github da 4ed está assim:

https://github.com/livroandroid/4ed/blob/master/capitulos/cap04-activity/HelloActivity/app/src/main/res/values/styles.xml

b

Veja que o tema que usei na época da 4ed foi o Holo, que é um específico para Android 3 (API Level 11). Enfim, mas isso está explicado no livro e não quero demorar aqui…

O livro 5a ed que está mais atualizado já traz os exemplos todos com o tema de compatibilidade, portanto este problema acontece apenas nos exemplos da 4 ed, pois o Android Studio mudou a forma de gerar o código dos projetos.

Bom, existem 2 formas de resolver este problema:

1) Caso você queira deixar o código das classes de Activity iguais estavam nos exemplos da 4ed, é preciso alterar o tema do projeto para Holo ou Material, conforme o github da 4ed. Isso é feito alterando o arquivo styles.xml conforme o exemplo que mostrei acima do github.

Basicamente, se o seu tema herda de Holo ou Material, você está usando um tema nativo. Então vc deve sempre usar a android.app.Activity como a activity mãe, e neste caso você pode utilizar o método getActionBar() que retorna a action bar nativa android.app.ActionBar.

Era dessa forma que era feito nos primeiros exemplos da 4 ed. Somente no capítulo de Action Bar que começo a explicar o tema AppCompat de compatibilidade.

2) A segunda forma de resolver, e talvez a recomendada é atualizar o código de todas as Activities para herdar de android.support.v7.app.AppCompatActivity, pois é a activity do tema de compatibilidade. Atualmente o Android Studio gera o projeto com o tema AppCompat, como vimos no styles.xml do meu colega logo no início deste post. Isto indica que o projeto usa o tema de compatibilidade.

Esta configuração de tema atualmente é a indicada. Porém como o fonte da 4ed está antigo, faça as seguintes alterações no código:

  • Altere todas as activities do projeto para herdar de AppCompatActivity.
  • Altere a chamada do método getActionBar() por getSupportActionBar(), pois este último vai retornar a action bar de compatibilidade, que é a classe android.support.v7.app.ActionBar.

Como o Android Studio atualmente gera o projeto com o tema de compatibilidade, na 5ed do livro todos os exemplos já estão assim.

É isso pessoal, este breve post foi só para explicar uma pequena diferença entre a 4ed e a 5ed. Como vimos o Android Studio mudou a forma de gerar os códigos do projeto e isso afetou um pouco, e essas coisas de tema e compatibilidade costumam ser complicadas para quem está estudando Android pela primeira vez :-).

Independente de como estão os códigos-fontes da 4ed e 5ed, estes conceitos é bom conhecer.

Qualquer dúvida perguntem, abs.

Tags: