Officiellt Xposed Framework för Android Nougat är här

Efter en lång väntan har utvecklaren av Xposed Framework officiellt meddelat att projektet nu stöder Android Nougat. Installera Xposed-moduler nu!

I takt med att Androids ekosystem har mognat under åren, hittar färre och färre användare anledningar till varför de bör rota sin enhet. Det finns en växande trend av användare som väljer att stanna kvar på den fasta programvaran, antingen för att de tycker att upplevelsen är tillfredsställande eller inte vill spela en katt-och-mus-spel med Googles SafetyNet API. Men om du frågade en användare i början av 2016 varför de rootade sina telefoner, kanske det främsta skälet som gavs var att de kunde installera Xposed Framework. Det har varit över ett år sedan Android 7.0 Nougat släpptes först, men den långa väntan är äntligen över: officiella Xposed Framework för Android Nougat är äntligen tillgänglig.

Under det senaste året har XDA Senior Recognized Developer rovo89, den ledande utvecklaren av Xposed Framework, har tillhandahållit flerauppdateringar

om utvecklingen av Xposed Framework för Android Nougat. För vissa är väntan har varit acceptabel mestadels på grund av det stora antalet ytterligare funktioner som Xposed Framework erbjuder i Android Marshmallow. Men många andra har gått vidare till ett liv utan Xposed på sina enheter.

Vi såg en glimt av förnyad spänning i projektet när utvecklare abforce släppte en ART-undermodul för AOSP 7.1.2, men som vår egen GermainZ påpekar det var bättre att vänta på det officiella Xposed Framework release as abforces implementering krävde att ramverket integrerades i anpassade ROM. Dessutom, denna inofficiella implementering var ofullständig, vilket ledde till inkonsekvent eller buggigt beteende med vissa Xposed Moduler.

Även om abforce gjorde ett bra jobb med att få sin inofficiella Xposed att fungera på Android 7.1 Nougat, gick hans implementering emot rovo89s vision för Xposed - att det ska vara en stabil lösning som ger ett pålitligt och lättanvänt kontrakt för användare och utvecklare lika. Vad vi menar med detta är att inte bara moduler ska fungera problemfritt för användarna, utan även hur modulerna är inställda up bör vara konsekvent bland användare så att utvecklare vet om en Xposed-modul är skyldig till en app eller inte krascha.

Vi behöver inte längre oroa oss för sådana problem som rovo89 (efter lite hjälp från XDA Recognized Developer wanam) är nu redo att släppa en officiell uppdatering till Xposed Framework and Installer—som ger kompatibilitet med Android 7.0/7.1 Nougat. Det betyder att du inte behöver installera en anpassad ROM eller behöva bråka med blinkande instabila versioner till njut av Xposed – roota bara din telefon och installera den senaste Xposed Installer-applikationen (länkad nedan) och de Xposed Installer kommer att göra magin med att installera Xposed åt dig.

Xposed Installer som bläddrar i modulförrådet

Detta kan tyckas lite sent i vissa sinnen, särskilt eftersom den här utgåvan kommer över en månad efter att Android 8.0 Oreo släpptes. Tänk på att väldigt få enheter kommer att ha tillgång till en stabil version av Android Oreo under många månader framöver. Android Oreo är bara på 0.2% av alla Android-enheter (jämfört med ~18% på Nougat) enligt den senaste statistiken från Google, men många av våra användare är sådana som älskar att installera anpassade ROM-skivor för att hålla sig i spetsen.

Android-versionsdistribution från och med oktober 2017. Källa: Google

Även om du installerar en inofficiell port för Android 8.0 tillgängliga på en myriad av enheter på våra forum, många av dessa portar är inte dagliga drivrutiner. Så om du inte är villig att betala hundratals dollar för en helt ny Google Pixel 2/2 XL, Sony Xperia XZ1/XZ1 Compact, eller en kommande enhet som t.ex Huawei Mate 10, då kommer du förmodligen att kunna pressa bort flera månaders användning av Xposed Framework på Android Nougat.

Om det låter som du, gå vidare till den officiella forumtråden för Xposed Installer och ramverk för att få igång det på din Android Nougat-enhet.

Ladda ner Xposed Installer v3.1.2 (bilaga)

Xposed Installer för Nougat 7.0 (SDK24) Ladda ner

Xposed Installer för Nougat 7.1 (SDK25) Ladda ner

För de många nyare användare som inte är lika bekanta med vad Xposed Framework kan användas till eller hur det fungerar, vi kommer kortfattat förklara Xposed Framework nedan, varför du borde vara upphetsad och varför utvecklingen av detta tog så lång tid som det gjorde.


Varför installera Xposed Framework?

Vill du få anpassade ROM-funktioner utan att blinka en anpassad ROM? Moder till alla Xposed-moduler för att justera din ROM, känd som GravityBox, har du täckt. Vill du anpassa visningsinställningarna per app? Prova App inställningar. Vad sägs om att anpassa vissa applikationer som Hangouts? Eller modifiera Instagram så att du kan ladda ner vilka inlägg du vill?

Xposed ger utvecklare möjligheten att ändra i stort sett vad de vill— mestadels inriktad på enskilda applikationer men även systemomfattande funktioner kan modifieras. Exemplen vi listade är bara toppen av ett isberg. Antalet ytterligare funktioner du kan lägga till eller appar du kan ändra är otroligt – sök bara igenom officiellt arkiv för Xposed Module att se själv. Tänk på att vissa moduler kan behöva uppdateras för den här nya utgåvan och för Nougat-support, så se till att kontrollera innan du installerar dem på din Nougat ROM!

Hur fungerar Xposed-moduler?

Kontentan av det är att Xposed Framework tillåter moduler att "haka" in i Java-metoderna för alla program– oavsett om det är användarinstallerat eller en systemapplikation. Xposed låter moduler köra sina egna metoder före, under eller i stället för målapplikationens ursprungliga metoder.

Föreställ dig till exempel en metod som används i Gmail-applikationen som lägger upp aviseringar för nya e-postmeddelanden. Som standard skapar metoden ett nytt meddelande med knappar för att arkivera/ta bort eller svara på e-postmeddelandet. En Xposed-modul kan göras för att ansluta till denna metod och lägga till en ny knapp som "markera som läst." (Ja, det finns redan en modul för just det.)

Ovanstående är en alltför förenkling av slutresultatet av vad Xposed Framework tillåter sina moduler att göra. Ramverket i sig är otroligt komplext och gör att det fungerar nästan universellt på rotade enheter – utan att behöva en anpassad ROM – är anledningen till att Xposed för Android Nougat har tagit så lång tid att slutföra.

Varför tar utvecklingen av Xposed så lång tid?

Magin bakom Xposed – det som gör att moduler kan ansluta sig till metoder i andra appar – kräver djup kunskap om hur Zygote och Android Runtime (ART) fungerar. Dessa krav hindrar redan ett stort antal personer från att bidra till projektet, men problemet förvärras av det faktum att rovo89 har varit den huvudsakliga bidragsgivaren till Xposed under de senaste 5 åren.

Det är därför krav på öppen källa för hans modifieringar av Xposed sedan den senaste offentliga utgåvan av Xposed har nekats. Det är hans idé, och han är bäst på att förstå det och modifiera det, så att lägga till mer arbetskraft till projektet i ett så sent skede kan helt enkelt försena projektet ytterligare.

Plus, om rovo89 kontinuerligt uppdaterade sin källa, han var orolig att någon skulle ta den ofärdiga koden för att bygga ett semi-fungerande Xposed Framework utan den universella Xposed Installer som åtföljer den. (Denna exakta sak hände i alla fall med den abforce-implementeringen, och den resulterande röran av olika installationsmetoder motiverade rovo89:s tvekan.)

Det bästa vi kunde göra var alltså att ge rovo89 tid att arbeta med sitt husdjursprojekt. Xposed är inte hans hel- eller ens deltidsjobb. Det är helt enkelt en hobby, en som han har gjort till förmån för samhället i 5 år. Ett så komplext projekt som Xposed kräver tid att arbeta och sedan testa – tid som han inte ofta hade på grund av sina andra skyldigheter. Framsteg var har gjorts under det senaste året, precis som rovo89 dokumenterade i några av sina offentliga uppdateringar om problemet tills äntligen både Xposed Framework och Xposed Installer är redo för release.

Vad gjorde rovo89 för att få Xposed att fungera i Nougat?

Nya versioner av Android medför ibland förändringar i hur ART fungerar, vilket kan kräva att delar av Xposed omarbetas. Android 7.0 Nougat introducerade en Just-in-Time-kompilator för ART för att hjälpa till att förbättra runtime-prestandan för applikationer, till exempel. Men det inofficiella Xposed Framework av abforce inaktiverar helt enkelt många ART-optimeringar så att metodkoppling kan fungera korrekt.

ART-optimeringar i Android Nougat. Källa: Google

Däremot rovo89s implementering behåller alla ART-optimeringar i Android Nougat genom att kompilera om en metods anropare med JIT och fortfarande ha metoden på plats. Det betyder att du kan dra nytta av fördelarna med en Xposed-modul utan att offra prestanda genom att tvångsmässigt inaktivera ART-optimeringar.

För ytterligare information om vad rovo89 gjorde för att äntligen uppnå en pålitlig hooking-metod i Xposed för Android Nougat, rekommenderar vi att du läser nedanstående uttalande som han gav oss.

Fullständigt uttalande från rovo89

