Efter lang ventetid har udvikleren af Xposed Framework officielt annonceret, at projektet nu understøtter Android Nougat. Installer Xposed-moduler nu!
Efterhånden som Android-økosystemet er blevet modnet gennem årene, finder færre og færre brugere grunde til, hvorfor de skal roote deres enhed. Der er en stigende tendens til, at brugere vælger at blive på lagerfirmwaren, enten fordi de finder oplevelsen tilfredsstillende eller ikke ønsker at spille en kat-og-mus-spil med Googles SafetyNet API. Men hvis du spurgte en bruger tilbage i begyndelsen af 2016, hvorfor de rootede deres telefoner, var måske den vigtigste grund, der blev givet, så de kunne installer Xposed Framework. Det har været over et år siden Android 7.0 Nougat blev først udgivet, men den lange ventetid er endelig forbi: officielle Xposed Framework til Android Nougat er endelig tilgængelig.
Gennem det seneste år har XDA Senior Recognized Developer rovo89, den ledende udvikler af Xposed Framework, har leveret flereopdateringer
Vi så et glimt af fornyet spænding i projektet, da udvikler abforce udgav en ART-undermodul til AOSP 7.1.2, men som vores helt egen GermainZ påpeger det var bedre at vente på det officielle Xposed Framework release as abforces implementering krævede, at rammen blev integreret i brugerdefinerede ROM'er. Desuden, denne uofficielle implementering var ufuldstændig, hvilket førte til inkonsekvent eller buggy adfærd med visse Xposed Moduler.
Mens abforce gjorde et godt stykke arbejde med at få sin uofficielle Xposed til at fungere på Android 7.1 Nougat, gik hans implementering imod rovo89s vision for Xposed - at det skal være en stabil løsning, der giver en pålidelig og brugervenlig kontrakt for brugere og udviklere ens. Det, vi mener med dette, er, at moduler ikke kun skal fungere problemfrit for brugerne, men også den måde, modulerne er indstillet på up bør være konsekvent blandt brugerne, så udviklere vil vide, om et Xposed-modul er skyld i en app krak.
Vi behøver ikke længere bekymre os om sådanne problemer som rovo89 (efter lidt hjælp fra XDA Recognized Developer wanam) er nu klar til at frigive en officiel opdatering til Xposed Framework and Installer—bringer kompatibilitet med Android 7.0/7.1 Nougat. Det betyder, at du ikke behøver at installere en brugerdefineret ROM eller skal rode med blinkende ustabile versioner til nyd Xposed - bare root din telefon og installer den seneste Xposed Installer-applikation (linket nedenfor) og det Xposed Installer vil gøre magien ved at installere Xposed for dig.
Xposed Installer gennemser modullageret
Dette kan virke lidt sent i nogle sind, især da denne udgivelse kommer over en måned efter Android 8.0 Oreo blev frigivet. Husk, at meget få enheder vil have adgang til en stabil version af Android Oreo i mange måneder fremover. Android Oreo er kun på 0.2% af alle Android-enheder (sammenlignet med ~18% på Nougat) ifølge de seneste statistikker fra Google, men mange af vores brugere er den slags, der elsker at installere tilpassede ROM'er for at forblive på den bløde kant.
Selvom du installerer en uofficiel port af Android 8.0 tilgængelige på et utal af enheder på vores fora, mange af disse porte er ikke daglig driverstatus. Så medmindre du er villig til at betale hundredvis af dollars for en helt ny Google Pixel 2/2 XL, Sony Xperia XZ1/XZ1 Compact, eller en kommende enhed som f.eks Huawei Mate 10, så vil du sandsynligvis kunne presse flere måneders brug ud af Xposed Framework på Android Nougat.
Hvis det lyder som dig, så gå videre til den officielle forumtråd for Xposed Installer og ramme-zips for at få det op at køre på din Android Nougat-enhed.
Download Xposed Installer v3.1.2 (vedhæftet fil)
Xposed Installer til Nougat 7.0 (SDK24) Download
Xposed Installer til Nougat 7.1 (SDK25) Download
For de mange nyere brugere, der ikke er så bekendt med, hvad Xposed Framework kan bruges til, eller hvordan det fungerer, vil kort forklare Xposed Framework nedenfor, hvorfor du skulle være begejstret, og hvorfor udviklingen på dette tog så lang tid som det gjorde.
Hvorfor installere Xposed Framework?
Vil du have brugerdefinerede ROM-funktioner uden at blinke en brugerdefineret ROM? Moderen til alle Xposed-moduler til tweaking af din ROM, kendt som GravityBox, har du dækket. Ønsker du at tilpasse visningsindstillingerne pr. app? Prøve App-indstillinger. Hvad med at tilpasse bestemte applikationer som Hangouts? Eller ændre Instagram, så du kan download hvilke indlæg du kan lide?
Xposed giver udviklere mulighed for at ændre stort set hvad de vil— for det meste rettet mod individuelle applikationer, men selv systemdækkende funktioner kan ændres. De eksempler, vi har nævnt, er kun toppen af isbjerget. Antallet af yderligere funktioner, du kan tilføje, eller apps, du kan ændre, er utroligt - bare søg gennem officielt Xposed Module-lager at se selv. Husk, at nogle moduler muligvis skal opdateres til denne nye udgivelse og for Nougat-support, så sørg for at tjekke dem, før du installerer dem på din Nougat ROM!
Hvordan fungerer Xposed-moduler?
Kernen i det er, at Xposed Framework tillader moduler at "hook" ind i Java-metoderne for enhver applikation– hvad enten det er brugerinstalleret eller en systemapplikation. Xposed lader moduler udføre deres egne metoder før, under eller i stedet for målapplikationens oprindelige metoder.
Forestil dig f.eks. en metode, der bruges i Gmail-applikationen, der sender meddelelser om nye e-mails. Som standard opretter metoden en ny notifikation med knapper til at arkivere/slette eller besvare e-mailen. Et Xposed-modul kunne laves til at tilslutte sig denne metode og tilføje en ny knap, såsom "markér som læst." (Ja, det er der allerede et modul til netop det.)
Ovenstående er en oversimplificering af slutresultatet af, hvad Xposed Framework tillader sine moduler at gøre. Selve rammen er utrolig kompleks, og at få den til at fungere næsten universelt på rodfæstede enheder - uden at skulle bruge en brugerdefineret ROM - er grunden til, at Xposed til Android Nougat har taget så lang tid at færdiggøre.
Hvorfor tager Xposed-udvikling så lang tid?
Magien bag Xposed - hvad der gør det muligt for moduler at tilslutte sig metoder i andre apps - kræver dyb viden om, hvordan Zygote og Android Runtime (ART) virker. Disse krav udelukker allerede et stort antal mennesker fra at bidrage til projektet, men problemet forværres af, at rovo89 har været den vigtigste bidragyder til Xposed i de sidste 5 år.
Det er grunden til, at opfordringer til open sourcing af hans modifikationer lavet til Xposed siden den sidste offentlige udgivelse af Xposed er blevet afvist. Det er hans ide, og han er den bedste til at forstå det og ændre det, så tilføje mere arbejdskraft til projektet på så sent et tidspunkt blot kunne forsinke projektet yderligere.
Plus, hvis rovo89 løbende opdaterede sin kilde, han var bekymret at nogen ville tage den ufærdige kode til at bygge et semi-fungerende Xposed Framework uden den universelle Xposed Installer til at ledsage den. (Denne præcise ting skete alligevel med den absurde implementering, og det resulterende rod af forskellige installationsmetoder retfærdiggjorde rovo89s tøven.)
Derfor var det bedste, vi kunne gøre, at give rovo89 tid til at arbejde på sit kæledyrsprojekt. Xposed er ikke hans fulde eller endda deltidsjob. Det er simpelthen en hobby, som han har gjort til gavn for samfundet i 5 år. Et så komplekst projekt som Xposed kræver tid til at arbejde og derefter teste – tid, som han ikke ofte havde på grund af sine andre forpligtelser. Fremskridt var blev lavet i løbet af det sidste år, ligesom rovo89 dokumenterede i et par af hans offentlige opdateringer om problemet, indtil både selve Xposed Framework og Xposed Installer er klar til udgivelse.
Hvad gjorde rovo89 for at få Xposed til at fungere i Nougat?
Nye udgivelser af Android medfører nogle gange ændringer i den måde, ART fungerer på, hvilket kan kræve, at dele af Xposed bliver omarbejdet. Android 7.0 Nougat introducerede en Just-in-Time-kompiler til ART for at hjælpe med at forbedre runtime-ydeevnen af for eksempel applikationer. Men det uofficielle Xposed Framework af abforce deaktiverer simpelthen mange ART-optimeringer, så metodehooking kan fungere korrekt.
I modsætning hertil rovo89's implementering beholder alle ART-optimeringer i Android Nougat ved at genkompilere en metodes kalder ved hjælp af JIT og stadig have metoden kroge på plads. Det betyder, at du kan nyde fordelene ved et Xposed-modul uden at ofre ydeevnen ved kraftigt at deaktivere ART-optimeringer.
For yderligere detaljer om, hvad rovo89 gjorde for endelig at opnå en pålidelig tilslutningsmetode i Xposed til Android Nougat, anbefaler vi, at du læser nedenstående erklæring, som han gav os.
Fuld erklæring fra rovo89
Kernen i Xposed er naturligvis dens evne til at tilslutte Java-metoder, dvs. lade moduler udføre kode før, efter eller i stedet for disse metoder. Stort set alle andre funktioner er baseret på dette, så det er afgørende, at det altid fungerer som forventet. Det generelle koncept har været det samme siden jeg opfandt Xposed for fem år siden, det kræver at man ændrer indgangspunktet for metoden. Dette begynder at mislykkes, når indgangspunktet ikke er tjekket under udførelsen - hvilket faktisk er tilfældet med nogle af optimeringerne i ART.
Et eksempel er, når indgangspunktet allerede er kendt på kompileringstidspunktet, så kan opkaldere hoppe direkte til denne adresse uden at slå den op. Et andet eksempel er inlining. Overvej dette eksempel:
ART er smart nok til at bemærke, at twoce()-metoden er meget enkel og derfor integrerer logikken lige ind i doSomething()-metoden, sådan her:
Du kan stadig tilslutte twoce()-metoden, men den kaldes ikke længere fra doSomething() under kørsel, og det vil dit tilbagekald ikke. KUNST er endnu mere klog: Den indser, at magi altid er 42, og derfor kan betingelsen aldrig opfyldes. Så hele doSomething()-metoden er faktisk en no-op:
I tidligere versioner plejede Xposed at deaktivere disse optimeringer fuldstændigt og tvang genkompilering af alt. Det kom med flere ulemper. Først og fremmest gør ART-udviklerne et fantastisk stykke arbejde med at maksimere ydeevnen med deres optimeringer, og deaktivering af dem fører delvist nødvendigvis til mindre ydeevne (jeg har aldrig målt hvor meget selvom). Så er selve omkompileringen ikke altid let og gav mig en masse hovedpine, især i begyndelsen. Endelig optager de genkompilerede filer plads, foruden de prækompilerede filer på /system.
De uofficielle versioner af Nougat deaktiverer også disse optimeringer, men de tvinger ikke omkompileringen (fordi porten oprindeligt blev lavet til at blive integreret i ROM'en). Derfor kan kroge muligvis ikke udføres nogle gange.
Med den officielle version kan du beholde den optimerede kode og stadig have pålidelige kroge. Hvordan virker det? Nå, Xposed optager alle de opkald, der foretages. Dette sker, mens APK'er kompileres, eller i et separat pas for præoptimeret kode. Disse ekstra data fylder ikke meget, men det giver Xposed mulighed for at finde ud af, hvor en bestemt metode kan have været inlinet. Så når en metode er tilsluttet, vil alle dens kaldere blive deoptimeret, dvs. deres kode vil ikke blive brugt længere. Dette sikrer, at hook-tilbagekaldet helt sikkert bliver kaldt. Og hvis den, der ringer, er meget brugt, bliver den blot genkompileret med JIT, denne gang med viden om, at metoden er hooked, og derfor er nogle af optimeringerne ikke gældende. Det betyder, at effekten af hooking-metoder reduceres til det absolutte minimum. Yay!
Gå nu videre og prøv det. Sørg for at bruge Xposed Installer 3.1.2, da konfigurationsstien skulle ændres for at understøtte filbaseret kryptering.
Læs mere
Konklusion
Vi håber, at du er lige så hyped, som vi er omkring udgivelsen af Xposed til Android 7.X Nougat. Ventetiden har været lang, men uundgåelig i betragtning af Xposeds store kompleksitet. Hvis du stadig er i tvivl om, hvad Xposed er, eller hvordan det virker, så fortvivl ikke. Meget få mennesker (inklusiv os) forstår faktisk, hvordan det fungerer. Udviklere som rovo89 gør deres bedste til at pakke deres arbejde, så du ikke rigtig behøver at forstå, hvad der foregår under emhætten.
Kan du lide Xposed Framework? Overvej at donere til rovo89 for det fantastiske arbejde, han gør. Hvis du tror, du har det, der skal til for at bidrage til projektet, så tjek rovo89s GitHub-side nedenfor.
Doner til rovo89
Bidrag til Xposed
Leder du efter Xposed-moduler? Tjek vores Xposed Framework Module-underforum eller download XDA Labs-applikationen og gennemse vores samling af Xposed-moduler.
Xposed Modules Forum
Download XDA Labs
Android Oreo Fremskridt
Hvis du undrer dig, er her hvordan fremskridtet er med at få Xposed til Android Oreo:
Jeg er allerede begyndt at arbejde på Android 8.0. Der er et par stykker nye sprogfunktioner som jeg bliver nødt til at se på, men det generelle koncept burde stadig fungere. Det inkluderer alt arbejdet med at ugyldiggøre kompileret kode for alle opkaldere, når en metode er tilsluttet, hvilket tog langt mest tid, da jeg arbejdede på Nougat. Så jeg er virkelig sikker på, at jeg vil være meget hurtigere denne gang. Android 8.1burde ikke være meget anderledes, så jeg forventer ikke meget ekstra arbejde for det.