Arquivos do Blog

iGO no android kitkat 4.x e lollipop 5.x com root

Algumas pessoas gostam de utilizar o programa de GPS iGO nos celulares android, para terem uma opção de navegação completamente offline, em termos de mapas e rotas.

A partir do android kitkat o Google mudou a api que permite o acesso ao cartão SDHC do dispositivo por programas de terceiros, causando alguns problemas relativos a perda de acesso a gravação no cartão de memória.

No caso do iGO algumas pessoas estavam instalando o programa inteiro na memória interna do aparelho, mas isso é só para quem tem dispositivos com muita memória, já que dependendo da configuração de mapas a instalação ocupa facilmente 500M, podendo chegar a 1G.

Fiquei curioso e resolvi fazer uns testes. A instalação ocorria normalmente, mas observei que toda vez que o programa fosse acessado era necessário fazer a configuração inicial (linguagem, escolha de vozes, sistema de medidas, configurações regionais).

Com o adb dei uma olhada no diretório da aplicação (no caso um LG H442f firmware 10f, a localização pode mudar entre diferentes fabricantes e versões de firmware):

C:\adt-bundle-windows-x86-20131030\sdk\platform-tools> .\adb shell
shell@c70ds:/ $ su
su
root@c70ds:/ # cd /data/data/com.navngo.igo.javaclient
cd /data/data/com.navngo.igo.javaclient
root@c70ds:/data/data/com.navngo.igo.javaclient # ls -l
ls -l
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 android_linked_root -> /storage/external_SD/iGO/
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 branding.gro -> /storage/external_SD/iGO/branding.gro
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 branding.zip -> /storage/external_SD/iGO/branding.zip
drwxrwx--x u0_a118  u0_a118           2016-04-21 21:47 cache
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 content -> /storage/external_SD/iGO/content
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 data.gro -> /storage/external_SD/iGO/data.gro
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 data.zip -> /storage/external_SD/iGO/data.zip
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 debug -> /storage/external_SD/iGO/debug
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 gfx -> /storage/external_SD/iGO/gfx
-rw------- u0_a118  u0_a118         2 2016-04-21 21:47 kuka_logger.txt
lrwxrwxrwx install  install           2016-04-22 00:31 lib -> /data/app/com.navngo.igo.javaclient-2/lib/arm
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 license -> /storage/external_SD/iGO/license
-rw------- u0_a118  u0_a118        94 2016-04-21 21:47 monkey.txt
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 save -> /storage/external_SD/iGO/save
-rw------- u0_a118  u0_a118       656 2016-04-21 21:47 sentinel.txt
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 sys.txt -> /storage/external_SD/iGO/sys.txt
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 ui_android -> /storage/external_SD/iGO/ui_android
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 ui_igo9 -> /storage/external_SD/iGO/ui_igo9
lrwxrwxrwx u0_a118  u0_a118           2016-04-21 21:47 ux -> /storage/external_SD/iGO/ux

Pode-se observar que a maioria dos arquivos estão com link simbólico, isto é, o arquivo está fisicamente no cartão SDHC (/storage/external_SD) e são referenciados na memória interna, para economizar o armazenamento interno do aparelho.

A informação de link está presente tanto no “l“(ink) das permissões vistas no lado esquerdo (ex.: lrwxrwxrwx) como no símbolo -> do lado direito que aponta onde fisicamente está armazenado o arquivo.

No caso de um aparelho com root fica fácil corrigir o problema, basta trazer o mínimo necessário de arquivos para a memória interna, que são os arquivos que sofrem algum tipo de escrita (preferências, locais favoritos, etc): sys.txt e as pastas android_linked_root e save. Para isso remove-se o link com o comando rm e copia-se o arquivo com o comando cp:

root@c70ds:/data/data/com.navngo.igo.javaclient # rm sys.txt
root@c70ds:/data/data/com.navngo.igo.javaclient # cp /storage/external_SD/iGO/sys.txt .

