Desenvolva seu primeiro MÓDULO XPOSED

Sem mais delongas, vamos começar ..!

Imagem 2. Vamos começar – codificação

ETAPA – 1: Abra o Android Studio

Se você não tem, você pode baixá-lo aqui: link.

ETAPA – 2: Seleção de atividade

Crie um novo projeto Android Studio. (Veja a imagem abaixo)
Estou mantendo este tutorial simples, não precisamos criar nenhuma atividade, pois estamos apenas mudando a cor do relógio da barra de status.
Selecione Sem Atividade e vá para Próximo.

Imagem: Novo projeto – Seleção de atividade

PASSO – 3: Configuração do projeto

Imagem: Configurar projeto

Especifique o nome e o nome do pacote do seu aplicativo. Mantenha a linguagem Java, se você estiver familiarizado com Kotlin, vá com isso – não haverá muitos códigos rígidos, pois isso é uma espécie de desenvolvimento de aplicativo / módulo ‘hello-world’.
Estou mantendo a API mínima nível para 15.
Em seguida, clique no botão Concluir.

ETAPA – 4: modifique seu build.gradle (app) & Adicione as dependências abaixo:

Em seguida, sincronize o projeto.

ETAPA – 5: Modifique seu arquivo manifest.xml:

Adicione as tags de meta-dados abaixo dentro da tag do aplicativo:

O nome deve ser xposedmodule e o valor true. Deixe o recurso vazio. Em seguida, repita o mesmo para xposedminversion (a versão da API da etapa anterior) e xposeddescription (uma breve descrição do seu módulo).

PASSO – 6: crie uma classe:

package com.myfirstxposedmodule;
public class MyModule {
}

Esta é nossa classe que modificaremos no futuro.

ETAPA – 7: crie e modifique o arquivo xposed_init:

Imagem: Visualização do projeto

Mude a visualização do diretório para a visualização do Projeto. Navegue para app > src > main. Clique com o botão direito em principal e selecione o novo diretório >.
Nomeie-o: assets

Clique com o botão direito no diretório assets criado recentemente, selecione o novo > arquivo.
Nomeie-o: xposed_init (selecione text se solicitar o tipo de arquivo).

Dentro do arquivo xposed_init, adicione o nome completo de nossa classe java. ou seja, em nosso caso, será como:

com.myfirstxposedmodule.MyModule

É assim que o framework Xposed identificará nosso módulo e o carregará na inicialização. Este arquivo dirá ao framework quais classes carregar, o que também veremos nos logs.

ETAPA – 8: Modifique a classe MyModule:

package com.myfirstxposedmodule;
import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.callbacks.XC_LoadPackage;
import de.robv.android.xposed.XposedBridge;
public class MyModule implements IXposedHookLoadPackage {
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
}
}

Implemente IXposedHookLoadPackage e implemente o método handleLoadPackage conforme mostrado acima.

Agora, vamos experimentar colocando uma função de log dentro desse método handleLoadPackage:

XposedBridge.log("Loaded app: " + lpparam.packageName);

Isso imprimirá os módulos carregados. Geralmente, esses logs são registrados dentro deste arquivo: /data/data/de.robv.android.exposed.installer/log/debug.log (que pode ser facilmente acessado pelo instalador Xposed).

ETAPA – 9: execute o código:

Imagem: Erro ao executar ‘app’

Se você tentar diretamente execute-o no Android Studio, você obterá este erro. O que está ok porque não estamos tendo nenhuma atividade no momento.

De qualquer forma, não se preocupe, estou tendo uma solução. Basta editar a configuração de execução e alterar a opção de inicialização de atividade padrão para nada e selecionar OK.

Imagem: Alterar execução Configurações

Agora, tente executar novamente (Windows: Shift + F10).

Em uma execução bem-sucedida em seu dispositivo, você ‘ poderei ver este módulo na lista de módulos do aplicativo Xposed Installer. Conforme mostrado na imagem abaixo, você também pode ver o texto de descrição que inserimos no arquivo de manifesto.

Imagem: Lista de módulos Xposed

Basta ativar esse módulo marcando a caixa e reiniciando o dispositivo.Após reiniciar, abra o aplicativo Xposed Installer e abra os logs (você também pode abrir o arquivo de log que mencionei acima, é o caminho). Você verá linhas como esta:

Agora que você sabe como criar e executar o módulo Xposed, podemos ir mais fundo para olhar o código de barra de status e aplicar algumas de nossas próprias implementações.

PASSO – 10: Explorando o código da barra de status:

Agora, estamos interessados em obter o relógio (texto) da barra de status (que reside em com.android.systemui pacote). Como você sabe, o Android é uma fonte operacional de código aberto, para que você possa ver o interior do código. Você pode baixar o código-fonte do Android neste link. Dependendo da sua versão do Android e da sua rom, pode haver algumas mudanças. Por enquanto, estamos interessados apenas em encontrar o código do nosso relógio. Há uma Clock.java classe dentro de algum lugar no com.android.systemui pacote e esta classe estende TextView o que significa que você pode tratar isso de forma semelhante como um TextView. ESTE é o link para essa aula. Existe um método que atualiza a hora na barra de status cujo nome é updateClock(). Veja o snippet abaixo:

Agora, o que queremos? Queremos executar nosso código sempre que esse método for executado. O que faremos na próxima etapa, também conhecida como enganchar um método.

ETAPA – 11: Enganchar o método:

O XposedHelper é uma classe que fornece alguns métodos auxiliares. Um método auxiliar de que precisaremos é findAndHookMethod, que recebe o nome completo da classe em String, carregador de classe (podemos obtê-lo em XC_LoadPackage.LoadPackageParam de handleLoadPackage), o nome do método que queremos rastrear (updateClock em nosso caso) em String e XC_MethodHook callback (que é simplesmente um callback). Abaixo estará nosso código

No código acima, você pode ver que existem dois métodos que implementei na classe anônima XC_MethodHook que são beforeHookedMethod e afterHookedMethod. Como o nome sugere, primeiro um será executado antes do método hooked e o último será executado após o método hooked (updateClock em nosso caso). Os parâmetros para argumentos e tipos de retorno são tratados pelo argumento MethodHookParam. Mas, a partir de agora, queremos apenas mudar a cor do relógio da barra de status, simplesmente precisamos de afterHookedMethod.

Precisamos de acesso a esse TextView objeto, que podemos obter da param.thisObject – será o mesmo que this palavra-chave em Clock.java classe. Em seguida, podemos lançá-lo para TextView e então podemos simplesmente alterar a cor desse objeto TextView e também modificar o texto como eu fiz :

ETAPA – 12: Execute o módulo:

Execute o código e reinicie o dispositivo novamente. Você poderá ver seu relógio em vermelho e o texto emoji que anexamos.

Imagem: Cor alterada de o relógio na barra de status

É isso aí !! Eu sei que reiniciar é uma droga! mas ei, você criou seu próprio módulo Xposed, não é ótimo ?? !!

Leave a Reply

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *