Os links de download para a rom XXUFNF4 estão neste post. Com um pouco de leitura, facilmente os encontrarão.
Os links de download para a rom XXUGNG1 estão aqui
Este tópico tem a seguinte estrutura:
Advertências
Introdução
Secção 1
1.1 Material necessário
1.1.1 Notepad
1.1.2 Root
1.1.3 Explorador Root
1.1.4 Custom Recovery
Mod's da secção 1 (Com links de download)
Mod 1 Fix do GPS
Mod 2 Escrita no sdcard externo
Mod 3 Aumento de Volume
Mod 4 retirar publicidade
Secção 2
2.1 Material Necessário
2.1.1 Todo o material da Secção 1, mais:
2.1.2 Apktool 2.0 ou posterior
2.1.3 Smali / Backsmali
2.1.4 WinRar ou equivalente
2.1.5 Aplicação para modificar em formato deodexed
2.1.6 framework-res.apk
2.1.7 twframework-res.apk
2.2 Método
2.3 Utilização de apktool em Windows
2.4 Utilização de smali/backsmali em Windows
Mod's da secção 2 ((Com links de download))
Mod 5 Aplicação de Mensagens
Mod 6 Launcher TW
Mod 7 Camâra Fotográfica
Secção 3
3.1 Material necessário:
3.1.1 Todo o material das Secções 1 e 2 mais:
3.1.2 Dexopt-wrapper
3.1.3 ADB
3.1.4 Busybox
3.1.5 BOOTCLASSPATH
3.1.6 Zip para flashar aplicações pela recovery
3.1.7 WinMerge
3.2 Como Fazer o RE-ODEX de uma aplicação que NÃO FAZ PARTE da Framework
3.3 Como Fazer o RE-ODEX de uma aplicação que FAZ PARTE da Framework
3.4 Dicas para craques
Mod's da secção 3 (Com links de download))
Mod 8 Ink Effect
Mod 9 SystemUI
Advertências
A todos os que praticarem alguma das explicações abaixo, tenho a informar previamente, que estão a alterar o firmware do vosso telefone, e poderão ter problemas posteriores com a lei da garantia, caso não consigam remover todas as alterações.
Para os que têm uma recovery custom, peço por favor, que façam um backup nandroid, antes de implementarem qualquer um destes mod's.
Não sou de modo nenhum, responsável por algum dano ou algum mau funcionamento no vosso telefone, posterior a estas alterações. A implementação destes mod's é absolutamente voluntaria.
Tudo o que está explicado abaixo, está devidamente testado e a funcionar corretamente no meu telefone.
Este tópico é dirigido a todos aqueles que querem aprender os princípios básicos do hacking em Android. É um tópico para quem quer aprender. Contudo, é um tópico de hacking. Não é um tópico de capas de telefone. Pressupõe que quem participar neste tópico, tem root no telefone. Se não tem acesso root no seu telefone, este tópico decididamente não é para si. Não perca o seu tempo com a leitura e não nos faça perder o nosso, com as suas perguntas.
Introdução
A ideia deste tópico é falar sobre pequenas/grandes modificações, que inequivocamente acrescentam algo a este tipo de terminais.
Na medida do possível, dependendo da complexidade dos mod's abaixo tentarei dar algumas dicas sobre o modo de os adaptar a outras rom's ou a futuras atualizações.
O primeiro aspeto a considerar, muitas vezes esquecido, é que um mod é feito para uma rom em particular e não deve ser usado em atualizações posteriores, mesmo que funcione. Sempre que a Samsung, muda uma aplicação, o mod deverá ser atualizado.
A unica excepção, é quando existe uma atualização de firmware, mas uma dada aplicação não é atualizada, o que acontece algumas vezes, mas não acontece sempre.
Já vi muitos mod's em custom rom's, continuarem iguais, mesmo depois das aplicações de base serem atualizados.
Para os mais inexperientes, é importante dizer, que basicamente existem dois tipos de firmware. As rom's Odexed e Deodexed.
As rom's stock, são todas Odexed. As rom's custom, são quase todas Deodexed. Ao primeiro olhar, a diferença entre elas, é que as rom's Odexed tem o código Java separado da aplicação em si. As aplicações têm terminação .apk e o código Java, tem terminação ".odex" . Cada aplicação Odexed é composta assim por dois ficheiros.
Nas rom's Deodexed as aplicações têm o código Java no seu interior (é o ficheiro classe.dex)
Nas rom's Deodexed, cada aplicação é constituída por um único ficheiro
Outro aspecto, é que as rom's são por definição Odexed e é assim que deveriam ser. O formato deodexed é ótimo para manipular, mas não deveria ser usado no dia-a-dia. Os "clientes" da custom rom, são as vitimas deste processo, uma vez que praticamente a totalidade das custom rom's são deodexed.
Nas rom's Deodexed, apenas se podem usar mod's deodexed.
Nas rom's Odexed, DEVEM usar-se apenas mod's Odexed. Mas nalguns casos, podem usar-se mod's deodexed.
Para os puristas, esta obsessão pelas rom's odexed cria um obstaculo:
Um mod Odexed, apenas funciona na rom para o qual foi feito.
Um mod deodexed, pode ou não, funcionar noutra rom diferente, mas não existe nenhuma incompatibilidade intrínseca. Depende apenas das diferenças que existam nas aplicações da rom original.
Tal como está dito acima, numa rom odexed, podem ser usados mod's deodexed, embora não seja esse o espirito de ter uma rom Odexed.
Para o efeito, apaga-se (na realidade deve fazer-se um backup) a componente odexed da aplicação em causa, o ficheiro .odex e substitui-se a apk pela modificada em formato deodexed.
Contudo, isto apenas é possível, para mod's que estejam na pasta /system/app ou /system/priv-app
Numa rom Odexed, se queremos usar um mod que contenha ficheiros da framework modificados, este mod tem que ser Odexed e feito especificamente para essa Rom.
Por outro lado, felizmente, existem "mod's universais" que podem ser usados indistintamente em rom's odexed ou deodexed, sem qualquer inconveniente em ambos os casos. São os pequenos mod's, que não implicam modificações em apk's mas apenas em ficheiros de texto, como os gps.conf media_profiles.xml etc.
Vamos então aos mod's em si:
Secção 1
Depois de copiado um mod para o telefone, este só estará ativo, após um reboot.
1.1 Material necessario
1.1.1 Notepad
1.1.2 Root
1.1.3 Explorador Root
1.1.4 Custom Recovery
Esta é a secção dos mod's básicos. Não é necessário nenhum conhecimento em particular.
Os mod's desta secção funcionam todos, sem adaptação numa rom XXUFNF4 Odexed ou Deodexed. É indiferente. Provavelmente funcionarão nas rom's posteriores à data da escrita deste post. Em caso de duvida, todos os mod's têm um DIY que permite a adaptação para qualquer rom Note 3 9005. Alguns funcionarão noutros modelos Samsung, mas não posso ser mais especifico.
1.1 Material necessário:
1.1.1- editor de texto a sério, Notepad++ ou equivalente, o notepad do windows não serve. Para quem usa Linux, o GEdit é uma boa possibilidade igualmente
1.1.2 - Root. Sem root, não vale sequer a pena, ler o tópico.
1.1.3 - Explorador root. Eu uso este, mas qualquer um serve.
1.1.4 - Custom Recovery. Eu uso esta, mas qualquer custom recovery serve.
1..1.1 O Notepad é o editor que deveremos usar nestas atividades se estamos a usar o Windows. Tem a grande vantagem, ao contrario de outros editores de texto, não deixar caracteres de tabulação ou outros caracteres que não foram explicitamente escritos por nós, no documento editado.
Entre as inúmeras funcionalidades que permite, vamos usar exaustivamente duas, a possibilidade de fazer busca por uma string num texto e a mais importante, de fazer busca em pastas com sub-diretórios.
1.1.2 Embora fora do âmbito deste tutorial explicar como se faz root, quem não tem root ,deverá ler este tópico. Para quem não sabe, root é a ferramenta que nos permite aceder, para leitura ou escrita aos ficheiros de sistema.
1.1.3 Um explorador root, é fundamental para o nosso telefone. Ao contrario do explorador de ficheiros nativo, permite ler, copiar e mover ficheiros para a root do telefone. É Necessário root para poder usar na plenitude.
1.1.4 Custom Recovery. Um telefone com um firmware stock tem uma recovery muito limitada em funcionalidades, mas mais grave ainda, não permite instalar zip's que não sejam assinados pela Samsung. Estas limitações levam-nos a procurar alternativas. As custom recovery permitem no âmbito deste tutorial, flashar as aplicações que modificamos diretamente no sistema operativo, sendo uma alternativa muito interessante ao explorador root. Permitem ainda algumas operações de limpeza entre outras ferramentas disponíveis. A TWRP, assinalada acima, tem aqui o seu endereço para download
MOD's da Secção 1
Mod 1 Fix do GPS
Mod 2 Escrita no sdcard externo
Mod 3 Aumento de Volume
Mod 4 retirar publicidade
1 - Mod que permite um fix do GPS muito mais rápido.
Download:
Basta colocar este ficheiro em system/etc, com as mesmas permissões do ficheiro que está lá atualmente
DIY:
Acrescentar o código abaixo ao final do ficheiro gps.conf que têm na vossa rom, na referida localização. Deverão fazer isto num PC, obviamente.
NTP_SERVER = pt.pool.ntp.org NTP_SERVER = 3.pt.pool.ntp.org NTP_SERVER = 0.europe.pool.ntp.org NTP_SERVER = 2.europe.pool.ntp.org
Não esquecer, ao colocar o ficheiro no telefone, de corrigir as permissões, para as do ficheiro original. Isto é feito com um root explorer
este mod é valido para quem está em Portugal. Para quem usa o meu kernel, pode fazer as alterações de um modo mais fácil na pagina "Network" da Synapse, em "GPS Region"
2 - Mod para corrigir a impossibilidade de escrita no sdcard, por aplicações de terceiros
Download:
Colocar este ficheiro em /system/etc/permissions com as mesmas permissões do ficheiro que está lá atualmente (as mesmas do Mod1)
DIY:
Com o notepad++ editar o ficheiro platform.xml
Antes:
<permission name="android.permission.WRITE_EXTERNAL_STORAGE" > <group gid="sdcard_r" /> <group gid="sdcard_rw" /> </permission>
Depois de editado:
<permission name="android.permission.WRITE_EXTERNAL_STORAGE" > <group gid="sdcard_r" /> <group gid="sdcard_rw" /> <group gid="media_rw" /> </permission>
3 - Mod para aumentar o nível de som.
Neste caso existe uma nuance. O ficheiro a editar permite aumentar/diminuir o nível de som em muitos aspectos. O exemplo abaixo, é apenas para aumentar ligeiramente, e sem qualquer distorção o nível do amplificador analógico. Apenas atua no som que sai pelos auscultadores. O nível do amplificador digital, também pode ser editado aqui, mas eu prefiro fazer essa modificação on flight e a gosto, no meu kernel. É feita na página "Sound" da aplicação synapse, em "Headphone volume".
Download:
Colocar este ficheiro em /system/etc com as mesmas permissões do ficheiro que está lá atualmente.(as mesmas do Mod1).
DIY:
Com o notepad++ editar o ficheiro mixer_paths.xml.
PROCURAR:
<!-- Play Scenario -->
Abaixo fazer a seguinte modificação:
Antes:
<path name="headset"> <path name="ear" /> <ctl name="HPHL Volume" value="20" /> <ctl name="HPHR Volume" value="20" /> <ctl name="RX1 Digital Volume" value="77" /> <ctl name="RX2 Digital Volume" value="77" /> <ctl name="COMP1 Switch" value="1" /> </path>
Depois:
<path name="headset"> <path name="ear" /> <ctl name="HPHL Volume" value="30" /> <ctl name="HPHR Volume" value="30" /> <ctl name="RX1 Digital Volume" value="77" /> <ctl name="RX2 Digital Volume" value="77" /> <ctl name="COMP1 Switch" value="1" /> </path>
4 - Mod para não ter publicidade no telefone
Todos os sistemas operativos têm algures, um ficheiro hosts, que basicamente, é um ficheiro com uma lista de endereços, aos quais não são permitidas ligações.
Os bloqueadores de publicidade, não são mais do que uma lista exaustiva destes endereços, colocados nesse ficheiro.
Download:
Colocar este ficheiro em /system/etc com as mesmas permissões do ficheiro que está lá atualmente. (as mesmas do Mod1).Têm que extrair o ficheiro do zip, antes de colocar no telefone.
Este mod pode ser usado em qualquer telefone de qualquer modelo, Android. Pode ser usado igualmente noutros sistemas operativos, apenas o path, será diferente.
DIY
Uma vez que este mod pode ser usado em todos os modelos não existe nada para adaptar. A unica coisa que posso acrescentar, é que se pode ir adicionando novos sites, usando o seguinte formato
127.0.0.1 angelina-stacey.us
onde "angelina-stacey.us" é o endereço do site a bloquear.
Pode-se ainda usar uma lista atualizada periodicamente. Haverá várias, eu gosto desta:
http://forum.xda-dev...d.php?t=1916098
Secção 2
Depois de copiado um mod para o telefone, este só estará ativo, após um reboot.
2.1 Material Necessário
2.1.1 - Todo o material da Secção 1, mais:
2.1.2 - Apktool 2.0 ou posterior
2.1.3 - Smali / Backsmali
2.1.4 - WinRar ou equivalente
2.1.5 - aplicação para modificar em formato deodexed
2.1.6 - framework-res.apk
2.1.7 - twframework-res.apk
2.2 Método
2.3 Utilização de apktool em Windows
2.4 Utilização de smali/backsmali em Windows
Esta é a secção dos mod's para iniciados. é necessário algum material e algum método.
Nesta secção vamos fazer fazer alterações ao código das aplicações. Para isso temos que descompilar as aplicações em causa.
As aplicações usadas em android são programas Java, que têm dois componentes fundamentais. Os resources e o código Java.
Numa aplicação odexed, são dois ficheiros separados, o primeiro com terminação apk e o segundo odex.
Numa aplicação deodexed, temos apenas um ficheiro, que inclui, a componente odexed, num ficheiro de nome classe.dex. Isto pode ser confirmado se editarem uma aplicação com o Winrar ou com um programa equivalente.
Infelizmente as aplicações odexed não podem ser descompiladas na sua componente Java. Têm que ser transformadas numa primeira fase em deodexed e apenas quando estão neste formato, podem ser descompiladas.
Está fora do âmbito deste tutorial, nesta fase, explicar como se obtém uma aplicação em formato deodexed. Podem sempre fazer o download duma rom deodexed correspondente à vossa e que não tenha sido modificada. No entanto, os mais curiosos, têm aqui o link da kitchen dsixda's, A FERRAMENTA quando se fala em fazer o deodex de uma rom. No entanto existem outras ferramentas.
Os mod's desta secção, no final estarão em formato deodexed. Podem evidentemente ser usados em rom's deodexed. Para usar em rom's odexed, terão que apagar da vossa rom, o ficheiro .odex correspondente e de seguida, copiar o mod em formato deodexed para a vossa rom.
Na Secção 3 iremos ver como fazer o re-odex de uma aplicação. Se fizerem esse passo, terão a vossa rom Odexed com mod's odexed sem nenhuma incompatibilidade.
2.1 Material necessário:
2.1.1 Todo o material da Secção 1, mais:
2.1.2 apktool 2.0 ou posterior
2.1.3 Small / backsmali
2.1.4 winrar ou equivalente
2.1.5 aplicação para modificar em formato deodexed
2.1.6 framework-res.apk
2.1.7 twframework-res.apk
2.1.2 Apktool é a ferramenta usada para descompilar e compilar aplicações android
2.1.3 Smali/backsmali são duas aplicações que são usadas para descompilar e compilar o código java das das aplicações Android
2.1.4 Usamos o WinRar para abrir as aplicações android, pois estas são ficheiros zip, embora sem compressão. Assim, podemos abrir as aplicações para retirar alguns ficheiros do seu conteúdo, e para voltarmos a colocar esse ficheiros depois de manipulados, dentro da aplicação. Podemos usar o winrar para editar as aplicações ( ficheiros apk) e os ficheiros da framework (ficheiros jar)
2.1.5 Quem tem uma rom Odexed não pode simplesmente pegar numa aplicação do telefone e fazer estes mod's. Terá que fazer previamente o deodexed da aplicação, ou fazer download duma custom rom deodexed e que tenha essa aplicação sem modificar
2.1.6 Este ficheiro e o seguinte do ponto 2.1.7 encontram-se no seu telefone em /system/framework
2.2 Método:
A aplicação que permite descompilar e voltar a compilar o código Java, é a aplicação smali/backsmali, que são evidentemente, duas aplicações.
Apktool é uma aplicação que no seu interior, entre outras, ferramentas, inclui as smali/backsmali, mas que frequentemente estão desatualizadas, pois a atualização do apktool é não feita com a mesma frequência com que são lançadas novas versões das smali/backsmali
Por este motivo, Embora o apktool possa ser usado para descompilar a componente resources e a componente Java, eu uso o apktool para descompilar os resources e descompilo o codigo Java com smali/backsmali. Na Secção 3, darei outro bom motivo para esta prática.
2.3 Utilização de apktool em Windows
Download da aplicação do link no ponto 2 e coloquem-na numa determinada pasta.
Fazer um rename ao arquivo para :
apktool.jar
Download deste ficheiro, extraem o zip e colocam o conteúdo na mesma pasta do parágrafo anterior.
Têm o apktool pronto a funcionar
Para descompilar uma aplicação:
Começa-se por instalar a framework. Só é necessário efetuar este passo uma vez. Não é necessário voltar a instalar a framework, até que mudem de rom.
Colocar na pasta onde está apktool, os dois ficheiros da framework assinalados acima nos pontos 6 e 7. Estes ficheiros, estão na vossa rom em /system/framework
Os comandos abaixo estão atualizados para a versão 2 da apktool. São ligeiramente diferentes dos comando usados na versão 1.0
Abrem uma janela de terminal. Path da pasta onde têm o apktool. (Com o comando cd)
Na janela terminal, dão os dois comandos abaixo:
apktool if framework-res.apk -t tag apktool if twframework-res.apk -t tag
E está instalada a framework. Só precisam fazer estes passos de novo, quando descompilarem aplicações de rom's diferentes.
Agora, para descompilar uma aplicação, por exemplo SystemUi.apk, seria:
apktool d SystemUI.apk -o output
Seria criado na pasta onde têm o apktool, uma pasta de nome output onde teriam a vossa aplicação descompilada e pronta a editar.
Depois de editada e alterada, para compilar de novo:
apktool b output -o SystemUI.apk
e teriam a vossa aplicação compilada pronta a usar
2.4 Utilização de smali/backsmali em Windows
Esta aplicação tem uma utilização mais facil que a anterior.
Download das duas aplicações e coloquem-nas numa determinada pasta.
Abrem a aplicação a editar em formato deodexed com o winrar e extraem do seu interior o ficheiro classes.dex.
Colocam este ficheiro na mesma pasta onde têm os ficheiros smali e backsmali.
Abrem um terminal de comandos. Para descompilar:
java -Xmx512m -jar baksmali-2.0.3.jar classes.dex
e é criada uma pasta de nome out, com o conteúdo de todo o código Java da vossa aplicação. Depois de modificado, para compilar:
java -Xmx512m -jar smali-2.0.3.jar out -o classes.dex
Para terminar, com o winrar, colocariam este classes.dex, acima obtido, dentro da vossa aplicação. Irão substituir o anterior classes.dex, por este modificado por vocês. Têm a vossa aplicação com o código Java modificado, pronta a usar numa rom deodexed.
MOD's da Secção 2
Mod 5 Aplicação de Mensagens
Mod 6 Launcher TW
Mod 7 Camâra Fotográfica
Para os DIY dos mods desta secção, necessitam ter as aplicações a modificar em formato deodexed
Os mod's desta secção, têm para download, um ficheiro de diffs. Fazem o download, descomprimem e comparam as pastas com o WinMerge. A pasta "Ori", contém, os ficheiros da aplicação stock. A pasta "Mod"contem os ficheiros da aplicação modificada. Com o Winmerge, podem ver exatamente as diferenças e o que foi modificado em cada mod
5 - Mod da aplicação de mensagens SecMms.apk
Este é um mod que me é muito querido. Deve ter sido das primeiras aplicações que senti necessidade de modificar, por não estar satisfeito com a aplicação stock. Por outro lado, nunca gostei de usar aplicações de terceiros, para temas cobertos pelas aplicações do firmware. A solução foi, modificar a aplicação de base.
Atualmente faço muito menos modificações que aquelas que uso, pela simples razão que uso a framework Xposed e a aplicação do Wanam tem algumas modificações importantes incluídas.
Nesta aplicação as modificações são apenas as seguintes:
a - as sms's com emojis especiais não são convertidas em MMS's
b - Não tem aviso sonoro de relatório de entrega de SMS's. Se o relatório de entrega estiver ativo, recebemos apenas uma curta vibração. Toque longo na mensagem, mostra os detalhes e podemos consultar o relatório.
c - mudei os emojis de base, pois não gosto dos emojis verdes.
Download
Instalação:
Descomprimir e colocar em /system/priv-app. Manter as permissões do ficheiro stock. (as mesmas do Mod1).
Se usar o mod deodexed numa rom Odexed, ver a nota na introdução do post.
DIY
a - abrir com Winrar SecMms.apk e extrair classe.dex. Descompilar com smali/backsmali.
Em /com/android/mms/ui editar ComposeMessageFragment.smali
Localizar a primeira entrada com o seguinte código (existem duas)
invoke-virtual/range {v19 .. v20}, Lcom/android/mms/data/WorkingMessage;->setEmojiRequiresMms(Z)V
substituir por:
invoke-static {}, Lcom/android/mms/MmsConfig;->getEnableEmoji()Z
b - ir a /com/mms/transaction/. Editar MessagingNotification.smali
procurar por:
Landroid/content/ContentResolver;->insert(Landroid/net/Uri;Landroid/content/ContentValues;)Landroid/net/Uri;
apagar todas as linhas que contenham essa entrada. São 5 linhas
procurar ainda as seguintes linhas:
iput-object v10, v6, Landroid/app/Notification;->tickerText:Ljava/lang/CharSequence;
invoke-virtual {v6, p0, v10, v3, v7}, Landroid/app/Notification;->setLatestEventInfo(Landroid/content/Context;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/app/PendingIntent;)V
e apagar estas duas igualmente
Compilamos, com Winrar colocamos o ficheiro classes.dex obtido dentro de SecMms.apk e terminámos.
c - Este é mais simples. Basta substituir algumas imagens. Descompilar secmms.apk com apktool. Ir a /res/
e colocar as imagens que estão dentro deste zip na pasta /res/drawable-sw360dp-xxhdpi. Existem lá os emojis verdes com o mesmo nome. É para substituir.
Compilamos e está terminado
6 - Mod TouchWiz Seclauncher.apk
a - 5 Icones na Dock sem nome da aplicação
b - 6X4 na AppGrid em Landscape Mode
c - 4X4 em Home em Landscape Mode
d - Autorotação definida pelo toggle Rotação do ecrã)
e - Mostra as aplicações congeladas (bug corrigido)
Download
Instalação:
Descomprimir e colocar em /system/priv-app. Manter as permissões do ficheiro stock. (as mesmas do Mod1).
Se usar o mod deodexed numa rom Odexed, ver a nota na introdução do post.
DIY
a - Descompilar SecLauncher4.apk com com apktools.
ir a /res/values-sw360dp-xxhdpi e editar dimens.xml
substituir:
<dimen name="hotseat_cellWidth">72.0dip</dimen>
por:
<dimen name="hotseat_cellWidth">61.0dip</dimen>
ir a /res/values-sw360dp-xxhdpi e editar integers.xml
substitur:
<integer name="hotseat_cellCountX">5</integer>
por:
<integer name="hotseat_cellCountX">6</integer>
finalmente, ir a /res/values-sw360dp-xxhdpi e editar styles.xml
substituir:
<item name="android:drawablePadding">8.0dip</item>
por:
<item name="android:drawablePadding">0.0dip</item>
e substituir
<item name="android:drawablePadding">8.0dip</item>
por:
<item name="android:drawablePadding">0.0dip</item>
b e c - Comecem por verificar se a vossa aplicação SecLauncher tem os ficheiros que estão no ficheiro para download (link abaixo). Caso existam no vosso telefone, não substituam os ficheiros e passem ao ponto seguinte (Ponto d)
Por vezes a aplicação seclauncher tem os ficheiros para landscape, mas esta função não está ativada. É disso que trata o ponto d.
No caso da aplicação que modifiquei, na minha rom, não existiam sequer os ficheiros para landscape mode. São esse os ficheiros que estão no link abaixo, (deste ponto b e c)
Download deste zip e colocar o conteúdo em /res. Compilar e está terminado. Esta modificação só estará contudo completa, quando ativarem a auto-rotação no ponto d, deste mod (o seguinte)
d - abrir SecLauncher4.apk com Winrar e extrair classe.dex. Descompilar com smali/backsmali
ir a /com/android/launcher2 e editar launcher.smali
procurar:
invoke-virtual {p0, v10}, Landroid/app/Activity;->setRequestedOrientation(I)V
substituir na linha imediatamente acima:
const/4 v10, 0x1
por:
const/4 v10, 0x2
e - Descompilar classes.dex com smali/backsmali.
ir a /com/android/launcher2 e editar lMenuAppModel.smali
procurar:
.method isDisableAppListEmpty()Z
de seguida procurar:
.end method
imediatamente acima (2 linhas acima) têm esta instrução:
const/4 v0, 0x0
substituir por:
const/4 v0, 0x0
Compilamos, com Winrar colocamos o ficheiro classes.dex obtido dentro de SecLauncher4.apk e terminamos. A Aplicação SecLauncher4..apk está pronta a usar.
7 - Mod câmara SamsungCamera2.apk
Fotos:
a - Fotos em jpeg sem compressão. As fotos com a aplicação stock têm a qualidade em 96%. Estas são 100%. Os arquivos gerados são ligeiramente maiores
b - Pressão longa no botão de power, tira foto. O Power Menu é ativado igualmente, mas a foto é tirada
Videos:
c - Sem limite de tempo, em modo gravação 4K. Como existe a limitação de 4GB por ficheiro em TODAS as câmaras Android, isto dá um novo limite de 8m47s com o atual BitRate.
d - BitRate ligeiramente aumentado (como consequência, os ficheiro gerados são ligeiramente maiores)
- 65Mbit 4k (not 50Mbit) - (Default 48Mbit)
- 44Mbit 1080/60p - (Default 28Mbit)
- 22Mbit 1080/30p - (Default 17Mbit)
- 192Kbit audio - (Default 128 Kbit)
Download
Instalação:
Descomprimir e colocar em /system/app. Manter as permissões do ficheiro stock.(as mesmas do Mod1).
Se usar o mod deodexed numa rom Odexed, ver a nota na introdução do post.
O ficheiro media_profiles.xml, é para extrair do zip e colocar em /system/etc/, para retirar um limite genérico de gravação em video de 50MBit
DIY
a - abrir SamsungCamera2.apk com Winrar e extrair classe.dex. Descompilar com smali/backsmali
ir a /com/sec/android/app/camera e editar CameraSettings.smali
Procurar:
.method public static getQualityValue(I)I
abaixo, substituir:
const/16 v0, 0x60
por
const/16 v0, 0x64
De notar que em hexadecimal, 96 (decimal) é 60 e 100 (decimal) é 64
b - ir a /com/sec/android/app/camera e editar Camera.smali
procurar por:
:sswitch_data_40a .sparse-switch 0x4 -> :sswitch_d4 0x17 -> :sswitch_152 0x18 -> :sswitch_350 0x19 -> :sswitch_350 0x1a -> :sswitch_d7
substituir por:
:sswitch_data_40a .sparse-switch 0x4 -> :sswitch_d4 0x17 -> :sswitch_152 0x18 -> :sswitch_350 0x19 -> :sswitch_350 0x1a -> :sswitch_152
e substituir:
:sswitch_data_57a .sparse-switch 0x4 -> :sswitch_cd 0x17 -> :sswitch_228 0x18 -> :sswitch_16 0x19 -> :sswitch_16 0x1a -> :sswitch_4c0
por:
:sswitch_data_57a .sparse-switch 0x4 -> :sswitch_cd 0x17 -> :sswitch_228 0x18 -> :sswitch_16 0x19 -> :sswitch_16 0x1a -> :sswitch_228
0x1a é a tecla power, que estamos a redirecionar para a ação "tirar foto"
c - ir a /com/sec/android/app/camera e editar CommonEngine.smali
substituir:
.field private static final MAX_DUAL_FHD_RECORD_TIME:I = 0x12c
por:
.field private static final MAX_DUAL_FHD_RECORD_TIME:I =0x21c
substituir:
.field private static final MAX_UHD_RECORD_TIME:I = 0x12c
por:
.field private static final MAX_UHD_RECORD_TIME:I = 0x21c
de notar que 12c representa em decimal (300) segundos, anterior limite de 5 minutos, aumentado para 9 minutos (540 segundos)
falta apenas definir este limite no mostrador, para que seja corretamente visualizado 9 minutos de limite, quando estamos a gravar um video e não erradamente os 5 minutos da versão stock.
vamos a /com/sec/android/app/camera/glwidget
e editamos TwGLCamcorderRecordingMenu.smali
substituimos:
const/16 v0, 0x12c
por
const/16 v0, 0x21c
substituimos:
const/16 v1, 0x12c
por:
const/16 v1, 0x21c
e finalmente substituímos 2 entradas:
const-string v0, "05:00"
por:
const-string v0, "09:00"
d - ir a /com/sec/android/app/camera e editar MediaRecorderProfile.smali
substituir:
:array_240 .array-data 4 0x2 0x1036640 0xe4e1c0 0xc65d40 0x1e 0x2 0x3 0x1f400
por:
:array_240 .array-data 4 0x2 0x14fb180 0xe4e1c0 0xc65d40 0x1e 0x2 0x3 0x2ee00
1036640 em hexa significa 17000000 em decimal
14fb180 em hexa significa 22000000 em decimal
1f400 em hexa significa 128000 (bitrate do som stock)
2ee00 em hexa significa 192000 (novo bitrate do som)
Deixo as outras conversões hexa-decimal para vocês fazerem, se quiserem saber exatamente o que estão a alterar.
substituir:
:array_318 .array-data 4 0x2 0x2dc6c00 0x2dc6c00 0x2dc6c00 0x1e 0x2 0x3 0x1f400 0x2 0xbb80
por:
:array_318 .array-data 4 0x2 0x3dfd240 0x2dc6c00 0x2dc6c00 0x1e 0x2 0x3 0x2ee00 0x2 0xbb80
substituir:
:array_348 .array-data 4 0x2 0xd59f80 0xe4e1c0 0xc65d40 0x3c 0x2 0x3 0x1f400
por:
:array_348 .array-data 4 0x2 0x14fb180 0xe4e1c0 0xc65d40 0x3c 0x2 0x3 0x2ee00
Compilamos, com Winrar colocamos o ficheiro classes.dex obtido dentro de SamsungCamera2.apk e terminamos. A Aplicação SamsungCamera2..apk está pronta a usar.
E...está...quase pronto:
Para terminar est mod têm apenas que fazer mais uma alteração. Está definido em system/etc/media_profiles.xml um limite máximo de bit rate em video de 50MBit. Para poderem desfrutar da gravação em video, de 65MBit em 4K têm que alterar este limite.
Para isso editamos media_profile.xml e procuramos por:
~minBitRate="64000" maxBitRate="50000000"
substituimos por:
minBitRate="64000" maxBitRate="100000000"
Basta substituir o ficheiro original, por este alterado por nós.
Secção 3
Depois de copiado um mod para o telefone, este só estará ativo, após um reboot.
3.1 Material necessário:
3.1.1 Todo o material das Secções 1 e 2 mais:
3.1.2 Dexopt-wrapper
3.1.3 ADB
3.1.4 Busybox
3.1.5 BOOTCLASSPATH
3.1.6 Zip para flashar aplicações pela recovery
3.1.7 WinMerge
3.2 Como Fazer o RE-ODEX de uma aplicação que NÂO FAZ PARTE da Framework
3.3 Como Fazer o RE-ODEX de uma aplicação que FAZ PARTE da Framework
3.4 Dica para craques
Esta é a secção dos mod's mais avançados. Aqui iremos fazer mod's que implicam a alteração de mais que uma aplicação, e explicar como fazer o re-odex dos mod's para os podermos usar em rom's odexed. Fica ainda uma dica para craques.
3.1 Material necessário:
3.1.1 Todo o material das Secções 1 e 2 mais:
3.1.2 Dexopt-wrapper
3.1.3 ADB
3.1.4 Busybox
3.1.5 BOOTCLASSPATH
3.1.6 Zip para flashar aplicações pela recovery
3.1.7 WinMerge
3.1.2 Dexopt-wrapper é o arquivo necessário para fazer o re-Odex de uma aplicação. Façam o download, descomprimam o zip e coloquem o arquivo no vosso telefone em /system/bin com as mesmas permissões que os arquivos dessa pasta. Só fica a funcionar, após um reboot.
3.1.3 ADB é uma ferramenta que permite usar num terminal de comandos do vosso PC, as mesmas instruções que podem usar num terminal instalado no vosso telefone. Faz parte do Android SDK. A melhor forma de o obter, é instalerem o SDK no vosso PC. Depois de instalado, têm uma pasta de nome "platform-tools". É aí que se encontra o ADB.
Por causa das restrições impostas com a introdução do Selinux, necessitam de um kernel com Selinux Permissive, para poderem ligar o telefone por ADB. O kernel stock é Selinux Enforcing
Se quiserem fazer operações com privilégios root, necessitam de um kernel insecure, ou da instalação de uma aplicação para o efeito. Obviamente que é necessário root instalado no telefone e dar permissões root ao adb quando solicitado pelo superuser (super-su ou equivalente)
Para usar o ADB, abrem um terminal de comandos no vosso PC, path para "platform-tools".
De seguida dão o seguinte comando:
adb shell
Se tiverem um output, igual ao mostrado abaixo, estão a usar o ADB:
Todos os procedimentos mencionados a seguir neste tutorial, assumem que o comando anterior, foi dado com sucesso e que estão neste ponto.
3.1.4 Busybox é um conjunto de ferramentas usadas em Android (Linux). É usada por algumas aplicações, e procedimentos. É uma aplicação fundamental para quem anda nestas lides. Pessoalmente uso esta versão, mas qualquer uma serve. Atenção que não basta instalar essa aplicação no vosso telefone. A aplicação não é a Busybox, mas sim o instalador da Busybox. Há que executar a aplicação, para esta instalar a Busybox.
Se quiserem confirmar que têm a busybox corretamente instalada, em adb executem o comando:
busybox
3.1.5 BOOTCLASSPATH é uma informação fundamental para o re-odex. É especifica para cada equipamento e pode mudar com as mudanças de firmware, embora normalmente só tenha alterações quando se altera a versão de Android. No entanto chamo a atenção, de que a Samsung alterou por duas vezes o BOOTCLASSPATH do Note 3 na versão 4.4.2. Devem sempre confirmar esta informação. Em ADB usem este comando:
echo $BOOTCLASSPATH > /sdcard/tmp.txt
no sdcard do vosso telefone está um arquivo de nome tmp.txt com a informação do BOOTCLASPATH
Apenas por curiosidade e para saberem o aspecto deixo-vos o meu:
/system/framework/core.jar:/system/framework/conscrypt.jar:/system/framework/okhttp.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/framework2.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/mms-common.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar:/system/framework/webviewchromium.jar:/system/framework/sec_edm.jar:/system/framework/seccamera.jar:/system/framework/scrollpause.jar:/system/framework/stayrotation.jar:/system/framework/smartfaceservice.jar:/system/framework/secocsp.jar:/system/framework/commonimsinterface.jar:/system/framework/WfdCommon.jar:/system/framework/oem-services.jar:/system/framework/org.codeaurora.Performance.jar
3.1.6 Zip para flashar aplicações pela recovery
Embora seja possível colocar os mod's na rom com um root explorer, quando são mod's de apenas um ficheiro, quando são varios ficheiros isso pode ser difícil, pois o telefone pode fazer reboot, após um ficheiro vital ser apagado, o que nos pode criar algumas dificuldades.
A forma lógica de ultrapassar a questão acima, é flashar os mod's pela recovery. Para isso necessitamos de uma recovery custom, pois a recovery oficial, apenas permite flashar zip's assinados pela Samsung. e nós não conhecemos essa chave. Pessoalmente uso a Recovery TWRP, embora sirva uma qualquer.
Para flashar mod's através de um zip, podemos usar um zip, genérico, e colocar dentro desse zip, na pasta/pastas respetivas, os ficheiros que queremos flashar. Se esse ficheiro pertence a uma pasta que não no zip abaixo, basta criar uma nova pasta no zip.
Todos os zip's para flashar pela recovery têm um script, que é um ficheiro de texto e que podem editar/ler, com varias informações e ordens para serem executadas no momento do flash. Uma delas é o tipo de file system que têm em system. Atualmente usam-se dois tipos de file system neste telefone, EXT4 ou F2FS, e por esse motivo temos que usar zip's diferentes, com a informação correta para o nosso file system.
Por este motivo, estão para download dois zip's diferentes:
Zip genérico para que tem a partição system em EXT4
Zip genérico para que tem a partição system em F2FS
Agora, para flasharem um zip pela recovery, basta colocar o ficheiro/ficheiros que querem flashar, dentro da respectiva pasta do zip acima, colocar esse zip modificado por voçês, dentro do sdcard interno ou externo do vosso telefone, fazer reboot na recovery, escolher a opção flashar zip, e flashar. No próximo reboot, terão o vosso ficheiro já no locar correto e a funcionar.
NOTA: Os zip's acima funcionam num N9005, noutro telefone, não deverão funcionar sem serem adaptados, pois os mount points não são iguais.
3.1.7 WinMerge é uma ferramenta fundamental para estas atividades. Serve para rapidamente e sem esforço, saberem que diferenças existem entre dois ficheiros e muito mais importante, as diferenças entre ficheiros que estão em duas pastas. Inclusivamente compara ficheiros em sub-pastas. É o equivalente ao Kompare do Linux.
Se têm um mod numa determinada rom e querem saber como foi feito, basta descompilar a aplicação deodexed modificada, descompilar a mesma aplicação deodexed da mesma rom Stock (fazem o download da rom stock e fazem o deodex da mesma para extrair a aplicação em causa), e finalmente comparar com o winmerge as duas pastas. Et voilá.
MUITO IMPORTANTE:
Para funcionar na perfeição, esta técnica, implica que na Kitchen onde fazem o deodex, tenham exatamente a mesma versão de smali/backsmali, que usam para descompilar as aplicações, mencionada na Secção 2. à data da feitura deste post, a ultima versão é a 2.0.3.
É este o motivo, pelo qual na secção 2 eu referi que uso o apktool para descompilar/compilar os resources e smali/backsmali para compilar/descompilar código Java.
Assim, quando há uma nova versão de smali/backsmali, eu posso atualizar a kitchen onde faço o deodex das rom's, e as ferramentas smali/backsmali que uso para compilar/descompilar, usando sempre as mesmas versões, atualizadas. Isto sem perder a possibilidade de comparar ficheiros com o WinMerge
3.2 Como Fazer o RE-ODEX de uma aplicação que NÃO FAZ PARTE da Framework
Começamos pelo mais simples. O Re-ODEX de uma aplicação que não é da framework (ou seja localizada em, /system/app ou /system/app-priv)
Neste caso, começamos por colocar a aplicação deodexed que queremos re-odexar no sd card do telefone.
Liga-se por usb o telefone ao PC
Abrimos o ADB como explicado acima. Dá-se os seguinte dois comandos, um de cada vez:
cd sdcard dexopt-wrapper NOSSO_MOD.apk NOSSO_MOD.odex BOOTCLASSPATH
Exemplo:
Se queremos fazer o RE-ODEX de ext.jar e o vosso BOOTCLASSPATH é igual ao meu, seria:
cd sdcard dexopt-wrapper ext.jar ext.odex /system/framework/core.jar:/system/framework/conscrypt.jar:/system/framework/okhttp.jar:/system/framework/core-junit.jar:/system/framework/bouncycastle.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/framework2.jar:/system/framework/telephony-common.jar:/system/framework/voip-common.jar:/system/framework/mms-common.jar:/system/framework/android.policy.jar:/system/framework/services.jar:/system/framework/apache-xml.jar:/system/framework/webviewchromium.jar:/system/framework/sec_edm.jar:/system/framework/seccamera.jar:/system/framework/scrollpause.jar:/system/framework/stayrotation.jar:/system/framework/smartfaceservice.jar:/system/framework/secocsp.jar:/system/framework/commonimsinterface.jar:/system/framework/WfdCommon.jar:/system/framework/oem-services.jar:/system/framework/org.codeaurora.Performance.jar
(Atenção, que neste exemplo, ext.jar é um ficheiro da framework e não tem a extensão .apk)
Se a operação foi bem sucedida, isto é, se vocês não cometeram erros, no terminal de comandos, terão um output semelhante a este:
--- BEGIN 'ext.jar' (bootstrap=0) --- --- waiting for verify+opt, pid=4617 --- would reduce privs here --- END 'ext.jar' (success) ---
...e neste momento temos no sdcard, para alem da aplicação que estamos a fazer o Re-Odex, a nossa aplicação em formato ODEX
Para terminar, temos apenas um ultimo passo, muito importante, que convém nunca esquecer. Como sabem nesta altura, uma aplicação deodexed, tem no seu interior, o ficheiro classes.dex que é o código Java.
Ao fazer o RE-ODEX o código Java passa a a estar no ficheiro .odex obtido no ultimo passo.
Então, neste momento temos o código Java duplicado e temos que o apagar da nossa aplicação deodexed.
Com o winrar editamos a aplicação deodexed e pura e simplesmente apaga-se o ficheiro classes.dex.
A apk resultante deste passo e o ficheiro .Odex obtido por ADB são os nossos dois ficheiros, que compõem uma aplicação ODEX. Estão prontos a usar na vossa rom.
Como já sabem neste momento, estes ficheiros ODEX, só podem ser usados na rom onde foram obtidos. Usados noutra rom colocam o telefone em bootloop
3.3 Como Fazer o RE-ODEX de uma aplicação que FAZ PARTE da Framework
Faz-se tudo exatamente como descrito no ponto anterior. A unica diferença é que existe um passo adicional. É necessário copiar uma assinatura do ficheiro que está na framework do nosso telefone.
Então, depois de dados os dois comandos acima descritos, em ADB damos um terceiro comando:
busybox dd if=/system/framework/NOSSO_MOD.odex of=NOSSO_MOD.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
Exemplo:
Se queremos copiar a assinatura do ficheiro ext.odex da framework do nosso telefone, para o nosso mod:
busybox dd if=/system/framework/ext.odex of=ext.odex bs=1 count=20 skip=52 seek=52 conv=notrunc
Se a operação foi bem sucedida, terão um output semelhante a este:
count=20 skip=52 seek=52 conv=notrunc rk/ext.odex of=ext.odex bs=1 count=20 skip=52 seek=52 conv=notrunc 20+0 records in 20+0 records out 20 bytes (20B) copied, 0.002092 seconds, 9.3KB/s
Para este passo ser executado, é necessário que o telefone tenha instalada a busybox.
Agora a aplicação pode ser usada na nossa framework. Se copiarem os ficheiros sem efetuar este passo, o telefone entra em bootloop
3.4 Dicas para craques:
As dicas para craques são duas.
DICA1
Não é necessário, fazer as alterações todas, uma-a-uma, quando existe uma nova rom. O que eu faço é após deodex da nova rom, começo por descompilar a aplicação que quero modificar.
Em seguida, com o WinMerge, comparo os ficheiros descompilados, da nova aplicação com os originais, da aplicação da rom anterior (os ficheiros ORI que têm para download em cada DIY.)
Só se alteram os ficheiros que sofreram alterações na nova rom. Os ficheiros que permanecem iguais (normalmente são muito, ou mesmo todos) usam-se os ficheiros anteriores, da pasta (MOD do DIY). Com esta simplificação poupa-se imenso trabalho ao atualizar um mod.
Por vezes, a nova rom num determinado ficheiro tem apenas uma ( ou 2 ou 3) modificações. Pode ser mais simples fazer essa alterações no ficheiro modificado anterior, que fazer todas as alterações no novo ficheiro. Esta é outra simplificação que poupa imenso trabalho.
DICA2
Se lerem com atenção no DIY do mod 9, o ponto d, percebem facilmente que o modelo utilizado ali pode ser extrapolado, para todos os mod's facilitando-nos muito esta atividade:
Com efeito, se replicarmos em ext.jar um determinado path, existente nos ficheiros smali de outra aplicação de sistema, os smalis existentes em ext.jar sobrepõem-se aos smalis originais. Isto permite-nos copiar os smali (atenção pois têm que replicar o path com exatidão) que queremos modificar, para ext.jar concentrando numa unica aplicação, todos os nossos mod's.
Assim, necessitamos fazer as alterações na componente resources, de cada aplicação a modificar, e concentramos os smali a modificar todos em ext.jar, fazendo apenas uma descompilação/ compilação.
Para os mais secretistas, torna muito difícil a terceiros descobrir as alterações efetuadas.
MOD's da Secção 3
Mod 8 Ink Effect
Mod 9 SystemUI
Para os DIY dos mods desta secção, necessitam ter as aplicações a modificar em formato deodexed
Os mod's desta secção, têm para download, um ficheiro de diffs. Fazem o download, descomprimem e comparam as pastas com o WinMerge. A pasta "Ori", contém, os ficheiros da aplicação stock. A pasta "Mod"contem os ficheiros da aplicação modificada. Com o Winmerge, podem ver exatamente as diferenças e o que foi modificado em cada mod.
8 - Mod ink effect com.sec.android.visualeffect.jar
Este mod permite, ter o efeito de tinta no lockscreen, mesmo ao fazer o desbloqueio com o dedo. Na versão stock apenas é possível ter esse efeito ao desbloquear com a spen
Download
Instalação:
Descomprimir e colocar em /system/framework. Manter as permissões do ficheiro stock. (As mesmas do Mod1).
Não é possível usar o mod deodexed em roms Odexed. Ficam em Bootloop
DIY
Abrir com.sec.android.visualeffect.jar com Winrar e extrair classe.dex. Descompilar com smali/backsmali
Ir a /com/sec/android/visualeffect/rippleink e editar RippleInkRenderer.smali
procurar por:
const/16 v9, 0x4002
imediatamente abaixo, substituir:
if-ne v8, v9, :cond_ca
por:
if-ne v9, v9, :cond_ca
Compilamos, com Winrar colocamos o ficheiro classes.dex obtido dentro de com.sec.android.visualeffect.jar e terminamos. A Aplicação com.sec.android.visualeffect.jar está pronta a usar.
9 - Mod SystemUI.apk / ext.jar /SecSettings.apk
Este mod é a joia da coroa, é igualmente o de mais difícil execução, aqueles que estão a fazer os seus próprios mod's, sugiro que deixem este para o fim Tem as seguintes modificações:
a - Cadeado no canto superior esquerdo para desligar o ecrã
b - Barra de lançamento rápido de aplicações, na status bar. Pode ser editada com esta aplicação
d - Toggle para Modo de rede . Permite mudar a rede de 2g > 3g 4G, com um toque curto no toggle, entre uma serie de modos pré-definidos. Para escolher esses modos, premir longamente o toggle.
Ao instalar este mod, não aparecem imediatamente os "Toggles Lanterna, e Modo de Rede", embora estejam disponíveis. Não aparecem porque não estão assinalados para aparecem nas informações do vosso CSC.
É então necessário um ultimo passo:
Instalam um Sqlite Editor. Eu uso este, mas qualquer um serve.
Abrem a aplicação. Na aba APPS, vão a "armazenamento de definições" > Settings.db > System
Fazem uma busca por "notification_panel"
Escolhem a entrada "notification_panel_active_app_list_for_reset" no meu, tem a id 251. Editam
o texto que lá encontram, adicionando o seguinte:
Flashlight;GrxToggleModoRed;
Gravam, e Reboot ao telefone. Poderão ter que fazer uma reposição de toggles no painel de notificações
Se acham difícil entender por palavras, têm aqui um vídeo onde está tudo muito bem explicado
Download
Instalação:
Descomprimir e colocar em /system/ Manter as permissões dos ficheiro stock correspondentes. (As mesmas do Mod1).
Não é possível usar o mod deodexed em roms Odexed. Ficam em Bootloop
DIY
a - Descompilar SystemUi.apk com apktools. Ir a /res/layout/ e editar statusbar.xml
imediatamente abaixo de:
<com.android.systemui.statusbar.policy.Clock android:textAppearance="@style/TextAppearance.StatusBar.Clock" android:ellipsize="none" android:gravity="start|center" android:id="@id/clock" android:layout_width="wrap_content" android:layout_height="fill_parent" android:singleLine="true" android:includeFontPadding="false" android:paddingStart="6.0dip" systemui:ampmSmall="false" />
inserir esta linha:
<com.android.systemui.statusbar.policy.KeyButtonView android:id="@id/back" android:paddingLeft="0.0dip" android:paddingRight="0.0dip" android:layout_width="wrap_content" android:layout_height="fill_parent" android:src="@drawable/sysbar_lock" android:contentDescription="@string/accessibility_back" systemui:keyCode="26" systemui:glowBackground="@drawable/ic_sysbar_highlight" />
de seguida, descomprimir este ficheiro e colocar em res/drawable-xxhdpi
Compilar e está pronto a usar.
b - Descompilar SystemUi.apk com apktools. Ir a /res/layout/ e editar statusbar_expanded.xml
Imediatamente abaixo desta linha:
<LinearLayout android:orientation="vertical" android:id="@id/scrollCart" android:layout_width="fill_parent" android:layout_height="wrap_content">
colocar estas 3 linhas:
<HorizontalScrollView android:scrollbars="none" android:layout_width="fill_parent" android:layout_height="wrap_content"> <com.android.systemui.statusbar.policy.quicklaunch.QuickLaunchContainer android:gravity="center" android:layout_width="wrap_content" android:layout_height="fill_parent" /> </HorizontalScrollView>
Compilar e esta parte está pronta a usar.
Em seguida, abrir SystemUi.apk com Winrar e extrair classe.dex. Descompilar com smali/backsmali
Colocar o conteudo deste ficheiro em /com/android/systemui/statusbar/policy/quicklaunch
Compilamos, com Winrar colocamos o ficheiro classes.dex obtido dentro de SystemUi.apk e terminamos. A Aplicação SystemUi.apk está pronta a usar.
c - esta modificação implica alterações em 2 ficheiros, SystemUi.apk e SecSettings.apk
Começemos por SystemUi.apk:
Descompilar SystemUi.apk com apktools. Ir a /res/values/ e editar strings.xml
fazer uma busca por:
<string name="quickpanel_flashlight_text">Flashlight</string>
se não existir, adicionar esta linha ao final do documento, imediatamente antes da ultima linha. Ficará assim:
<string name="vol_panel_audio_settings">change your audio settings</string> <string name="quickpanel_flashlight_text">Flashlight</string> </resources>
descomprimimos este ficheiro e colocamos as duas imagens em res/drawable-xxhdpi
Agora, compilamos e esta parte está pronta a usar.
Em seguida, abrir SystemUi.apk com Winrar e extrair classe.dex. Descompilar com smali/backsmali
Colocamos este ficheiro em /com/android/systemui/statusbar/policy/quicklaunch
Compilamos, com Winrar colocamos o ficheiro classes.dex obtido dentro de SystemUi.apk e terminamos. A Aplicação SystemUi.apk está pronta a usar.
Agora vamos a SecSettings.apk
Descompilar SecSettings.apk com apktools. Ir a /res/values/ e editar strings.xml
No final, imediatamente antes de <resources> adicionam uma linha de código. Fica com este aspecto:
<string name="notification_panel_flashlight">Flashlight</string> </resources>
Fazem download deste ficheiro, descomprimem e colocam a imagem em res/drawable-xxhdpi
Compilar e esta parte está pronta a usar.
Em seguida, abrir SecSettings.apk com Winrar e extrair classe.dex. Descompilar com smali/backsmali
Ir a /com/android/settings e editar NotificationPanelMenu.smali
Procurar:
.method private makeConvertPanelName()V
No final desta secção, acima de:
return-void .end method
adicionar esta linhas:
iget-object v0, p0, Lcom/android/settings/NotificationPanelMenu;->mConvertPanelItemstring:Ljava/util/HashMap; const-string v1, "Flashlight" const-string v2, "notification_panel_flashlight" invoke-virtual {v0, v1, v2}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; iget-object v0, p0, Lcom/android/settings/NotificationPanelMenu;->mConvertPanelItemstring:Ljava/util/HashMap; const-string v1, "notification_panel_flashlight" const-string v2, "Flashlight" invoke-virtual {v0, v1, v2}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
Compilamos, com Winrar colocamos o ficheiro classes.dex obtido dentro de SecSettings.apk e terminamos. A Aplicação SecSettings.apk está pronta a usar.
d - E estamos a chegar ao final da odisseia. Para o final o melhor e mais complexo de todos. Este mod implica alterações em 3 ficheiros:
SystemUi.apk e SecSettings.apk são já esperados.A terceira aplicação a modificar, deveria ser SecPhone.apk, pois é aí que está o código que permite a mudança do modo de rede. No entanto, para alterar esta aplicação seria necessário alterar o androidmanifest.xml.
Esta alteração é dramática. Ao alterarmos uma aplicação de sistema, se não fizermos alterações em androidmanifest.xml, não necessitamos assinar a aplicação depois de compilada, mantemos a assinatura original, mesmo sem sabermos qual é.
Se alterarmos androidmanifest.xml, necessitamos assinar a aplicação com uma chave pessoal, mas a partir desse momento, o telefone está em bootloop, pos não pode existir mais que uma assinatura nas aplicações de sistema. A solução seria assinar toda as aplicações de sistema com a mesma key. Pouco pratico e não poderíamos passar o mod a ninguém.
Outra possibilidade seria desativar a comprovação de assinatura. Isto faz-se alterando services.jar. Esta medida provoca uma quebra de segurança e uma vez mais, quem quisesse usar este mod teria que usar uma rom sem comprovação de assinaturas. Diga-se de passagem, que muitas custom rom têm esta quebra de segurança.
A solução para o nosso mod, sem ter nenhum destes inconvenientes é não tocar em SecPhone.apk e fazer a alteração em ext.jar, usando uma facilidade que nos permite este ficheiro, que se sobrepõe a outras aplicações de sistema, caso sejam encontrados smalis com o mesmo path. É isso que vamos fazer aqui. Copiamos os ficheiros necessarios para a modo de rede, e colocamos em ext.jar mantendo o path original.
Depois desta introdução, vamos ao mod:
Começemos por SystemUi.apk:
Descompilar SystemUi.apk com apktools. Ir a /res/values/ e editar strings.xml
adicionar esta linha ao final do documento, imediatamente antes da ultima linha. Ficará assim:
<string name="gs_etiqueta_toggle_modored">Modo Red</string> </resources>
descomprimimos este ficheiro e colocamos as duas imagens em res/drawable-xxhdpi
Agora, compilamos e esta parte está pronta a usar.
Contudos temos um passo extra. Embora o ficheiro compilado acima esteja pronto a usar, necessitamos de o descompilar para sabermos as id's geradas durante a compilação das imagens que adicionamos.
Para isso descompilamos e editamos public.xml, localizado em /res/values e buscamos os valores assinalados em baixo:
<public type="drawable" name="grx_toggle_modored_2g" id="0xAAAAAAAA" /> <public type="drawable" name="grx_toggle_modored_3g" id="0xBBBBBBBB" /> <public type="drawable" name="grx_toggle_modored_auto" id="0xCCCCCCCC" /> <public type="drawable" name="grx_toggle_modored_auto4g" id="0xDDDDDDDD" /> <public type="drawable" name="grx_toggle_modored_dim" id="0xEEEEEEEE" /> <public type="string" name="gs_etiqueta_toggle_modored" id="0xFFFFFFFF" />
os valores que necessitamos, é aqueles, que no vosso caso, estão no lugar de AAAAAAAA, BBBBBBBBB, CCCDDDDDD, DDDDDDDD, EEEEEEEE e FFFFFFFF (atenção que estes id's podem ter uma duas ou três entradas)
Em seguida, abrir SystemUi.apk com Winrar e extrair classe.dex. Descompilar com smali/backsmali
descomprimir este ficheiro e colocamos na root do smali descompilado (em /com) e editar GrxToggleModoRedQuickSettingButton.smali:
substituir os AAAAAAAA, BBBBBBBB, CCCCDDDD, DDDDDDDD, EEEEEEEE e FFFFFFFF pelos id's do vosso public.xml
Em seguida, vamos a /smali/com/android/systemui/statusbar/policy(quicksetting e editamos QuickSettingButton.smali:
Abaixo de:
.field mDisplayMetrics:Landroid/util/DisplayMetrics;
colocamos:
.field private mGrxUsarValor:Z
procuramos:
invoke-direct {p0, p1, p2, v1}, Landroid/widget/LinearLayout;-><init>(Landroid/content/Context;Landroid/util/AttributeSet;I)V
e abaixo desta linha colocamos:
iput-boolean v0, p0, Lcom/android/systemui/statusbar/policy/quicksetting/QuickSettingButton;->mGrxUsarValor:Z
para terminar, procuramos:
.method public getActivateStatus()I .... ... ... ... .end method
e abaixo colocamos este código:
.method public grx_pon_icono_on(I)V .registers 4 iput p1, p0, Lcom/android/systemui/statusbar/policy/quicksetting/QuickSettingButton;->mOnIconID:I iget-object v0, p0, Lcom/android/systemui/statusbar/policy/quicksetting/QuickSettingButton;->mBtnImage:Landroid/widget/ImageView; invoke-virtual {v0, p1}, Landroid/widget/ImageView;->setImageResource(I)V return-void .end method .method public grx_pon_texto(Ljava/lang/String;)V .registers 4 iget-object v0, p0, Lcom/android/systemui/statusbar/policy/quicksetting/QuickSettingButton;->mBtnText:Landroid/widget/TextView; move-object v1, p1 check-cast v1, Ljava/lang/CharSequence; invoke-virtual {v0, p1}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;)V iput-object p1, p0, Lcom/android/systemui/statusbar/policy/quicksetting/QuickSettingButton;->mText:Ljava/lang/String; return-void .end method .method public grx_usar_valor_toggle()V .registers 2 const/4 v0, 0x1 iput-boolean v0, p0, Lcom/android/systemui/statusbar/policy/quicksetting/QuickSettingButton;->mGrxUsarValor:Z return-void .end method
Compilamos, com Winrar colocamos o ficheiro classes.dex obtido dentro de SystemUi.apk e terminamos. A Aplicação SystemUi.apk está pronta a usar.
Agora vamos a SecSettings.apk
As modificações neste ficheiro são muito semlhantes às que efectuamos no mod anterior
Descompilar SecSettings.apk com apktools. Ir a /res/values/ e editar stings.xml
No final, imediatamente antes de <resources> adicionam uma linha de código. Fica com este aspecto:
<string name="notification_panel_grx_modo_red">Modo Red</string> </resources>
Fazem download deste ficheiro, descomprimem e colocam a imagem em res/drawable-xxhdpi
Compilar e esta parte está pronta a usar.
Em seguida, abrir SecSettings.apk com Winrar e extrair classe.dex. Descompilar com smali/backsmali
Ir a /com/android/settings e editar NotificationPanelMenu.smali
Procurar:
.method private makeConvertPanelName()V
No final desta secção, acima de:
return-void .end method
adicionar esta linhas:
iget-object v0, p0, Lcom/android/settings/NotificationPanelMenu;->mConvertPanelItemstring:Ljava/util/HashMap; const-string v1, "GrxToggleModoRed" const-string v2, "notification_panel_grx_modo_red" invoke-virtual {v0, v1, v2}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; iget-object v0, p0, Lcom/android/settings/NotificationPanelMenu;->mConvertPanelItemstring:Ljava/util/HashMap; const-string v1, "notification_panel_grx_modo_red" const-string v2, "GrxToggleModoRed" invoke-virtual {v0, v1, v2}, Ljava/util/HashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
Compilamos, com Winrar colocamos o ficheiro classes.dex obtido dentro de SecSettings.apk e terminamos. A Aplicação SecSettings.apk está pronta a usar.
Agora vamos a ext.jar
Para começar abrir ext.jar (é um ficheiro da framework) com Winrar e extrair classe.dex. Descompilar com smali/backsmali
Descompilamos igualmente telephony-common.jar (também está localizado na framework)
- localizamos e copiamos para ext.jar, MATNENDO EXATAMENTE IGUAL O PATH DE telephony_common.jar, os três ficheiros indicados abaixo:
com/android/internal/telephony/gsm/GsmServiceStateTracker.smali
com/android/internal/telephony/gsm/GsmServiceStateTracker$1.jar
com/android/internal/telephony/PhoneBase.smali
Neste 3 ficheiros, fazemos as seguintes alterações:
editamos PhoneBase.smali
procuramos:
.method private getSavedNetworkSelection()Ljava/lang/String; ... ... .. .end method
adicionamos:
.method private guarda_modo_red(I)V .registers 4 .param p1, "networkType" # I .prologue :try_start_0 iget-object v0, p0, Lcom/android/internal/telephony/PhoneBase;->mContext:Landroid/content/Context; invoke-virtual {v0}, Landroid/content/Context;->getContentResolver()Landroid/content/ContentResolver; move-result-object v0 const-string v1, "gk_preferred_network_mode" invoke-static {v0, v1, p1}, Landroid/provider/Settings$Secure;->putInt(Landroid/content/ContentResolver;Ljava/lang/String;I)Z :try_end_b .catchall {:try_start_0 .. :try_end_b} :catchall_b :catchall_b return-void .end method
procuramos por:
invoke-interface {v0, p1, p2}, Lcom/android/internal/telephony/CommandsInterface;->setPreferredNetworkType(ILandroid/os/Message;)V
e abaixo desta linha colocamos:
invoke-direct {p0, p1}, Lcom/android/internal/telephony/PhoneBase;->guarda_modo_red(I)V
Agora editamos GsmServiceStateTracker$1.smali:
procuramos:
invoke-virtual {v4, v5}, Lcom/android/internal/telephony/gsm/GsmServiceStateTracker;->loge(Ljava/lang/String;)V .line 492 :cond_44 :goto_44
abaixo colocamos este código:
iget-object v4, p0, Lcom/android/internal/telephony/gsm/GsmServiceStateTracker$1;->this$0:Lcom/android/internal/telephony/gsm/GsmServiceStateTracker; iget-object v4, v4, Lcom/android/internal/telephony/gsm/GsmServiceStateTracker;->mPhone:Lcom/android/internal/telephony/gsm/GSMPhone; iget-boolean v0, v4, Lcom/android/internal/telephony/PhoneBase;->mIsTheCurrentActivePhone:Z if-eqz v0, :cond_66 invoke-virtual {p2}, Landroid/content/Intent;->getAction()Ljava/lang/String; move-result-object v0 const-string v1, "com.grx.ajustes.CAMBIAR_MODO_RED" invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v1 if-eqz v1, :cond_66 const-string v1, "com.grx.ajustes.MODO_RED" const/16 v0, 0xff invoke-virtual {p2, v1, v0}, Landroid/content/Intent;->getIntExtra(Ljava/lang/String;I)I move-result v1 if-eq v0, v1, :cond_66 :try_start_62 const/4 v2, 0x0 invoke-virtual {v4, v1, v2}, Lcom/android/internal/telephony/PhoneBase;->setPreferredNetworkType(ILandroid/os/Message;)V :try_end_66 .catchall {:try_start_62 .. :try_end_66} :catchall_66 :catchall_66 :cond_66
Para terminar (a sério este é o ultimo)
Editamos GsmServiceStateTracker.smali:
procuramos por:
const-string v3, "android.net.conn.TETHER_STATE_CHANGED" invoke-virtual {v1, v3}, Landroid/content/IntentFilter;->addAction(Ljava/lang/String;)V .line 775 :cond_1c4
imediatamente abaixo, colocamos:
const-string v3, "com.grx.ajustes.CAMBIAR_MODO_RED" invoke-virtual {v1, v3}, Landroid/content/IntentFilter;->addAction(Ljava/lang/String;)V
Compilamos, com Winrar colocamos o ficheiro classes.dex obtido dentro de ext.jar e terminamos. A Aplicação ext.jar está pronta a usar.
E é tudo. Espero que este tutorial estimule a feitura de muitos mod's e caso tenham coisas novas, partilhem aqui, o modo de as fazer.
Um grande obrigado a todos, pelo apoio mostrado nos post's abaixo
Abraços
Editado por sapec, 27 December 2014 - 14:44.