Kärnan i Xposed är uppenbarligen dess förmåga att koppla Java-metoder, d.v.s. låta moduler exekvera kod före, efter eller istället för dessa metoder. I stort sett alla andra funktioner är baserade på detta, så det är viktigt att det alltid fungerar som förväntat. Det allmänna konceptet har varit detsamma sedan jag uppfann Xposed för fem år sedan, det kräver att man ändrar ingångspunkten för metoden. Detta börjar misslyckas när ingångspunkten inte kontrolleras under körning - vilket faktiskt är fallet med några av optimeringarna i ART.

Ett exempel är när ingångspunkten redan är känd vid kompilering, då kan uppringare direkt hoppa till denna adress utan att slå upp den. Ett annat exempel är inlining. Tänk på det här exemplet:

ART är smart nog att lägga märke till att metoden twoce() är väldigt enkel och därför bäddar in logiken direkt i doSomething()-metoden, så här:

Du kan fortfarande koppla metoden twoce() men den kommer inte att anropas från doSomething() längre under körning, och så kommer inte din återuppringning. KONST är ännu smartare: Den inser att magi alltid är 42 och därför kan villkoret aldrig uppfyllas. Så hela doSomething()-metoden är faktiskt en no-op:

I tidigare versioner använde Xposed för att inaktivera dessa optimeringar helt och tvingade fram omkompilering av allt. Det kom med flera nackdelar. Först och främst gör ART-utvecklarna ett fantastiskt jobb med att maximera prestandan med sina optimeringar, och att inaktivera dem leder delvis nödvändigtvis till lägre prestanda (jag mätte aldrig hur mycket fastän). Sedan är omkompileringen i sig inte alltid lätt och orsakade mig mycket huvudvärk, särskilt i början. Slutligen tar de omkompilerade filerna plats, förutom de förkompilerade filerna på /system.

De inofficiella versionerna för Nougat inaktiverar också dessa optimeringar, men de tvingar inte fram omkompileringen (eftersom porten ursprungligen gjordes för att integreras i ROM). Därför kanske krokar inte körs ibland.

Med den officiella versionen kommer du att få behålla den optimerade koden och fortfarande ha pålitliga krokar. Hur fungerar det? Nåväl, Xposed registrerar alla samtal som görs. Detta händer medan APK-filer kompileras, eller i ett separat pass för föroptimerad kod. Denna ytterligare data tar inte upp mycket utrymme, men den tillåter Xposed att ta reda på var en viss metod kan ha infogats. Så när en metod kopplas in kommer alla dess uppringare att deoptimeras, det vill säga deras kod kommer inte att användas längre. Detta säkerställer att hook-återuppringningen definitivt kommer att anropas. Och om den som ringer är mycket använd kommer den helt enkelt att kompileras om med JIT, denna gång med vetskapen om att metoden är ansluten och därför är vissa av optimeringarna inte tillämpliga. Detta innebär att effekterna av krokmetoder reduceras till ett minimum. Jippie!

Försök nu. Se till att använda Xposed Installer 3.1.2, eftersom konfigurationssökvägen måste ändras för att stödja filbaserad kryptering.

Läs mer

Slutsats

Vi hoppas att du är lika hajpad som vi när det gäller lanseringen av Xposed för Android 7.X Nougat. Väntan har varit lång, men oundviklig med tanke på Xposeds stora komplexitet. Om du fortfarande är förvirrad över vad Xposed är eller hur det fungerar, oroa dig inte. Väldigt få människor (inklusive oss) förstår faktiskt hur det fungerar. Utvecklare som rovo89 gör sitt bästa på att paketera sitt arbete så att du inte riktigt behöver förstå vad som händer under huven.

Gillar du Xposed Framework? Överväg att donera till rovo89 för det fantastiska arbete han gör. Om du tror att du har vad som krävs för att bidra till projektet, kolla in rovo89s GitHub-sida nedan.

Donera till rovo89

Bidra till Xposed

Letar du efter Xposed-moduler? Kolla in vårt underforum för Xposed Framework Module eller ladda ner XDA Labs-applikationen och bläddra i vår samling av Xposed-moduler.

Xposed Modules Forum

Ladda ner XDA Labs

Android Oreo Progress

Om du undrar, här är hur framstegen är med att skaffa Xposed för Android Oreo:

Jag har redan börjat arbeta med Android 8.0. Det finns några nya språkfunktioner som jag måste titta på, men det allmänna konceptet borde fortfarande fungera. Det inkluderar allt arbete med att ogiltigförklara kompilerad kod för alla som ringer när en metod är ansluten, vilket tog överlägset mest tid när jag arbetade med Nougat. Så jag är verkligen övertygad om att jag kommer att vara mycket snabbare den här gången. Android 8.1borde inte vara mycket annorlunda, så jag förväntar mig inte mycket merarbete för det.