Sjećate se kako je Android 8 olakšao tematiziranje vašeg uređaja? Sjećate li se koliko je to bilo zabavno? Pa, vratio se u Android 12, s preokretom.
Puna štala Android 12 izdanje je odmah iza ugla, a Google je to čak i učinio objavio izvorni kod u svoj AOSP repo. Tamo je puno toga novog u Androidu 12, uključujući dodatak slojevima resursa koji se nazivaju Fabricirani slojevi. Ono što je zamišljeno kao API za pomoć sustavu u upravljanju dinamičkim promjenama koje se koriste u Materijalni Vi a monet bi se mogao pretvoriti u nešto puno veće -- barem do izlaska Androida 13.
Pozadina
Mishaal Rahman otkrio je ovaj novi API i skrenuo mi pozornost na njega. Koristio je naredbu ljuske za testiranje različitih vrijednosti resursa u Androidu 12 bez potrebe za ručno kompajliranje preklapajućih APK-ova i mislio je da bi to mogla biti zanimljiva ideja za aplikaciju za rootane uređaje. Kad mi je skrenuo pozornost na to, dosta sam se osvrnuo na izvorni kod za Android 12 i primijetio nešto što sam smatrao prilično zanimljivim. Testirao sam ono što sam pronašao, i evo nas - kako se pokazalo, Fabricated Overlay API može se koristiti za vraćanje tema bez korijena. Prije nego što zađem predaleko u ono što se ovdje događa, objasnit ću što su zapravo Fabricirani slojevi.
Što su proizvedeni slojevi?
Izrađeni slojevi nova su značajka predstavljena u Androidu 12. Slični su klasičnim Runtime Resource Overlays (RRO) koje Android ima već nekoliko godina. I RRO-ovi i Fabricirani slojevi mogu nadjačati različite resurse za različite aplikacije. Možete promijeniti Booleovu vrijednost iz lažne u istinitu (ili obrnuto), postaviti koliko želite da statusna traka bude velika i tako dalje.
Ipak, proizvedeni slojevi imaju neke značajne razlike od RRO-a. Kao prvo, ne morate generirati slojni APK i zatim ga instalirati. Umjesto toga, samo kažete Androidu koje vrijednosti želite promijeniti za koju aplikaciju, a on će se pobrinuti za registriranje vaših promjena kao sloja koji možete omogućiti.
Oni su također malo ograničeniji od RRO-ova. Prije Androida 11, RRO-ovi su mogli nadjačati gotovo sve resurse: Booleove vrijednosti, cijele brojeve, dimenzije, atribute, izglede, pa čak i neobrađene podatkovne datoteke. Android 11 napravio je neke promjene u načinu na koji RRO-ovi funkcioniraju, zbog čega nadjačavanje izgleda više nije izvedivo, iako je RRO-ove općenito učinio stabilnijima.
Izrađeni slojevi, s druge strane, mogu nadjačati samo vrijednosti koje se mogu predstaviti kao cijeli brojevi. To uključuje cijele brojeve (duh), dimenzije, Booleove vrijednosti i boje. Ne možete ih koristiti za nadjačavanje resursa sirovih podataka, izgleda, nizova ili nizova - barem ne lako. Ovo je donekle proizvoljno ograničenje u API-ju: prihvaća samo cjelobrojne vrijednosti i kategorije resursa kako ih definira klasa TypedValue. TypedValue radi podrška nizove i druge vrste resursa, ali samo za referenciranje njihovih resursa, a ne za držanje njihovih stvarnih podataka.
Međutim, ta ograničenja nisu prevelika stvar za namjeravanu svrhu Fabricated Overlays: Material You i monet efekti. Izrađeni slojevi olakšavaju sustavu generiranje i primjenu slojeva boja i dimenzija u hodu, bez ponovnog pokretanja ili čekanja da se APK kompajlira.
Sada, normalno, ovo bi bio samo još jedan zgodan API koji mogu iskoristiti ljudi s rootanim uređajima. Osim ako ne postoji rupa koju je stvorio proizvođač (poput one koju Synergy koristi na Samsung uređajima), slojeve mogu instalirati samo treće strane s root pristupom. To je ipak najbolji dio - Google je zaboravio zakrpati rupu u Androidu 12.
Izrađeni slojevi bez korijena
Android 8 predstavio je novi Overlay Manager Service (ili OMS) API, a ljudi su prilično brzo otkrili da se APK-ovi slojeva mogu instalirati kao normalne aplikacije i zatim omogućiti pomoću ADB-a. Nažalost, Google je ovo zakrpao u Androidu 9 i od tada se mogu dinamički instalirati samo slojevi potpisani istim ključem kao i sustav.
Kako se ispostavilo, Fabricated Overlays za Android 12 imaju rupu koja podsjeća na onu koja je prisutna u Androidu 8: ne trebaju root pristup niti dopuštenja na razini potpisa. Samo im treba nešto što radi kao korisnik ljuske (tj. ADB) da ih registriraju.
Prilično je jasno da je Google namjeravao da Fabricated Overlays budu dostupni samo root-u i korisnicima sustava. Postoji implementacija ADB naredbe za njihovo stvaranje, a ona se neće pokrenuti ako korisnik koji izvršava nije root. Rupa je u tome što je provjera samo u naredbi, a ne u stvarnom API-ju, što znači da je možemo iskoristiti uz malo rada.
ADB na uređaju
Android već dugo ima značajku bežičnog ADB-a. To omogućuje računalu (ili bilo čemu s ADB binarnim i mrežnim pristupom) bežično povezivanje s uređajem. Uglavnom je namijenjen Android uređajima koji nemaju korisnički dostupne USB veze, npr pametni satovi i televizori. Nadalje, prije Androida 11 bila vam je potrebna žična ADB veza za aktivaciju bežični način rada.
Android 11 je ono što je službeno donijelo bežični ADB na telefone i tablete. Malo je kompliciraniji od klasičnog bežičnog ADB-a, s kodovima za uparivanje i autentifikacijom, ali ga korisnik može aktivirati potpuno na uređaju, sve dok je uređaj spojen na WiFi. To znači da je moguće povezati se s vašim uređajem putem ADB-a s vašeg uređaja, a sve što trebate je WiFi veza.
Korištenje Elevated API-ja u aplikaciji
Mnogo je razloga zašto biste mogli htjeti koristiti ograničene API-je u svojoj aplikaciji. Obično je to zato što pružaju neke posebne funkcije koje su vam potrebne. Sve dok API koji vam je potreban ima implementaciju naredbe ljuske, prilično ga je jednostavno koristiti iz aplikacije. Sve što trebate učiniti je stvoriti proces ljuske kao root (ili ADB), pokrenuti pravu naredbu i analizirati rezultat, ako ga ima.
Što ako API nema implementaciju ljuske ili implementaciji ljuske nedostaje nešto što trebate? Ako ste na rootanom uređaju, možete koristiti nešto poput libRootJava. libRootJava vam omogućuje interakciju s Android okvirnim API-jima kao da se vaša aplikacija izvodi kao root korisnik. Ovo je i praktičnije i puno brže od pokretanja naredbi ljuske, jer je sve na istom jeziku i ne morate se brinuti o ručnom raščlanjivanju nizova. Ima neka ograničenja, ali većinom radi odlično.
API libRootJava prilično je fleksibilan. Možete ga prilagoditi da radi kao korisnik ljuske umjesto kao root. Srećom, ne morate, jer je to već netko napravio i zove se Shizuku. Shizuku je gotovo kao kombinacija Magisk Managera i libRootJave.
Aplikacija Shizuku Manager vodi vas kroz postavljanje procesa koji se izvodi kao korisnik ljuske kojem Shizuku može pristupiti. Shizuku API biblioteka može se implementirati u aplikacije kako bi im se omogućio pristup sistemskim API-jima kao da su korisnici ljuske. To je puno centraliziraniji proces od libRootJave, budući da Shizuku treba postaviti samo jednom prije nego što ga svaka aplikacija koja implementira Shizuku API biblioteku može koristiti. Ako vas zanima kako Shizuku radi i kako ga možete integrirati u svoju aplikaciju, Ovdje imam vodič za to.
Shizuku i proizvedeni slojevi
Do sada vjerojatno vidite kamo ovo vodi. Možemo koristiti uslugu kao što je Shizuku za pristup Fabricated Overlays API-ju kao korisnik ljuske, a možemo upotrijebiti bežičnu ADB značajku Androida 11 da bismo dobili pristup na razini ljuske, sve na uređaju. Budući da je ograničenje root korisnika prisutno samo u naredbi ljuske Fabricated Overlays, a ne u stvarnom API-ju, pokretanje kao korisnik ljuske dovoljno je za izravnu upotrebu.
Implementacija: knjižnica i ogledna aplikacija
Što je s detaljima implementacije? Pa, i za to te pokrivam.
U pripremi za ovo, napravio sam oba a knjižnica i potpuno funkcionalna ogledna aplikacija koristeći tu biblioteku.
Sama knjižnica je uglavnom radi praktičnosti. Omotava neke od skrivenih sistemskih API-ja i daje vam nekoliko praktičnih metoda za rukovanje Shizuku dozvolama. Također je fleksibilan, tako da možete osigurati vlastitu instancu IOverlayManager API-ja ako imate drugi način da ga dohvatite.
Primjer aplikacije pokazuje kako biste mogli implementirati biblioteku koristeći Shizuku. Također je potpuno funkcionalna i korisna aplikacija. Glavna stranica prikazuje trenutno registrirane Izrađene slojeve koji su stvoreni putem nje, grupirane prema ciljnoj aplikaciji. Možete ih omogućiti, onemogućiti i izbrisati i tamo.
Dodirom gumba "Dodaj preklapanje" na dnu dolazite do popisa svih aplikacija koje se mogu preklapati. Pretražite ili pomaknite se kako biste pronašli onaj koji vam je potreban i dodirnite ga. Zatim možete pritisnuti gumb "Dodaj" na dnu zaslona da vidite popis resursa koji se mogu nadjačati u toj aplikaciji. Odaberite resurs, postavite njegovu vrijednost i ponovite za onoliko vrijednosti koliko želite promijeniti. Pritisnite gumb "Spremi", unesite naziv, potvrdite i bit ćete vraćeni na glavni zaslon, koji sada prikazuje novi sloj, spreman za uključivanje.
Evo nekoliko snimaka zaslona iz aplikacije, zahvaljujući Mishaalu Rahmanu.
Kao usporednu napomenu, imam i opću aplikaciju za upravljanje slojevima koja se zove... Upravitelj prekrivanja. Sama unaprijed kompilirana aplikacija je dostupno samo na mom Patreonu, ali izvorni kod je besplatno dostupan svakome tko ga želi kompilirati ili modificirati.
Zaključak
Novi Fabricated Overlays API u Androidu 12 prilično je sjajan, uglavnom zato što ne treba root. Možda nije tako sofisticiran kao potpuni RRO APK, ali vam daje puno više fleksibilnosti bez root pristupa.
Pogledajte aplikaciju Fabricate Overlay na GitHubu
Ako imate uređaj s Androidom 12 i želite ovo isprobati, pogledajte GitHub repozitorij s gornjom vezom. Odjeljak Izdanja imat će APK za preuzimanje i korištenje. Knjižnicu bi trebalo biti lako uključiti u vlastitu aplikaciju pomoću JitPacka.
Naravno, ne biste trebali očekivati da će se ova značajka dugo zadržati. Google stvarno ne voli slojeve trećih strana, pa će to gotovo sigurno biti popravljeno kada Android 13 bude objavljen. U međuvremenu, uživajte dok traje!