Xposed Framework behöver ingen introduktion till XDA-läsare. På frågan om de saker som vårt samhälle hatar mest om Lollipop, den enskilt röstade kommentaren i diskussionen var att den bröt stödet för Xposed. Faktum är att många forummedlemmar till och med vägrat att uppdatera till Lollipop specifikt av denna anledning. Men allt förändras nu, eftersom det efterlängtade Xposed Framework äntligen har kommit till Android Lollipop.
Om du inte redan är bekant med Xposed, enkelt uttryckt, är det en gåva från gud till modding-communityt. Xposed kräver ingen flashning av några ROM-skivor, men ger massor av anpassningar och tweaks som användare kan installera som appar på rotade enheter. Det är otroligt enkelt att använda och med begränsad risk. Och nu kan alla Android-entusiaster på Lollipop njuta av fördelarna med detta fantastiska projekt på sina enheter. Ta din nedladdning och kom till modding!
rovo89 var också vänlig nog att ge oss en Q&A för det senaste projektet. Du hittar svar på alla dina frågor om projektet nedan.
Varför tog det så lång tid? ART har publicerats för mer än ett år sedan!
Först av allt - många människor fortsätter att be om ART-stöd. Lollipop har mycket fler förändringar än så, såsom ännu strängare SELinux-policyer, 64-bitars ROM och arkitekturförändringar som du kan förvänta dig av en större release. Och självklart förbättras ART självt hela tiden; det är stora skillnader mellan ART för KitKat och ART för Lollipop.
Så en anledning är den stora komplexiteten, som krävde många, många timmars arbete för forskning, utveckling och testning.
En annan anledning är att det finns andra saker i mitt liv än Xposed, så det har funnits veckor eller månader då jag knappt ens har tittat på koden alls.
Behöver vi skriva om alla moduler?
Nej, Xposed API är i stort sett oförändrat. Xposed abstraherar alla detaljer, så moduler behöver inte bry sig om de körs på Dalvik eller ART. Många moduler kommer faktiskt att fungera utan några förändringar, särskilt de som ändrar beteendet hos användarappar. Moduler som är inriktade på systemets beteende kan behöva anpassas till den nya Android-ramkoden, vilket orsakas inte av ART, utan helt enkelt av arkitektur och kodändringar som sker mellan två Android-enheter släpper. Det viktigaste är att koden för systemtjänster har flyttats till en separat fil. För de flesta av de påverkade modulerna kan detta lösas genom lite refaktorering (flytta kod till en annan plats).
Fungerar det faktiskt?
Ja! Åtminstone för mig fungerar det bra på min dagliga enhet (Nexus 5 på CM12) och även på min Nexus 9 (betald av XDA – tack!). Telefonen är stabil som vanligt och appar fungerar bra. Och uppenbarligen fungerar modulerna och deras krokar/resursersättningar också bra, annars skulle det inte vara någon mening med att släppa något.
Men varför är det då en alfaversion?
För det har skett enorma förändringar sedan den senaste stabila utgåvan som måste testas av folk som vet hur man använder en återställning, flyr från startslingor och rapporterar buggar ordentligt. Jag rekommenderar starkt nybörjare att vänta tills Xposed har testats av tillräckligt många erfarna personer.
Det finns också några kantfall som inte har testats ännu, till exempel hooking JNI (native) metoder och metoder som exekveras vid tidpunkten för hooking av dem.
Jag vill installera den. Nu! Vad måste jag göra?
Se till att du har läst mina ord ovan och att du är bekant med telefonens inre delar. Självklart måste du vara på en Lollipop ROM och ha en bra säkerhetskopia av dina data. För närvarande kommer jag bara att publicera ARMv7-versionen. 64-bitars är mer komplext, så låt oss prova den "enkla" varianten först.
För närvarande måste installationen utföras manuellt i en anpassad återställning. Att flasha zip-filen kommer att installera:
- app_process32_xposed och några symboliska länkar
- libexposed_art.so
- libart.so och några relaterade binärer + bibliotek (baserat på 5.0.2, utökat med stöd för hooking etc.)
- XposedBridge.jar (nu lagrad i /system/framework)
Säkerhetskopieringar av befintliga filer skapas automatiskt och kan återställas senare.
Det fungerar inte/jag gillar det inte! Hur kan jag avinstallera det?
Det enklaste sättet är att återställa en säkerhetskopia eller flasha systempartitionen. En zip-fil för avinstallation har ännu inte skapats.
Varför ersätter du ART-filer på min enhet? Det är mer invasivt än på Dalvik, kommer att orsaka betydande prestandaproblem och kommer att vara instabilt!
Jag har skrivit ner några anledningar till GitHub. Ja, det är mer invasivt, så jag har försökt undvika det under lång tid, men ur en teknisk och supportorienterad synvinkel tror jag att det är det bättre alternativet.
Mindre prestanda än original ART? Förmodligen, eftersom jag var tvungen att inaktivera vissa optimeringar för att göra vissa typer av krokar möjliga. Detta påverkar dock bara en bråkdel av alla metoder och även för dem är prestandaförlusten verkligen inte betydande eller märkbar, om än mätbar. Det finns fortfarande tusentals andra optimeringar som utförs av ART, och jag försökte inaktivera så få som möjligt och samtidigt ge så mycket flexibilitet som möjligt.
Stabiliteten är bra som nämnts ovan. Jämfört med det tillvägagångssätt jag använde för Dalvik (modifiering av körtidens interna datastrukturer från app_process), är jag till och med ganska säker på att det är mycket mer tillförlitligt att ersätta biblioteken helt sätt. Jag kunde enkelt integrera mina ändringar i befintlig kod och återanvända relaterade funktioner, medan många hacks och antaganden skulle behövas för andra sätt.
Kommer du äntligen att göra källkoden offentlig?
Visst, du kommer att hitta det på GitHub mycket snart efter lanseringen av alfaversionen, i en separat gren för tillfället.
Betyder detta att äldre Android-versioner inte längre stöds nu?
Nej! Den nya koden kompileras på alla 4.x-versioner av Android och behöver bara testas innan en enhetlig release. Men först måste jag vara säker på att det fungerar bra för Lollipop. Möjligen skulle ART-stöd kunna backporteras till KitKat, men det har mindre prioritet.
Hur kan jag tacka dig för ditt arbete?
Många människor har frågat efter sätt att donera några dollar, så jag har satt upp en donation sida nu.
Hur mycket behöver jag donera för att du ska kunna lägga till funktion X eller en modul som gör Y?
Det är inte att donera, det är att betala någon i förväntan på framtida arbete. Jag är inte intresserad av frilansjobb.