As pastas android_linked_root e save são removidas com o rm e criadas internamente com o comando mkdir. Basta recriar a pasta save, a pasta android_linked_root é criada de maneira automática pelo programa com todas as permissões e conteúdos necessários quando o iGO é executado pela primeira vez:

root@c70ds:/data/data/com.navngo.igo.javaclient # rm android_linked_root
root@c70ds:/data/data/com.navngo.igo.javaclient # rm save
root@c70ds:/data/data/com.navngo.igo.javaclient # mkdir save

Os arquivos criados e copiados são pertencentes ao usuário que os criou (root), então é necessário corrigir a propriedade para que fique igual ao usuário interno do programa (u0_a118, no exemplo):

...
drwx------ root root 2016-04-22 01:00 save
-rw------- u0_a118 u0_a118 656 2016-04-21 21:47 sentinel.txt
-rwx------ root root 13455 2016-04-22 00:58 sys.txt
...
root@c70ds:/data/data/com.navngo.igo.javaclient # chown -R u0_a118.u0_a118 sys.txt save

Após a correção das permissões temos o seguinte:

drwx------ u0_a118 u0_a118 2016-04-22 01:00 save
-rw------- u0_a118 u0_a118 656 2016-04-21 21:47 sentinel.txt
-rwx------ u0_a118 u0_a118 13455 2016-04-22 00:58 sys.txt

A partir desse momento o iGO passa a funcionar corretamente, não sendo necessário a configuração inicial a cada utilização e a gravação de favoritos e demais personalizações são permanentes.

Howto: make adb recognize your android device

adb (android debug bridge) is the official tool for android development.

Usually it is activated just by connecting your android device, select USB debugging and verify connection using the “adb devices” command, that should return a list with the serial numbers from the connected devices.

That is the theory. On the real world only devices from established manufacturers as HTC, Motorola, Samsung are recognized automatically… if your device is from some obscure or newcomer manufacturer or even some cheap chinese device you get something like this:

adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached

To your device be recognized it must have it’s identifier added at the adb_usb.ini file.

How to identify the manufacturer:

Conect you device to the USB port on your computer (enable USB debugging).

Linux: type the command lsusb and look the device list


$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 003: ID 10ab:0816 USI Co., Ltd
Bus 002 Device 003: ID 04f2:b1da Chicony Electronics Co., Ltd
Bus 002 Device 004: ID d324:9018

The android device is the last in the list. The first four digits group after ID is VendorID, the code that we need

The example device is a Genesis GT-7250 tablet. The lack of manufacturer description when you use lsusb is typical from rush made chinese devices, that are released without proper care. Usually they just use the base design released by the CPUs and chipset manufacturer.

Windows: open Control Panel -> System and Safety -> System -> Device Manager and look for the properties of a device named as Android Phone or Android ADB Interface.

Right click that device and select Properties. Select the Details tab and the select on the combo box Hardware IDs.

The value at front of the text USB\VID_ is the VendorID.

How to update the file:

Linux: on your home directory there should be a hidden directory named .android, the file adb_usb.ini is inside that directory.

Update that file with your device using the command

echo 0xd324 >> adb_usb.ini

Windows: on your personal folder there should be a folder named .android, the file adb_usb.ini is inside that folder.

Open that file using some editor that has no special format, like notepad and add a line with the VendorID

0xd324

Be sure that USB debugging is enabled on your device and check if your device has been identified:

adb kill-server
* server not running *

adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
1234567890ABCDEF device

If that folder is not present, open a command promp window (Windows Explorer does not create folders whose name start with a dot) and type these commands to create the folder and file:

cd /d %USERPROFILE%
md .android
cd .android
echo 0xd324 >> adb_usb.ini

Done! Now you can use adb and do nice things to your android devices like app development or rooting.

This post is a translation from another post in this blog, since I realized that I was getting many hits looking for that information coming from USA and Europe. I hope that translation makes easier to readers that don’t speak portuguese to use that information. Feel free to suggest corrections on grammar or spelling, since english is not my native language.

Solução para dispositivo não reconhecido no android Market ou Google Play Store

Lembre-se que toda alteração de arquivos de sistema pode trazer problemas inesperados a seu dispositivo. Não me responsabilizo por problemas e muito provavelmente não poderei ajudá-lo a resolver problemas em dispositivos que desconheço.

Você foi avisado…

Agora seguimos em frente…

================================================================================================================

Às vezes você procura algum aplicativo para o android no market e quando tenta fazer a instalação recebe uma mensagem de que ele é incompatível.

Às vezes você sabe que o aplicativo existe, sabe o nome mas ele nunca retorna quando você faz a busca com um determinado aparelho e aparece com outros.

Esse tipo de problema ocorre quando o desenvolvedor não tem certeza que o aplicativo é compatível com determinados ou quer restringir o público que pode ter acesso (comum em desenvolvedores de jogos que preferem que os usuários com dispositivos sem recursos gráficos avançados baixem jogos e fiquem desapontados com o baixo desempenho causado por seus aparelhos).

Se seu dispositivo está rooteado você pode contornar esse problema, fazendo com que seu dispositivo se identifique como um Nexus S, que é o aparelho base de desenvolvimento para android, onde todos os aplicativos devem rodar.

O arquivo onde as informações do dispositivo estão é o build.prop.

Você pode editá-lo no seu micro, usando os recursos do adb ou no próprio dispositivo com um editor como o BuildProp Editor, que pode fazer backups do seu build.prop original ou diferentes build.props caso você queira testar o comportamento das buscas com diferentes alterações.

Caso você se sinta corajoso e com sorte, essas são as linhas que você deve alterar no build.prop para que seu dispositivo seja identificado como um Nexus S.

ro.product.model=Nexus S
ro.product.manufacturer=samsung
ro.build.fingerprint=google/soju/crespo:2.3.4/GRJ22/121341:user/release-keys
ro.build.description=soju-user 2.3.4 GRJ22 121341 release-keys


Após fazer as alterações, vá em Configurações -> Aplicativos -> Gerenciar Aplicativos -> Google Play Store e clique em Limpar Cache e Limpar Dados.

Desligue o dispositivo, ligue e entre no Play Store (antigo Market) e faça suas buscas.

Teclado Bluetooth no android

Você tem um teclado Bluetooth sobrando ou então comprou uma capa com teclado Bluetooth pro seu tablet android para ajudar na composição de textos e descobriu que não consegue conectar o teclado ao dispositivo e, quando consegue, o teclado não é reconhecido por nenhuma aplicação.

Por que isso ocorre? Má sorte? Inferno astral? Não. Simplesmente a pilha Bluetooth do android não é completa, implementa as funções para fone de ouvido ou head-set, umas coisinhas para transferência de arquivo e acabou.

Para outras funções você depende de aplicativos que fazem a implementação da pilha Bluetooth internamente.

E o teclado? Você tem duas opções: utiliza um app como o Bluekeyboard JP, que é dependente do layout do teclado usado (se seu teclado não usa um layout suportado nem todas as teclas são reconhecidas corretamente) ou usa a força bruta e instala os utilitário Bluetooth do android (sim, existem. Só não são incluídos nos aparelhos).

Esse método exige que seu aparelho seja rooteado. Cada aparelho tem um método próprio e o usuário deve descobrir qual o método para fazer o root em seu aparelho. Alguns aparelhos não possuem método, geralmente por serem muito novos. Nesses casos é preciso paciência e aguardar.

Se seu aparelho tem root, baixe os utilitário Bluetooth desenvolvidos pelo Google. Você vai precisar do hidd, hcitool e hciconfig .

Conecte seu aparelho via USB ao micro, ative a depuração USB e use o adb:

