Framework Xposed não oficial para Android 7.1 Nougat

Agora está disponível um zip flashável que traz o Xposed Framework para ROMs do Android 7.1 Nougat. O zip funciona no OnePlus 3T e em muitos outros telefones!

Depois de meses e meses de espera, finalmente obtivemos suporte do Xposed Framework para ROMs Nougat (embora não oficialmente). Graças a alguns desenvolvedores talentosos em nossos próprios Fóruns XDA, agora você pode instalar o Xposed Framework em uma ROM do Android Nougat por meio de um zip flashável.

Até agora, o futuro do Xposed no Nougat parecia um pouco instável. Rovo89 – o desenvolvedor por trás do Xposed Framework – forneceu uma atualização sobre suporte para Android Nougat há pouco mais de uma semana. Rovo89 afirmou essencialmente que ainda havia muito trabalho a ser feito para que o Xposed funcionasse corretamente no Nougat, e que teríamos apenas que ser pacientes.

Felizmente, parece que obtivemos uma solução temporária para aqueles de nós que esperávamos ansiosamente por uma medida provisória. A equipe PurifyOS pegou o módulo ART que o desenvolvedor

forçar vinha trabalhando (e que foi postado hoje cedo) e adaptou-o para ser instalado em outras ROMs personalizadas por meio de um zip flashável (em vez de ter que ser implementado ao compilar a ROM).

Existem atualmente três versões disponíveis para diferentes plataformas, incluindo Xposed SDK25 ARM64, Xposed SDK25 BRAÇOe Xposed SDK25 x86. A equipe PurifyOS testou esta nova versão do Xposed com um OnePlus 3T rodando OxygenOS baseado no Android 7.1, mas deve funcionar em outros telefones rodando Android Nougat e os usuários já estão relatando que conseguiram instalá-lo com sucesso em diferentes ROMs e dispositivos. Por exemplo, alguns usuários do OnePlus 5 relataram que ele funciona (não é surpresa, visto que funciona no OnePlus 3T, tudo bem), mas um usuário executando uma ROM baseada em AOSP para o Samsung Galaxy S6 também relatou que funcionou para eles.

Haverá peculiaridades a serem descobertas e nem todos conseguiram fazê-lo funcionar até agora, com alguns usuários enfrentando fechamentos forçados e outras esquisitices. No entanto, mesmo sendo esse o caso, você ainda pode tentar se estiver esperando a chegada do Xposed no Nougat desde o lançamento da versão anterior do sistema operacional Android. Nem todos os módulos existentes do Xposed Framework funcionarão imediatamente, mas alguns módulos realmente populares, como o Amplify, estão funcionando.

Certifique-se de fazer backups regulares e ler o tópico com atenção antes de se aventurar, se não tiver certeza se o seu dispositivo ou ROM é compatível. Por fim, certifique-se de usar a função “pesquisar” antes de deixar uma pergunta duplicada. O Android O pode estar chegando, mas como diz o ditado, "Antes tarde do que nunca." Além disso, muitos usuários não verão o Android O em seus dispositivos por um bom tempo, então o Xposed deve ser um ótimo presente para que você não se sinta deixado para trás.


Atualização: Resposta do Rovo89

O original desenvolvido por trás do Xposed Framework, XDA Senior Recognized Developer rovo89, tem respondido no Github com suas idéias sobre esses desenvolvimentos recentes.

Pela minha experiência, posso dizer que não é tão difícil fazer o básico, mas leva muito tempo para os detalhes. É como a regra 80-20, exceto que é mais como 95-5 ou algo assim.

A abordagem de conexão que projetei para as versões anteriores é bastante estável e também pode ser aplicada a versões mais recentes. Presumo que você tenha precisado a maior parte do tempo para verificar todos os lugares onde IsProxyMethod() e IsDirect() é chamado e decide se eles devem considerar o novo modificador de método ou não (ou seja, usar o parâmetro true ou não). Se você não fez isso, pode ter perdido alguns lugares onde essas chamadas foram introduzidas recentemente. O mesmo para métodos como InstallStubsForMethod(), que precisa operar no método original original mesmo quando são chamados para um método viciado. Você precisaria verificar mais lugares onde isso possa ser relevante. Isso ainda está no intervalo de dias, mas se você deixar de fazer isso, poderá ver travamentos obscuros ou mau comportamento que são muito difíceis de depurar.

Além disso, você adotou uma abordagem em que os ganchos só funcionariam corretamente para ROMs totalmente compiladas do zero. Em ROMs de estoque e até mesmo na maioria das ROMs personalizadas (que não incluíam sua porta durante a construção), bem como para quaisquer aplicativos que o dispositivo possa ter compilado antes. Então você teria que começar tudo de novo com um dispositivo apagado executando uma ROM especial. Caso contrário, as otimizações (por exemplo, inlining) podem impedir que um método seja chamado e, portanto, os ganchos não funcionariam. O pior disso é que o comportamento exato dependeria da ROM, ou mesmo de como o usuário usa o dispositivo (agora que os aplicativos são compilados com base em perfis). Os módulos falhariam aleatoriamente e os desenvolvedores do módulo ficariam se perguntando o que fizeram de errado (resposta: nada). Se nem todos os pré-requisitos forem atendidos, é uma API pouco confiável. Imagine que o Google publicou uma atualização onde o OnClickListener de um botão às vezes não era chamado, a menos que você compilasse sua ROM do zero... Para mim, pessoalmente, esta é uma grande limitação.

Ele continua:

Não faz sentido publicar ZIPs flasháveis ​​com isso, já que a porta serve apenas para recompilar uma ROM do zero.

E como eu temia, não há um único aviso de que esta é uma porta incompleta que muitas vezes não cumprirá o contrato da API. 😠 Isso é ruim para desenvolvedores e usuários, eles deveriam pelo menos saber que está incompleto para que possam decidir se desejam apoiá-lo/usá-lo. Eu nunca ousaria fazer algo assim sem um grande aviso. Na verdade, como sou bastante perfeccionista, não publicaria de forma alguma uma versão incompleta, a confiabilidade é muito importante para mim.

Acabei de verificar meu log do Git e tinha a conexão básica (como nesta porta) pronta em outubro. Desde então, tenho trabalhado para remover as limitações. Para torná-lo mais confiável em ROMs pré-compiladas, eu poderia ter portado a parte de recompilação também, mas isso ainda não é o ideal. Conforme explicado acima, agora temos JIT, o que nos permite manter todas as otimizações, invalidando apenas (e possivelmente recompilando) os métodos que são diretamente afetados pelo hooking. Isso é bastante desafiador, pois é mais do que apenas copiar e colar. E até que isso não seja feito, não publicarei nada. 9 meses para isso (até agora) é muito tempo, eu sei, mas ei, é meu tempo livre e, por exemplo, devido à mudança para Em um apartamento novo, não pude trabalhar no Xposed por vários meses (!) e, caso contrário, tive apenas um tempo muito limitado.

Devemos deixar claro que estes desenvolvimentos recentes não são o verdadeiro “Xposed” que todos vocês conhecem e amor, mas funcionalmente eles permitem que você use alguns módulos do Xposed Framework agora mesmo no Android Nougat. Não culparemos você por não esperar pela versão oficial, mais estável e mais compatível do Xposed Framework para Android Nougat, mas queremos deixar claro que esta iteração é apenas uma medida provisória destinada a saciar as necessidades de alguns usuários, certo agora. Provavelmente não será assim que o Xposed será tratado no futuro.


Baixe o Xposed Framework não oficial para Nougat nos fóruns XDA