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.

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

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.