$ su
# mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
# chmod 777 /system/xbin

Copie os utilitários para o dispositivo:

$ adb push hidd /system/xbin
$ adb push hcitool /system/xbin
$ adb push hciconfig /system/xbin

Ative o bluetooth em seu dispositivo, coloque seu teclado em modo de reconhecimento e mande o dispositivo procurar periféricos.

Selecione o teclado e quando aparecer a janela coloque uma senha qualquer como 0000, 1234 ou 1111. Logo em seguida digite a mesma senha que você escolheu no teclado e aperte a tecla ENTER no teclado.

Siga isso atentamente, pois é mais uma limitação do android. Caso você tenha testado esse teclado no Windows ao ter conectado com o teclado deve ter surgido uma janela com uma sequência de dígitos para serem repetidos no teclado para fazer a sincronização.

O android sempre espera que o dispositivo forneça um PIN. Isso não ocorre com teclados. Então você coloca um PIN qualquer no android e rapidamente repete o mesmo PIN no teclado.

Seu teclado está pareado mas não está conectado.

Agora comece a utilizar os utilitários que você baixou e copiou no seu dispositivo:

Verifique o endereço Bluetooth de seu teclado:

# hcitool scan
Scanning ...
00:1D:4F:A7:9A:49 Bluetooth Keyboard

Conecte ao teclado:

# hidd --connect 00:1D:4F:A7:9A:49

Alguns comando bluetooth úteis:

Verifique o status do adaptador bluetooth do dispositivo:

# hciconfig
hci0: Type: UART
BD Address: 00:22:A5:B8:AD:65 ACL MTU: 1021:4 SCO MTU: 180:4
UP RUNNING PSCAN
RX bytes:8672 acl:98 sco:0 events:285 errors:0
TX bytes:3336 acl:102 sco:0 commands:89 errors:0

# hcitool dev
Devices:
hci0 00:22:A5:B8:AD:65

Conexões bluetooth ativas:

# hcitool con
Connections:
< ACL 00:1D:4F:A7:9A:49 handle 1 state 1 lm MASTER

Esses comandos devem ser digitados pelo adb. Obviamente você também quer fazer isso quando não tem nenhum computador por perto, para isso instale um emulador de terminal em seu dispositivo e digite os comandos diretamente pela linha de comando.

Conseguindo root no tablet android Genesis GT-7250

O Genesis GT-7250 é um tablet android usando a versão 2.3 (Gingerbread). Ao contrário da maioria dos tablets de marcas desconhecidas ou chineses sem marca, este possui acesso 3G sem a utilização de adaptador USB, pois possui slot para SIM card interno.

Pelo processador Qualcomm MSM7227 de modestos 800MHz eu diria que está mais para celular com tela de 7″ do que para tablet.

Como todo dispositivo android vem de fábrica sem acesso root. O root é o que permite maiores possibilidades de utilização de seus recursos internos (alteração de clock, acesso ao sistema de arquivos, acesso ao hardware, instalar arquivos no cartão SDHC externo…)

O root é conseguido geralmente através de utilitários criados por desenvolvedores espalhados pelo mundo (mas que parecem todos frequentar o xda-developers).

Alguns aplicativos são instalados diretamente no celular, como qualquer outra aplicação. O exemplo mais famoso desse tipo é o Z4root, porém a vulnerabilidade que ele explorava foi corrigida e dificilmente irá funcionar em um dispositivo que tenha menos de 2 anos.

Dos aplicativos utilizados no micro e que enviavam comandos ao dispositivo via cabo USB o mais famoso era o SuperOneClick, que está perdendo utilização nos dispositivos mais novos, lançados no mercado a partir de 2012. A vulnerabilidade que ele utilizava foi corrigida no final de 2011 e se o kernel for superior a 2.3.5 ele não consegue o root.

O kernel do GT-7250 é 2.3.6, compilado em março de 2012, o que me impossibilitava o root e a utilização do Link2SD, um utilitário que permite que aplicativos android sejam instalados em uma partição extra no cartão SDHC externo (de maneira melhor e mais eficiente do que a funcionalidade similar existente no Gingerbread, na minha opinião).

Então nossos amigos do xda-developers apareceram com uma solução, o Easy Root -Android 2.3.6 & ICS – CASUAL. Apesar de ser para dispositivos Motorola, funciona com o GT-7250.

Selecione a opção RootICSRAZR, ligue o tablet na USB e aperte o botão Do It! e pronto!

Como toda ferramenta que usa os comandos do adb, o GT-7250 deve ser reconhecido pelo adb. Se ele não aparece na listagem quando você usa o comando adb devices não perca tempo com o Easy Root. Primeiro resolva o problema com o adb.

Fiz uma postagem anterior explicando como resolver.

Fazendo o adb reconhecer seu dispositivo android

This post has been translated to english.

o adb (android debug bridge) é uma ferramenta desenvolvimento para android.

Geralmente para ativar basta conectar seu dispositivo android, ativar a depuração USB (USB debugging) e verificar com o comando “adb devices”, que deve retornar uma lista com o número serial dos dispositivos que estejam conectados.

Essa é a teoria. A prática é que só são reconhecidos de maneira automática dispositivos de fabricantes como HTC, Motorola, Samsung… se seu dispositivo é de algum fabricante obscuro ou um legítimo xing-ling, o resultado é parecido com esse:

adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached

Para que seu dispositivo seja reconhecido é necessário colocar o identificador de seu dispositivo no arquivo adb_usb.ini.

Como identificar o fabricante:

Conecte seu dispositivo na porta USB do seu micro (ative a depuração USB).

Linux: digite o comando lsusb e veja a lista de dispositivos


$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0020 Intel Corp. Integrated Rate Matching Hub
Bus 001 Device 003: ID 10ab:0816 USI Co., Ltd
Bus 002 Device 003: ID 04f2:b1da Chicony Electronics Co., Ltd
Bus 002 Device 004: ID d324:9018

O dispositivo android é o da última linha. O primeiro grupo de quatro dígitos após o ID é o VendorID, o código que precisamos

Esse dispositivo do exemplo é um tablet Genesis GT-7250. O fato de não haver uma descrição do fabricante ao se usar o lsusb é típico de produtos chineses feitos sem maiores cuidados. Praticamente se limitam a usar o projeto base do fabricante da CPU e chipset utilizados.

Windows: abra o Painel de Controle -> Sistema e Segurança -> Sistema -> Gerenciador de Dispositivos e veja as propriedades de um dispositivo identificado como Android Phone ou Android ADB Interface.

Clique com o botão direito sobre esse dispositivo e selecione Propriedades. Selecione a aba Detalhes e na caixa de seleção IDs de Hardware.

O valor a frente do texto USB\VID_ é o VendorID.

Uma maneira mais simpless é utilizar o aplicativo  USBView. Execute e conecte seu dispositivo ao computador. Observe o o valor da linha idVendor, é ele que você vai utilizar. Observe na figura abaixo que destaquei um caso em que aparece um triângulo amarelo na frente do nome de um dispositivo. Isso é um indicador que os drivers para seu dispositivo não foram instalados corretamente. Os drivers de Windows precisam ser instalados corretamente ou você nunca irá obter a conexão com o aparelho. Verifique se há um CD de instalação ou se no site do fabricante os drivers estão a disposição.

Captura de tela 2017-03-05 15.17.44

Como atualizar o arquivo:

Linux: no seu diretório home deve haver um diretório oculto com o nome .android, dentro desse diretório está o arquivo adb_usb.ini.

Atualize o arquivo com seu dispositivo com o comando

echo 0xd324 >> adb_usb.ini

Windows: na sua pasta pessoal deve haver uma pasta com o nome .android, dentro dessa pasta está o arquivo adb_usb.ini.

Abra esse arquivo com um editor sem formatação, como o notepad e adicione uma linha com o valor do VendorID

0xd324

Certifique-se que a depuração USB está ativa no seu dispositivo e confirme a identificação do seu dispositivo:

adb kill-server
* server not running *

adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached
1234567890ABCDEF device

Caso essa pasta não exista, abra uma janela do prompt de comando (o Explorer não cria arquivos ou pastas cujo nome se iniciam com um ponto) e digite os seguintes comandos para criar a pasta e o arquivo:

cd /d %USERPROFILE%
md .android
cd .android
echo 0xd324 >> adb_usb.ini

Pronto! Agora você pode usar o adb e fazer coisas legais no seu android como desenvolvimento de aplicações ou coisas mais legais ainda como root.

Nas versões de android 4.x e superiores quando você digitar algum comando no adb irá aparecer uma janela de alerta na tela do dispositivo. Confirme tocando o OK e, se for um computador onde o dispositivo será sempre utilizado, marque a caixa “Sempre permitir deste computador” para que o alerta não seja acionado nas próximas vezes.

Screenshot_2017-04-23-18-46-27

Nos próximos posts:

– fazendo root no tablet Genesis GT7250 (por que vocês acham que eu descobri isso tudo sobre o adb?)

– conectando um teclado bluetooth no android

Hello world!

Pra estrear meu espaço no wordpress resolvi fazer um blog sobre o Android, a plataforma para dispositivos móveis do Google.

Uso um Motorola Spice XT300, um smartphone bem compacto com teclado slider, que recentemente foi atualizado com o último firmware da Motorola.

Com a última atualização de firmware o Spice XT300 ficou mais estável, alguns usuários dizem ter notado melhora de autonomia da bateria.

Mas nem tudo são flores: a atualização usou um novo desenho nas lockbars (as barras que travam ou tiram o toque de ligações e mensagens).

O problema: as lockbars novas ficaram feias.

Solução: utilizar as antigas lockbars.

Já que estava com tempo, aproveitei e fiz uma versão com lockbars transparentes.

São 3 arquivos diferentes, um para cada versão de lockbar, que devem ser instaladas utilizando o adb. Se você não sabe como utilizar o adb, procure algum tutorial.

Os arquivos devem estar no cartão de memória do XT300 e podem ser baixados aqui: http://www.megaupload.com/?d=6QZC9ZZN

Nos exemplos os arquivos estão na pasta “/sdcard/Android/framework” do cartão de
memória:

=====================================================================

Comandos para instalar a lockbar transparente:

C:\tools\adb shell
$ su
# mount -o remount,rw -t yaffs2 /dev/block/mtdblock1 /system
# cd /sdcard/Android/framework
# cat framework-res-transparente.apk > /system/framework/framework-res.apk
# reboot

=====================================================================

Comandos para instalar a lockbar antiga:

C:\tools\adb shell
$ su
# mount -o remount,rw -t yaffs2 /dev/block/mtdblock1 /system
# cd /sdcard/Android/framework
# cat framework-res-antigo.apk > /system/framework/framework-res.apk
# reboot

=====================================================================

Comandos para instalar a lockbar nova (e feia):

C:\tools\adb shell
$ su
# mount -o remount,rw -t yaffs2 /dev/block/mtdblock1 /system
# cd /sdcard/Android/framework
# cat framework-res-novo.apk > /system/framework/framework-res.apk
# reboot

=====================================================================

Divirtam-se!

Matt's Entropy

... seeding /dev/random, one blog post at a time.

Maravilhoso Mundo Novo

De volta ao Paraíso

androideia

Idéias e Android, necessariamente não nessa ordem.

Another Airgun Blog

Idéias e Android, necessariamente não nessa ordem.

Armas de Pressão - Modificações e afins

Metade da graça em atirar está em fazer ajustes na arma.